mirror of
https://github.com/apple/pkl.git
synced 2026-08-29 23:17:17 +02:00
Remove abstract properties (#1781)
This commit is contained in:
@@ -71,6 +71,7 @@ public final class VmModifier {
|
|||||||
|
|
||||||
public static final int VALID_METHOD_MODIFIERS = ABSTRACT | LOCAL | EXTERNAL | CONST;
|
public static final int VALID_METHOD_MODIFIERS = ABSTRACT | LOCAL | EXTERNAL | CONST;
|
||||||
|
|
||||||
|
// for compat, properties may be parsed with abstract modifier but this is ignored
|
||||||
public static final int VALID_PROPERTY_MODIFIERS =
|
public static final int VALID_PROPERTY_MODIFIERS =
|
||||||
ABSTRACT | LOCAL | HIDDEN | EXTERNAL | FIXED | CONST;
|
ABSTRACT | LOCAL | HIDDEN | EXTERNAL | FIXED | CONST;
|
||||||
|
|
||||||
|
|||||||
@@ -1476,7 +1476,7 @@ public class AstBuilder extends AbstractAstBuilder<Object> {
|
|||||||
var scope = (ModuleScope) symbolTable.getCurrentScope();
|
var scope = (ModuleScope) symbolTable.getCurrentScope();
|
||||||
scope.setModifiers(modifiers);
|
scope.setModifiers(modifiers);
|
||||||
|
|
||||||
checkAbstractMembersAllowed(modifiers, mod.getProperties(), mod.getMethods());
|
checkAbstractMethodsAllowed(modifiers, mod.getMethods(), "module");
|
||||||
|
|
||||||
// visit imports first so that we already have the object member name available
|
// visit imports first so that we already have the object member name available
|
||||||
var imports = mod.getImports();
|
var imports = mod.getImports();
|
||||||
@@ -1722,7 +1722,7 @@ public class AstBuilder extends AbstractAstBuilder<Object> {
|
|||||||
List<ClassProperty> properties = bodyNode != null ? bodyNode.getProperties() : List.of();
|
List<ClassProperty> properties = bodyNode != null ? bodyNode.getProperties() : List.of();
|
||||||
List<ClassMethod> methods = bodyNode != null ? bodyNode.getMethods() : List.of();
|
List<ClassMethod> methods = bodyNode != null ? bodyNode.getMethods() : List.of();
|
||||||
registerClassScopeNames(scope, properties, methods);
|
registerClassScopeNames(scope, properties, methods);
|
||||||
checkAbstractMembersAllowed(modifiers, properties, methods);
|
checkAbstractMethodsAllowed(modifiers, methods, "class");
|
||||||
|
|
||||||
var supertypeCtx = clazz.getSuperClass();
|
var supertypeCtx = clazz.getSuperClass();
|
||||||
|
|
||||||
@@ -1813,26 +1813,19 @@ public class AstBuilder extends AbstractAstBuilder<Object> {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkAbstractMembersAllowed(
|
private void checkAbstractMethodsAllowed(
|
||||||
int enclosingModifiers, List<ClassProperty> properties, List<ClassMethod> methods) {
|
int enclosingModifiers, List<ClassMethod> methods, String context) {
|
||||||
if (VmModifier.isAbstract(enclosingModifiers)) {
|
if (VmModifier.isAbstract(enclosingModifiers)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (var property : properties) {
|
|
||||||
checkMemberNotAbstract(property.getModifiers());
|
|
||||||
}
|
|
||||||
for (var method : methods) {
|
for (var method : methods) {
|
||||||
checkMemberNotAbstract(method.getModifiers());
|
for (var modifier : method.getModifiers()) {
|
||||||
}
|
if (modifier.getValue() == ModifierValue.ABSTRACT) {
|
||||||
}
|
throw exceptionBuilder()
|
||||||
|
.evalError("abstractMethodInNonAbstractType", context)
|
||||||
private void checkMemberNotAbstract(List<Modifier> modifiers) {
|
.withSourceSection(createSourceSection(modifier.span()))
|
||||||
for (var modifier : modifiers) {
|
.build();
|
||||||
if (modifier.getValue() == ModifierValue.ABSTRACT) {
|
}
|
||||||
throw exceptionBuilder()
|
|
||||||
.evalError("abstractMemberInNonAbstractClass")
|
|
||||||
.withSourceSection(createSourceSection(modifier.span()))
|
|
||||||
.build();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1878,9 +1871,11 @@ public class AstBuilder extends AbstractAstBuilder<Object> {
|
|||||||
var headerEnd = typeAnnotation != null ? typeAnnotation.span() : name.span();
|
var headerEnd = typeAnnotation != null ? typeAnnotation.span() : name.span();
|
||||||
var headerSection = createSourceSection(headerStart.endWith(headerEnd));
|
var headerSection = createSourceSection(headerStart.endWith(headerEnd));
|
||||||
|
|
||||||
var modifiers =
|
var fullModifiers =
|
||||||
doVisitModifiers(
|
doVisitModifiers(
|
||||||
modifierList, VmModifier.VALID_PROPERTY_MODIFIERS, "invalidPropertyModifier");
|
modifierList, VmModifier.VALID_PROPERTY_MODIFIERS, "invalidPropertyModifier");
|
||||||
|
// for compat, properties may be abstract, but ignore this
|
||||||
|
var modifiers = fullModifiers & ~VmModifier.ABSTRACT;
|
||||||
|
|
||||||
var isLocal = VmModifier.isLocal(modifiers);
|
var isLocal = VmModifier.isLocal(modifiers);
|
||||||
var propertyName = org.pkl.core.runtime.Identifier.property(name.getValue(), isLocal);
|
var propertyName = org.pkl.core.runtime.Identifier.property(name.getValue(), isLocal);
|
||||||
@@ -1899,12 +1894,6 @@ public class AstBuilder extends AbstractAstBuilder<Object> {
|
|||||||
.withSourceSection(headerSection)
|
.withSourceSection(headerSection)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
if (VmModifier.isAbstract(modifiers)) {
|
|
||||||
throw exceptionBuilder()
|
|
||||||
.evalError("abstractMemberCannotHaveBody")
|
|
||||||
.withSourceSection(headerSection)
|
|
||||||
.build();
|
|
||||||
}
|
|
||||||
bodyNode = visitExpr(expr);
|
bodyNode = visitExpr(expr);
|
||||||
} else if (!objectBodies.isEmpty()) { // prop { ... }
|
} else if (!objectBodies.isEmpty()) { // prop { ... }
|
||||||
if (typeAnnotation != null) {
|
if (typeAnnotation != null) {
|
||||||
@@ -1931,9 +1920,6 @@ public class AstBuilder extends AbstractAstBuilder<Object> {
|
|||||||
if (bodyNode instanceof LanguageAwareNode languageAwareNode) {
|
if (bodyNode instanceof LanguageAwareNode languageAwareNode) {
|
||||||
languageAwareNode.initLanguage(language);
|
languageAwareNode.initLanguage(language);
|
||||||
}
|
}
|
||||||
} else if (VmModifier.isAbstract(modifiers)) {
|
|
||||||
bodyNode =
|
|
||||||
new CannotInvokeAbstractPropertyNode(headerSection, scope.getQualifiedName());
|
|
||||||
} else {
|
} else {
|
||||||
bodyNode = null; // will be given a default by UnresolvedPropertyNode
|
bodyNode = null; // will be given a default by UnresolvedPropertyNode
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
package org.pkl.core.ast.builder;
|
|
||||||
|
|
||||||
import com.oracle.truffle.api.CompilerDirectives;
|
|
||||||
import com.oracle.truffle.api.frame.VirtualFrame;
|
|
||||||
import com.oracle.truffle.api.source.SourceSection;
|
|
||||||
import org.pkl.core.ast.ExpressionNode;
|
|
||||||
|
|
||||||
public final class CannotInvokeAbstractPropertyNode extends ExpressionNode {
|
|
||||||
private final String propertyName;
|
|
||||||
|
|
||||||
public CannotInvokeAbstractPropertyNode(SourceSection section, String propertyName) {
|
|
||||||
super(section);
|
|
||||||
this.propertyName = propertyName;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object executeGeneric(VirtualFrame frame) {
|
|
||||||
CompilerDirectives.transferToInterpreter();
|
|
||||||
throw exceptionBuilder().evalError("cannotInvokeAbstractProperty", propertyName).build();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -180,8 +180,7 @@ public final class MirrorFactories {
|
|||||||
.addProperty(
|
.addProperty(
|
||||||
"defaultValue",
|
"defaultValue",
|
||||||
property ->
|
property ->
|
||||||
property.isAbstract()
|
property.isExternal()
|
||||||
|| property.isExternal()
|
|
||||||
|| property
|
|| property
|
||||||
.getInitializer()
|
.getInitializer()
|
||||||
.isUndefined(VmUtils.createEmptyMaterializedFrame())
|
.isUndefined(VmUtils.createEmptyMaterializedFrame())
|
||||||
|
|||||||
@@ -43,9 +43,6 @@ Type alias definitions must not be cyclic.
|
|||||||
cannotInvokeAbstractMethod=\
|
cannotInvokeAbstractMethod=\
|
||||||
Cannot invoke abstract method `{0}`.
|
Cannot invoke abstract method `{0}`.
|
||||||
|
|
||||||
cannotInvokeAbstractProperty=\
|
|
||||||
Cannot invoke abstract property `{0}`.
|
|
||||||
|
|
||||||
cannotInvokeSupermethodFromHere=\
|
cannotInvokeSupermethodFromHere=\
|
||||||
Cannot invoke a supermethod from here.
|
Cannot invoke a supermethod from here.
|
||||||
|
|
||||||
@@ -289,8 +286,8 @@ External members cannot have a body.
|
|||||||
abstractMemberCannotHaveBody=\
|
abstractMemberCannotHaveBody=\
|
||||||
Abstract members cannot have a body.
|
Abstract members cannot have a body.
|
||||||
|
|
||||||
abstractMemberInNonAbstractClass=\
|
abstractMethodInNonAbstractType=\
|
||||||
Cannot define an abstract member in a non-abstract class.\n\
|
Cannot define an abstract method in a non-abstract {0}.\n\
|
||||||
\n\
|
\n\
|
||||||
A member can only be `abstract` if its enclosing class is also `abstract`.
|
A member can only be `abstract` if its enclosing class is also `abstract`.
|
||||||
|
|
||||||
|
|||||||
Vendored
-5
@@ -1,5 +0,0 @@
|
|||||||
class Foo {
|
|
||||||
abstract bar: Int
|
|
||||||
}
|
|
||||||
|
|
||||||
res = new Foo { bar = 5 }
|
|
||||||
Vendored
-1
@@ -1 +0,0 @@
|
|||||||
abstract foo: Int
|
|
||||||
Vendored
+1
@@ -0,0 +1 @@
|
|||||||
|
abstract function foo(): Int
|
||||||
+1
-1
@@ -18,7 +18,7 @@ res3 = f(List(1, 2))
|
|||||||
res4 = f(Set(1, 2))
|
res4 = f(Set(1, 2))
|
||||||
|
|
||||||
abstract class Animal {
|
abstract class Animal {
|
||||||
abstract size: String
|
size: String
|
||||||
abstract function walk(): String
|
abstract function walk(): String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Vendored
-8
@@ -1,8 +0,0 @@
|
|||||||
–– Pkl Error ––
|
|
||||||
Cannot define an abstract member in a non-abstract class.
|
|
||||||
|
|
||||||
x | abstract bar: Int
|
|
||||||
^^^^^^^^
|
|
||||||
at abstractMemberInNonAbstractClass#Foo (file:///$snippetsDir/input/errors/abstractMemberInNonAbstractClass.pkl)
|
|
||||||
|
|
||||||
A member can only be `abstract` if its enclosing class is also `abstract`.
|
|
||||||
Vendored
-8
@@ -1,8 +0,0 @@
|
|||||||
–– Pkl Error ––
|
|
||||||
Cannot define an abstract member in a non-abstract class.
|
|
||||||
|
|
||||||
x | abstract foo: Int
|
|
||||||
^^^^^^^^
|
|
||||||
at abstractMemberInNonAbstractModule (file:///$snippetsDir/input/errors/abstractMemberInNonAbstractModule.pkl)
|
|
||||||
|
|
||||||
A member can only be `abstract` if its enclosing class is also `abstract`.
|
|
||||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
–– Pkl Error ––
|
–– Pkl Error ––
|
||||||
Cannot define an abstract member in a non-abstract class.
|
Cannot define an abstract method in a non-abstract class.
|
||||||
|
|
||||||
x | abstract function bar(): Int
|
x | abstract function bar(): Int
|
||||||
^^^^^^^^
|
^^^^^^^^
|
||||||
|
|||||||
Vendored
+8
@@ -0,0 +1,8 @@
|
|||||||
|
–– Pkl Error ––
|
||||||
|
Cannot define an abstract method in a non-abstract module.
|
||||||
|
|
||||||
|
x | abstract function foo(): Int
|
||||||
|
^^^^^^^^
|
||||||
|
at abstractMethodInNonAbstractModule (file:///$snippetsDir/input/errors/abstractMethodInNonAbstractModule.pkl)
|
||||||
|
|
||||||
|
A member can only be `abstract` if its enclosing class is also `abstract`.
|
||||||
+1
-1
@@ -3,7 +3,7 @@ module com.package1.classInheritance
|
|||||||
|
|
||||||
abstract class MyClass1 {
|
abstract class MyClass1 {
|
||||||
/// Inherited property comment.
|
/// Inherited property comment.
|
||||||
abstract property1: Boolean
|
property1: Boolean
|
||||||
|
|
||||||
/// function method1 in class MyClass1.
|
/// function method1 in class MyClass1.
|
||||||
abstract function method1(arg: String): Boolean
|
abstract function method1(arg: String): Boolean
|
||||||
|
|||||||
-3
@@ -8,9 +8,6 @@ abstract class Modifiers {
|
|||||||
/// Property with `hidden` modifier.
|
/// Property with `hidden` modifier.
|
||||||
hidden property2: Float = 3.14159265359
|
hidden property2: Float = 3.14159265359
|
||||||
|
|
||||||
/// Property with `abstract` modifier.
|
|
||||||
abstract property3: Float
|
|
||||||
|
|
||||||
/// Property with multiple modifiers.
|
/// Property with multiple modifiers.
|
||||||
abstract hidden property4: Float
|
abstract hidden property4: Float
|
||||||
|
|
||||||
|
|||||||
-6
@@ -10,10 +10,4 @@ hidden property2: Float = 3.14159265359
|
|||||||
/*
|
/*
|
||||||
/// Property with `external` modifier.
|
/// Property with `external` modifier.
|
||||||
external property3: Float
|
external property3: Float
|
||||||
|
|
||||||
/// Property with `abstract` modifier.
|
|
||||||
abstract property4: Float
|
|
||||||
|
|
||||||
/// Property with multiple modifiers.
|
|
||||||
abstract external hidden property5: Float
|
|
||||||
*/
|
*/
|
||||||
|
|||||||
+1
-1
@@ -50,7 +50,7 @@
|
|||||||
<div id="property1" class="anchor"> </div>
|
<div id="property1" class="anchor"> </div>
|
||||||
<div class="member"><a class="member-selflink material-icons" href="#property1">link</a>
|
<div class="member"><a class="member-selflink material-icons" href="#property1">link</a>
|
||||||
<div class="member-left">
|
<div class="member-left">
|
||||||
<div class="member-modifiers">abstract </div>
|
<div class="member-modifiers"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="member-main">
|
<div class="member-main">
|
||||||
<div class="member-signature"><span class="name-decl">property1</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Boolean.html" class="name-ref">Boolean</a><a class="member-source-link" href="https://example.com/package1/classInheritance.pkl#L123-L456">Source</a></div>
|
<div class="member-signature"><span class="name-decl">property1</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Boolean.html" class="name-ref">Boolean</a><a class="member-source-link" href="https://example.com/package1/classInheritance.pkl#L123-L456">Source</a></div>
|
||||||
|
|||||||
+1
-13
@@ -58,23 +58,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<div id="property3" class="anchor"> </div>
|
|
||||||
<div class="member"><a class="member-selflink material-icons" href="#property3">link</a>
|
|
||||||
<div class="member-left">
|
|
||||||
<div class="member-modifiers">abstract </div>
|
|
||||||
</div>
|
|
||||||
<div class="member-main">
|
|
||||||
<div class="member-signature"><span class="name-decl">property3</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Float.html" class="name-ref">Float</a><a class="member-source-link" href="https://example.com/package1/classPropertyModifiers.pkl#L123-L456">Source</a></div>
|
|
||||||
<div class="doc-comment"><p>Property with <code>abstract</code> modifier.</p></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<div id="property4" class="anchor"> </div>
|
<div id="property4" class="anchor"> </div>
|
||||||
<div class="member hidden-member"><a class="member-selflink material-icons" href="#property4">link</a>
|
<div class="member hidden-member"><a class="member-selflink material-icons" href="#property4">link</a>
|
||||||
<div class="member-left">
|
<div class="member-left">
|
||||||
<div class="member-modifiers">abstract hidden </div>
|
<div class="member-modifiers">hidden </div>
|
||||||
</div>
|
</div>
|
||||||
<div class="member-main">
|
<div class="member-main">
|
||||||
<div class="member-signature"><span class="name-decl">property4</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Float.html" class="name-ref">Float</a><a class="member-source-link" href="https://example.com/package1/classPropertyModifiers.pkl#L123-L456">Source</a></div>
|
<div class="member-signature"><span class="name-decl">property4</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Float.html" class="name-ref">Float</a><a class="member-source-link" href="https://example.com/package1/classPropertyModifiers.pkl#L123-L456">Source</a></div>
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -50,7 +50,7 @@
|
|||||||
<div id="property1" class="anchor"> </div>
|
<div id="property1" class="anchor"> </div>
|
||||||
<div class="member"><a class="member-selflink material-icons" href="#property1">link</a>
|
<div class="member"><a class="member-selflink material-icons" href="#property1">link</a>
|
||||||
<div class="member-left">
|
<div class="member-left">
|
||||||
<div class="member-modifiers">abstract </div>
|
<div class="member-modifiers"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="member-main">
|
<div class="member-main">
|
||||||
<div class="member-signature"><span class="name-decl">property1</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Boolean.html" class="name-ref">Boolean</a><a class="member-source-link" href="https://example.com/package1/classInheritance.pkl#L123-L456">Source</a></div>
|
<div class="member-signature"><span class="name-decl">property1</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Boolean.html" class="name-ref">Boolean</a><a class="member-source-link" href="https://example.com/package1/classInheritance.pkl#L123-L456">Source</a></div>
|
||||||
|
|||||||
+1
-13
@@ -58,23 +58,11 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<div id="property3" class="anchor"> </div>
|
|
||||||
<div class="member"><a class="member-selflink material-icons" href="#property3">link</a>
|
|
||||||
<div class="member-left">
|
|
||||||
<div class="member-modifiers">abstract </div>
|
|
||||||
</div>
|
|
||||||
<div class="member-main">
|
|
||||||
<div class="member-signature"><span class="name-decl">property3</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Float.html" class="name-ref">Float</a><a class="member-source-link" href="https://example.com/package1/classPropertyModifiers.pkl#L123-L456">Source</a></div>
|
|
||||||
<div class="doc-comment"><p>Property with <code>abstract</code> modifier.</p></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<div id="property4" class="anchor"> </div>
|
<div id="property4" class="anchor"> </div>
|
||||||
<div class="member hidden-member"><a class="member-selflink material-icons" href="#property4">link</a>
|
<div class="member hidden-member"><a class="member-selflink material-icons" href="#property4">link</a>
|
||||||
<div class="member-left">
|
<div class="member-left">
|
||||||
<div class="member-modifiers">abstract hidden </div>
|
<div class="member-modifiers">hidden </div>
|
||||||
</div>
|
</div>
|
||||||
<div class="member-main">
|
<div class="member-main">
|
||||||
<div class="member-signature"><span class="name-decl">property4</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Float.html" class="name-ref">Float</a><a class="member-source-link" href="https://example.com/package1/classPropertyModifiers.pkl#L123-L456">Source</a></div>
|
<div class="member-signature"><span class="name-decl">property4</span>: <a href="https://pages.github.com/apple/pkl/stdlib/pkl/0.24.0/base/Float.html" class="name-ref">Float</a><a class="member-source-link" href="https://example.com/package1/classPropertyModifiers.pkl#L123-L456">Source</a></div>
|
||||||
|
|||||||
+1
-1
File diff suppressed because one or more lines are too long
+42
-42
@@ -740,28 +740,28 @@ class Resource {
|
|||||||
/// use [Number] instead of [Float] in type annotations.
|
/// use [Number] instead of [Float] in type annotations.
|
||||||
abstract external class Number extends Any {
|
abstract external class Number extends Any {
|
||||||
/// A [Duration] with value [this] and unit `"ns"` (nanoseconds).
|
/// A [Duration] with value [this] and unit `"ns"` (nanoseconds).
|
||||||
abstract ns: Duration
|
ns: Duration
|
||||||
|
|
||||||
/// A [Duration] with value [this] and unit `"us"` (microseconds).
|
/// A [Duration] with value [this] and unit `"us"` (microseconds).
|
||||||
abstract us: Duration
|
us: Duration
|
||||||
|
|
||||||
/// A [Duration] with value [this] and unit `"ms"` (milliseconds).
|
/// A [Duration] with value [this] and unit `"ms"` (milliseconds).
|
||||||
abstract ms: Duration
|
ms: Duration
|
||||||
|
|
||||||
/// A [Duration] with value [this] and unit `"s"` (seconds).
|
/// A [Duration] with value [this] and unit `"s"` (seconds).
|
||||||
abstract s: Duration
|
s: Duration
|
||||||
|
|
||||||
/// A [Duration] with value [this] and unit `"min"` (minutes).
|
/// A [Duration] with value [this] and unit `"min"` (minutes).
|
||||||
abstract min: Duration
|
min: Duration
|
||||||
|
|
||||||
/// A [Duration] with value [this] and unit `"h"` (hours).
|
/// A [Duration] with value [this] and unit `"h"` (hours).
|
||||||
abstract h: Duration
|
h: Duration
|
||||||
|
|
||||||
/// A [Duration] with value [this] and unit `"d"` (days).
|
/// A [Duration] with value [this] and unit `"d"` (days).
|
||||||
abstract d: Duration
|
d: Duration
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"b"` (bytes).
|
/// A [DataSize] with value [this] and unit `"b"` (bytes).
|
||||||
abstract b: DataSize
|
b: DataSize
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"kb"` (kilobytes).
|
/// A [DataSize] with value [this] and unit `"kb"` (kilobytes).
|
||||||
///
|
///
|
||||||
@@ -769,7 +769,7 @@ abstract external class Number extends Any {
|
|||||||
/// ```
|
/// ```
|
||||||
/// 1.kb == 1000.b
|
/// 1.kb == 1000.b
|
||||||
/// ```
|
/// ```
|
||||||
abstract kb: DataSize
|
kb: DataSize
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"mb"` (megabytes).
|
/// A [DataSize] with value [this] and unit `"mb"` (megabytes).
|
||||||
///
|
///
|
||||||
@@ -777,7 +777,7 @@ abstract external class Number extends Any {
|
|||||||
/// ```
|
/// ```
|
||||||
/// 1.mb == 1000.kb
|
/// 1.mb == 1000.kb
|
||||||
/// ```
|
/// ```
|
||||||
abstract mb: DataSize
|
mb: DataSize
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"gb"` (gigabytes).
|
/// A [DataSize] with value [this] and unit `"gb"` (gigabytes).
|
||||||
///
|
///
|
||||||
@@ -785,7 +785,7 @@ abstract external class Number extends Any {
|
|||||||
/// ```
|
/// ```
|
||||||
/// 1.gb == 1000.mb
|
/// 1.gb == 1000.mb
|
||||||
/// ```
|
/// ```
|
||||||
abstract gb: DataSize
|
gb: DataSize
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"tb"` (terabytes).
|
/// A [DataSize] with value [this] and unit `"tb"` (terabytes).
|
||||||
///
|
///
|
||||||
@@ -793,7 +793,7 @@ abstract external class Number extends Any {
|
|||||||
/// ```
|
/// ```
|
||||||
/// 1.tb == 1000.gb
|
/// 1.tb == 1000.gb
|
||||||
/// ```
|
/// ```
|
||||||
abstract tb: DataSize
|
tb: DataSize
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"pb"` (petabytes).
|
/// A [DataSize] with value [this] and unit `"pb"` (petabytes).
|
||||||
///
|
///
|
||||||
@@ -801,7 +801,7 @@ abstract external class Number extends Any {
|
|||||||
/// ```
|
/// ```
|
||||||
/// 1.pb == 1000.tb
|
/// 1.pb == 1000.tb
|
||||||
/// ```
|
/// ```
|
||||||
abstract pb: DataSize
|
pb: DataSize
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"kib"` (kibibytes).
|
/// A [DataSize] with value [this] and unit `"kib"` (kibibytes).
|
||||||
///
|
///
|
||||||
@@ -809,7 +809,7 @@ abstract external class Number extends Any {
|
|||||||
/// ```
|
/// ```
|
||||||
/// 1.kib == 1024.b
|
/// 1.kib == 1024.b
|
||||||
/// ```
|
/// ```
|
||||||
abstract kib: DataSize
|
kib: DataSize
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"mib"` (mebibytes).
|
/// A [DataSize] with value [this] and unit `"mib"` (mebibytes).
|
||||||
///
|
///
|
||||||
@@ -817,7 +817,7 @@ abstract external class Number extends Any {
|
|||||||
/// ```
|
/// ```
|
||||||
/// 1.mib == 1024.kib
|
/// 1.mib == 1024.kib
|
||||||
/// ```
|
/// ```
|
||||||
abstract mib: DataSize
|
mib: DataSize
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"gib"` (gibibytes).
|
/// A [DataSize] with value [this] and unit `"gib"` (gibibytes).
|
||||||
///
|
///
|
||||||
@@ -825,7 +825,7 @@ abstract external class Number extends Any {
|
|||||||
/// ```
|
/// ```
|
||||||
/// 1.gib == 1024.mib
|
/// 1.gib == 1024.mib
|
||||||
/// ```
|
/// ```
|
||||||
abstract gib: DataSize
|
gib: DataSize
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"tib"` (tebibytes).
|
/// A [DataSize] with value [this] and unit `"tib"` (tebibytes).
|
||||||
///
|
///
|
||||||
@@ -833,7 +833,7 @@ abstract external class Number extends Any {
|
|||||||
/// ```
|
/// ```
|
||||||
/// 1.tib == 1024.gib
|
/// 1.tib == 1024.gib
|
||||||
/// ```
|
/// ```
|
||||||
abstract tib: DataSize
|
tib: DataSize
|
||||||
|
|
||||||
/// A [DataSize] with value [this] and unit `"pib"` (pebibytes).
|
/// A [DataSize] with value [this] and unit `"pib"` (pebibytes).
|
||||||
///
|
///
|
||||||
@@ -841,14 +841,14 @@ abstract external class Number extends Any {
|
|||||||
/// ```
|
/// ```
|
||||||
/// 1.pib == 1024.tib
|
/// 1.pib == 1024.tib
|
||||||
/// ```
|
/// ```
|
||||||
abstract pib: DataSize
|
pib: DataSize
|
||||||
|
|
||||||
/// The sign of this number.
|
/// The sign of this number.
|
||||||
///
|
///
|
||||||
/// Returns `0` for `0`, `0.0`, `-0.0`, and [NaN],
|
/// Returns `0` for `0`, `0.0`, `-0.0`, and [NaN],
|
||||||
/// `1` for positive numbers (including [Infinity]),
|
/// `1` for positive numbers (including [Infinity]),
|
||||||
/// and `-1` for negative numbers (including `-`[Infinity]).
|
/// and `-1` for negative numbers (including `-`[Infinity]).
|
||||||
abstract sign: Number
|
sign: Number
|
||||||
|
|
||||||
/// The absolute value of this number.
|
/// The absolute value of this number.
|
||||||
///
|
///
|
||||||
@@ -862,7 +862,7 @@ abstract external class Number extends Any {
|
|||||||
/// (-Infinity).abs == Infinity
|
/// (-Infinity).abs == Infinity
|
||||||
/// NaN.abs == NaN
|
/// NaN.abs == NaN
|
||||||
/// ```
|
/// ```
|
||||||
abstract abs: Number
|
abs: Number
|
||||||
|
|
||||||
/// Rounds this number to the next mathematical integer towards [Infinity].
|
/// Rounds this number to the next mathematical integer towards [Infinity].
|
||||||
///
|
///
|
||||||
@@ -870,7 +870,7 @@ abstract external class Number extends Any {
|
|||||||
/// If [this] is [NaN], [Infinity], -[Infinity], `0.0`, or `-0.0`, returns [this].
|
/// If [this] is [NaN], [Infinity], -[Infinity], `0.0`, or `-0.0`, returns [this].
|
||||||
/// Otherwise, returns the smallest [Float] that is greater than or equal to [this]
|
/// Otherwise, returns the smallest [Float] that is greater than or equal to [this]
|
||||||
/// and is equal to a mathematical integer.
|
/// and is equal to a mathematical integer.
|
||||||
abstract ceil: Number
|
ceil: Number
|
||||||
|
|
||||||
/// Rounds this number to the next mathematical integer towards -[Infinity].
|
/// Rounds this number to the next mathematical integer towards -[Infinity].
|
||||||
///
|
///
|
||||||
@@ -878,7 +878,7 @@ abstract external class Number extends Any {
|
|||||||
/// If [this] is [NaN], [Infinity], -[Infinity], `0.0`, or `-0.0`, returns [this].
|
/// If [this] is [NaN], [Infinity], -[Infinity], `0.0`, or `-0.0`, returns [this].
|
||||||
/// Otherwise, returns the largest [Float] that is less than or equal to [this]
|
/// Otherwise, returns the largest [Float] that is less than or equal to [this]
|
||||||
/// and is equal to a mathematical integer.
|
/// and is equal to a mathematical integer.
|
||||||
abstract floor: Number
|
floor: Number
|
||||||
|
|
||||||
/// Rounds this number to the nearest mathematical integer, breaking ties in favor
|
/// Rounds this number to the nearest mathematical integer, breaking ties in favor
|
||||||
/// of the even integer.
|
/// of the even integer.
|
||||||
@@ -946,23 +946,23 @@ abstract external class Number extends Any {
|
|||||||
/// !(-Infinity).isPositive
|
/// !(-Infinity).isPositive
|
||||||
/// !NaN.isPositive
|
/// !NaN.isPositive
|
||||||
/// ```
|
/// ```
|
||||||
abstract isPositive: Boolean
|
isPositive: Boolean
|
||||||
|
|
||||||
/// Tells if this number is neither [NaN] nor [isInfinite].
|
/// Tells if this number is neither [NaN] nor [isInfinite].
|
||||||
abstract isFinite: Boolean
|
isFinite: Boolean
|
||||||
|
|
||||||
/// Tells if this number is [Infinity] or -[Infinity].
|
/// Tells if this number is [Infinity] or -[Infinity].
|
||||||
abstract isInfinite: Boolean
|
isInfinite: Boolean
|
||||||
|
|
||||||
/// Tells if this number is [NaN].
|
/// Tells if this number is [NaN].
|
||||||
///
|
///
|
||||||
/// Always use this method when testing for [NaN].
|
/// Always use this method when testing for [NaN].
|
||||||
/// Note that `x == NaN` is *not* a correct way to test for [NaN] because `NaN != NaN` as per the
|
/// Note that `x == NaN` is *not* a correct way to test for [NaN] because `NaN != NaN` as per the
|
||||||
/// IEEE spec.
|
/// IEEE spec.
|
||||||
abstract isNaN: Boolean
|
isNaN: Boolean
|
||||||
|
|
||||||
/// Tells if this number is not 0.
|
/// Tells if this number is not 0.
|
||||||
abstract isNonZero: Boolean
|
isNonZero: Boolean
|
||||||
|
|
||||||
/// Tells if this number is greater than or equal to [start] and less than or equal to
|
/// Tells if this number is greater than or equal to [start] and less than or equal to
|
||||||
/// [inclusiveEnd].
|
/// [inclusiveEnd].
|
||||||
@@ -2419,7 +2419,7 @@ abstract external class Collection<out Element> extends Any {
|
|||||||
/// List().length == 0
|
/// List().length == 0
|
||||||
/// ```
|
/// ```
|
||||||
@AlsoKnownAs { names { "size"; "count" } }
|
@AlsoKnownAs { names { "size"; "count" } }
|
||||||
abstract length: Int
|
length: Int
|
||||||
|
|
||||||
/// Tells whether this collection is empty.
|
/// Tells whether this collection is empty.
|
||||||
///
|
///
|
||||||
@@ -2428,7 +2428,7 @@ abstract external class Collection<out Element> extends Any {
|
|||||||
/// !List(1, 2, 3).isEmpty
|
/// !List(1, 2, 3).isEmpty
|
||||||
/// List().isEmpty
|
/// List().isEmpty
|
||||||
/// ```
|
/// ```
|
||||||
abstract isEmpty: Boolean
|
isEmpty: Boolean
|
||||||
|
|
||||||
/// Tells whether this collection is not empty.
|
/// Tells whether this collection is not empty.
|
||||||
///
|
///
|
||||||
@@ -2438,7 +2438,7 @@ abstract external class Collection<out Element> extends Any {
|
|||||||
/// !List().isNotEmpty
|
/// !List().isNotEmpty
|
||||||
/// ```
|
/// ```
|
||||||
@Since { version = "0.31.0" }
|
@Since { version = "0.31.0" }
|
||||||
abstract isNotEmpty: Boolean
|
isNotEmpty: Boolean
|
||||||
|
|
||||||
/// The first element in this collection.
|
/// The first element in this collection.
|
||||||
///
|
///
|
||||||
@@ -2450,11 +2450,11 @@ abstract external class Collection<out Element> extends Any {
|
|||||||
/// import("pkl:test").catch(() -> List().first)
|
/// import("pkl:test").catch(() -> List().first)
|
||||||
/// ```
|
/// ```
|
||||||
@AlsoKnownAs { names { "head" } }
|
@AlsoKnownAs { names { "head" } }
|
||||||
abstract first: Element
|
first: Element
|
||||||
|
|
||||||
/// Same as [first] but returns [null] if this collection is empty.
|
/// Same as [first] but returns [null] if this collection is empty.
|
||||||
@AlsoKnownAs { names { "head" } }
|
@AlsoKnownAs { names { "head" } }
|
||||||
abstract firstOrNull: Element?
|
firstOrNull: Element?
|
||||||
|
|
||||||
/// The tail of this collection.
|
/// The tail of this collection.
|
||||||
///
|
///
|
||||||
@@ -2466,11 +2466,11 @@ abstract external class Collection<out Element> extends Any {
|
|||||||
/// import("pkl:test").catch(() -> List().rest)
|
/// import("pkl:test").catch(() -> List().rest)
|
||||||
/// ```
|
/// ```
|
||||||
@AlsoKnownAs { names { "tail" } }
|
@AlsoKnownAs { names { "tail" } }
|
||||||
abstract rest: Collection<Element>
|
rest: Collection<Element>
|
||||||
|
|
||||||
/// Same as [rest] but returns [null] if this collection is empty.
|
/// Same as [rest] but returns [null] if this collection is empty.
|
||||||
@AlsoKnownAs { names { "tail" } }
|
@AlsoKnownAs { names { "tail" } }
|
||||||
abstract restOrNull: Collection<Element>?
|
restOrNull: Collection<Element>?
|
||||||
|
|
||||||
/// The last element in this collection.
|
/// The last element in this collection.
|
||||||
///
|
///
|
||||||
@@ -2481,10 +2481,10 @@ abstract external class Collection<out Element> extends Any {
|
|||||||
/// List(1, 2, 3).last == 3
|
/// List(1, 2, 3).last == 3
|
||||||
/// import("pkl:test").catch(() -> List().last)
|
/// import("pkl:test").catch(() -> List().last)
|
||||||
/// ```
|
/// ```
|
||||||
abstract last: Element
|
last: Element
|
||||||
|
|
||||||
/// Same as [last] but returns [null] if this collection is empty.
|
/// Same as [last] but returns [null] if this collection is empty.
|
||||||
abstract lastOrNull: Element?
|
lastOrNull: Element?
|
||||||
|
|
||||||
/// The single element in this collection.
|
/// The single element in this collection.
|
||||||
///
|
///
|
||||||
@@ -2496,10 +2496,10 @@ abstract external class Collection<out Element> extends Any {
|
|||||||
/// throws(() -> List().single)
|
/// throws(() -> List().single)
|
||||||
/// throws(() -> List(1, 2, 3).single)
|
/// throws(() -> List(1, 2, 3).single)
|
||||||
/// ```
|
/// ```
|
||||||
abstract single: Element
|
single: Element
|
||||||
|
|
||||||
/// Same as [single] but returns [null] if this collection is empty or has more than one element.
|
/// Same as [single] but returns [null] if this collection is empty or has more than one element.
|
||||||
abstract singleOrNull: Element?
|
singleOrNull: Element?
|
||||||
|
|
||||||
/// Tests if [element] is contained in this collection.
|
/// Tests if [element] is contained in this collection.
|
||||||
///
|
///
|
||||||
@@ -2790,10 +2790,10 @@ abstract external class Collection<out Element> extends Any {
|
|||||||
/// Shorthand for `minWith((a, b) -> a < b)`.
|
/// Shorthand for `minWith((a, b) -> a < b)`.
|
||||||
///
|
///
|
||||||
/// Throws if this collection is empty, or if any two elements cannot be compared with `<`.
|
/// Throws if this collection is empty, or if any two elements cannot be compared with `<`.
|
||||||
abstract min: Element
|
min: Element
|
||||||
|
|
||||||
/// Same as [min] but returns [null] if this collection is empty.
|
/// Same as [min] but returns [null] if this collection is empty.
|
||||||
abstract minOrNull: Element?
|
minOrNull: Element?
|
||||||
|
|
||||||
/// Returns the first element in this collection that is less than or equal to any other element
|
/// Returns the first element in this collection that is less than or equal to any other element
|
||||||
/// after applying [selector].
|
/// after applying [selector].
|
||||||
@@ -2824,10 +2824,10 @@ abstract external class Collection<out Element> extends Any {
|
|||||||
/// Shorthand for `maxWith((a, b) -> a < b)`.
|
/// Shorthand for `maxWith((a, b) -> a < b)`.
|
||||||
///
|
///
|
||||||
/// Throws if this collection is empty, or if any two elements cannot be compared with `<`.
|
/// Throws if this collection is empty, or if any two elements cannot be compared with `<`.
|
||||||
abstract max: Element
|
max: Element
|
||||||
|
|
||||||
/// Same as [max] but returns [null] if this collection empty.
|
/// Same as [max] but returns [null] if this collection empty.
|
||||||
abstract maxOrNull: Element
|
maxOrNull: Element
|
||||||
|
|
||||||
/// Returns the first element in this collection that is greater than or equal to any other
|
/// Returns the first element in this collection that is greater than or equal to any other
|
||||||
/// element after applying [selector].
|
/// element after applying [selector].
|
||||||
|
|||||||
+2
-2
@@ -216,7 +216,7 @@ external class Module extends Declaration {
|
|||||||
/// A class or type alias declaration.
|
/// A class or type alias declaration.
|
||||||
abstract external class TypeDeclaration extends Declaration {
|
abstract external class TypeDeclaration extends Declaration {
|
||||||
/// The class or type alias reflected upon.
|
/// The class or type alias reflected upon.
|
||||||
abstract hidden reflectee: base.Class | base.TypeAlias
|
hidden reflectee: base.Class | base.TypeAlias
|
||||||
|
|
||||||
/// The module enclosing this type declaration.
|
/// The module enclosing this type declaration.
|
||||||
///
|
///
|
||||||
@@ -224,7 +224,7 @@ abstract external class TypeDeclaration extends Declaration {
|
|||||||
hidden enclosingDeclaration: Module
|
hidden enclosingDeclaration: Module
|
||||||
|
|
||||||
/// The type parameters of this type declaration.
|
/// The type parameters of this type declaration.
|
||||||
abstract typeParameters: List<TypeParameter>
|
typeParameters: List<TypeParameter>
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A class declaration.
|
/// A class declaration.
|
||||||
|
|||||||
Reference in New Issue
Block a user