diff --git a/bench/src/jmh/java/org/pkl/core/parser/ParserBenchmark.java b/bench/src/jmh/java/org/pkl/core/parser/ParserBenchmark.java
index 9442786e..a05075d4 100644
--- a/bench/src/jmh/java/org/pkl/core/parser/ParserBenchmark.java
+++ b/bench/src/jmh/java/org/pkl/core/parser/ParserBenchmark.java
@@ -30,30 +30,31 @@ public class ParserBenchmark {
public void run() {
new Parser()
.parseModule(
- "a1 {\n"
- + " a2 {\n"
- + " a3 {\n"
- + " a4 {\n"
- + " a5 {\n"
- + " a6 {\n"
- + " a7 {\n"
- + " a8 {\n"
- + " a9 {\n"
- + " a10 {\n"
- + " a11 {\n"
- + " a12 {\n"
- + " a13 = map(map(map((x) -> 1)))\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + " }\n"
- + "}");
+ """
+ a1 {
+ a2 {
+ a3 {
+ a4 {
+ a5 {
+ a6 {
+ a7 {
+ a8 {
+ a9 {
+ a10 {
+ a11 {
+ a12 {
+ a13 = map(map(map((x) -> 1)))
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }""");
}
}
diff --git a/pkl-config-java/src/main/java/org/pkl/config/java/Config.java b/pkl-config-java/src/main/java/org/pkl/config/java/Config.java
index 09a12fb0..fd814c71 100644
--- a/pkl-config-java/src/main/java/org/pkl/config/java/Config.java
+++ b/pkl-config-java/src/main/java/org/pkl/config/java/Config.java
@@ -55,7 +55,7 @@ public interface Config {
/**
* Converts this node's value to the given {@link Type}.
*
- *
Note that usages of this methods are not type safe.
+ *
Note that usages of this method are not type safe.
*
* @throws ConversionException if the value cannot be converted to the given type
*/
diff --git a/pkl-config-java/src/main/java/org/pkl/config/java/mapper/ConverterFactory.java b/pkl-config-java/src/main/java/org/pkl/config/java/mapper/ConverterFactory.java
index 0be18af3..d0bac8d1 100644
--- a/pkl-config-java/src/main/java/org/pkl/config/java/mapper/ConverterFactory.java
+++ b/pkl-config-java/src/main/java/org/pkl/config/java/mapper/ConverterFactory.java
@@ -22,12 +22,12 @@ import org.pkl.core.PClassInfo;
/**
* A factory for {@link Converter}s. Used to implement conversions to generic Java classes. In such
- * a case a single {@link Converter} does not suffice. Instead the factory creates a new converter
+ * a case a single {@link Converter} does not suffice. Instead, the factory creates a new converter
* for every parameterization of the target type. Once created, the converter is cached for later
* use, and the factory is never again invoked for the same parameterized target type.
*
*
For best performance, all introspection of target types (for example using {@link Reflection})
- * should happen in the factory rather then the returned converters.
+ * should happen in the factory rather than the returned converters.
*/
@FunctionalInterface
public interface ConverterFactory {
diff --git a/pkl-config-java/src/main/java/org/pkl/config/java/mapper/Reflection.java b/pkl-config-java/src/main/java/org/pkl/config/java/mapper/Reflection.java
index 3049d4af..f421a8dd 100644
--- a/pkl-config-java/src/main/java/org/pkl/config/java/mapper/Reflection.java
+++ b/pkl-config-java/src/main/java/org/pkl/config/java/mapper/Reflection.java
@@ -104,8 +104,8 @@ public final class Reflection {
/**
* Returns a parameterization of the given raw supertype, taking into account type arguments of
- * the given subtype. For example, @{code getExactSupertype(listOf(String.class),
- * Collection.class)} will return @{code collectionOf(String.class)}. If the given subtype is not
+ * the given subtype. For example, {@code getExactSupertype(listOf(String.class),
+ * Collection.class)} will return {@code collectionOf(String.class)}. If the given subtype is not
* a parameterized type, returns the given raw supertype. If the given types have no inheritance
* relationship, returns {@code null}.
*/
@@ -118,8 +118,8 @@ public final class Reflection {
/**
* Returns a parameterization of the given raw subtype, taking into account type arguments of the
- * given supertype. For example, @{code getExactSubtype(collectionOf(String.class), List.class)}
- * will return @{code listOf(String.class)}. If the given supertype is not a parameterized type,
+ * given supertype. For example, {@code getExactSubtype(collectionOf(String.class), List.class)}
+ * will return {@code listOf(String.class)}. If the given supertype is not a parameterized type,
* returns the given raw subtype. If the given types have no inheritance relationship, returns
* {@code null}.
*/
diff --git a/pkl-core/src/generator/kotlin/org/pkl/core/generator/MemberRegistryGenerator.kt b/pkl-core/src/generator/kotlin/org/pkl/core/generator/MemberRegistryGenerator.kt
index ddabcef4..cc866ccf 100644
--- a/pkl-core/src/generator/kotlin/org/pkl/core/generator/MemberRegistryGenerator.kt
+++ b/pkl-core/src/generator/kotlin/org/pkl/core/generator/MemberRegistryGenerator.kt
@@ -20,7 +20,7 @@ import javax.lang.model.type.TypeMirror
* - Generated Truffle node classes for stdlib members.
* These classes are located in subpackages of `org.pkl.core.stdlib`
* and identified via their `@GeneratedBy` annotations.
- * - `@PklName` annotations on hand-written node classes from which Truffle node classes are generated.
+ * - `@PklName` annotations on handwritten node classes from which Truffle node classes are generated.
*/
class MemberRegistryGenerator : AbstractProcessor() {
private val truffleNodeClassSuffix = "NodeGen"
diff --git a/pkl-core/src/main/java/org/pkl/core/DurationUnit.java b/pkl-core/src/main/java/org/pkl/core/DurationUnit.java
index dc76fc90..e0d75c2b 100644
--- a/pkl-core/src/main/java/org/pkl/core/DurationUnit.java
+++ b/pkl-core/src/main/java/org/pkl/core/DurationUnit.java
@@ -83,24 +83,15 @@ public enum DurationUnit {
/** Converts this unit to a {@link java.util.concurrent.TimeUnit}. */
public TimeUnit toTimeUnit() {
- switch (this) {
- case NANOS:
- return TimeUnit.NANOSECONDS;
- case MICROS:
- return TimeUnit.MICROSECONDS;
- case MILLIS:
- return TimeUnit.MILLISECONDS;
- case SECONDS:
- return TimeUnit.SECONDS;
- case MINUTES:
- return TimeUnit.MINUTES;
- case HOURS:
- return TimeUnit.HOURS;
- case DAYS:
- return TimeUnit.DAYS;
- default:
- throw new AssertionError("Unknown duration unit: " + this);
- }
+ return switch (this) {
+ case NANOS -> TimeUnit.NANOSECONDS;
+ case MICROS -> TimeUnit.MICROSECONDS;
+ case MILLIS -> TimeUnit.MILLISECONDS;
+ case SECONDS -> TimeUnit.SECONDS;
+ case MINUTES -> TimeUnit.MINUTES;
+ case HOURS -> TimeUnit.HOURS;
+ case DAYS -> TimeUnit.DAYS;
+ };
}
@Override
diff --git a/pkl-core/src/main/java/org/pkl/core/PType.java b/pkl-core/src/main/java/org/pkl/core/PType.java
index c6f34b63..987fac22 100644
--- a/pkl-core/src/main/java/org/pkl/core/PType.java
+++ b/pkl-core/src/main/java/org/pkl/core/PType.java
@@ -109,8 +109,7 @@ public abstract class PType implements Serializable {
}
public static final class Constrained extends PType {
-
- private static final long serialVersionUID = 0L;
+ @Serial private static final long serialVersionUID = 0L;
private final PType baseType;
private final List constraints;
diff --git a/pkl-core/src/main/java/org/pkl/core/StackFrameTransformers.java b/pkl-core/src/main/java/org/pkl/core/StackFrameTransformers.java
index 42d4bc7b..f2111285 100644
--- a/pkl-core/src/main/java/org/pkl/core/StackFrameTransformers.java
+++ b/pkl-core/src/main/java/org/pkl/core/StackFrameTransformers.java
@@ -45,7 +45,7 @@ public final class StackFrameTransformers {
return frame;
};
- public static StackFrameTransformer replacePackageUriWithSourceCodeUrl =
+ public static final StackFrameTransformer replacePackageUriWithSourceCodeUrl =
frame -> {
var uri = URI.create(frame.getModuleUri());
if (!uri.getScheme().equalsIgnoreCase("package")) {
diff --git a/pkl-core/src/main/java/org/pkl/core/ValueFormatter.java b/pkl-core/src/main/java/org/pkl/core/ValueFormatter.java
index f53e0127..37a203a4 100644
--- a/pkl-core/src/main/java/org/pkl/core/ValueFormatter.java
+++ b/pkl-core/src/main/java/org/pkl/core/ValueFormatter.java
@@ -16,18 +16,8 @@
package org.pkl.core;
import java.io.IOException;
-import org.pkl.core.util.ArrayCharEscaper;
public final class ValueFormatter {
- private static final ArrayCharEscaper charEscaper =
- ArrayCharEscaper.builder()
- .withEscape('\n', "\\n")
- .withEscape('\r', "\\r")
- .withEscape('\t', "\\t")
- .withEscape('"', "\\\"")
- .withEscape('\\', "\\\\")
- .build();
-
private static final ValueFormatter BASIC = new ValueFormatter(false, false);
private static final ValueFormatter WITH_CUSTOM_DELIMITERS = new ValueFormatter(false, true);
diff --git a/pkl-core/src/main/java/org/pkl/core/ValueRenderers.java b/pkl-core/src/main/java/org/pkl/core/ValueRenderers.java
index 4e17202e..6c99a791 100644
--- a/pkl-core/src/main/java/org/pkl/core/ValueRenderers.java
+++ b/pkl-core/src/main/java/org/pkl/core/ValueRenderers.java
@@ -60,8 +60,9 @@ public final class ValueRenderers {
* Creates a renderer for {@link java.util.Properties} file format. If {@code omitNullProperties}
* is {@code true}, object properties and map entries whose value is {@code null} will not be
* rendered. If {@code restrictCharset} is {@code true} characters outside the printable US-ASCII
- * charset range will be rendered as Unicode escapes (see
- * https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.3).
+ * charset range will be rendered as Unicode
+ * escapes .
*/
public static ValueRenderer properties(
Writer writer, boolean omitNullProperties, boolean restrictCharset) {
diff --git a/pkl-core/src/main/java/org/pkl/core/Version.java b/pkl-core/src/main/java/org/pkl/core/Version.java
index 7548d360..622e38be 100644
--- a/pkl-core/src/main/java/org/pkl/core/Version.java
+++ b/pkl-core/src/main/java/org/pkl/core/Version.java
@@ -21,7 +21,7 @@ import org.pkl.core.util.LateInit;
import org.pkl.core.util.Nullable;
/**
- * A semantic version (https://semver.org/spec/v2.0.0.html).
+ * A semantic version .
*
* This class guarantees that valid semantic version numbers are handled correctly, but does
* not guarantee that invalid semantic version numbers are rejected.
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java b/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java
index be20bd05..c4d15a7e 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/builder/AstBuilder.java
@@ -1924,26 +1924,7 @@ public final class AstBuilder extends AbstractAstBuilder {
var functionName = toIdentifier(ctx.Identifier());
var argCtx = ctx.argumentList();
var receiver = visitExpr(ctx.expr());
-
- var currentScope = symbolTable.getCurrentScope();
- var constLevel = currentScope.getConstLevel();
- var needsConst = false;
- if (receiver instanceof OuterNode) {
- var outerScope = getParentLexicalScope();
- if (outerScope != null) {
- needsConst =
- switch (constLevel) {
- case MODULE -> outerScope.isModuleScope();
- case ALL -> outerScope.getConstLevel() != ConstLevel.ALL;
- case NONE -> false;
- };
- }
- } else if (receiver instanceof GetModuleNode) {
- needsConst = constLevel != ConstLevel.NONE;
- } else if (receiver instanceof ThisNode) {
- var constDepth = currentScope.getConstDepth();
- needsConst = constLevel == ConstLevel.ALL && constDepth == -1;
- }
+ var needsConst = needsConst(receiver);
if (ctx.t.getType() == PklLexer.QDOT) {
//noinspection ConstantConditions
@@ -2008,24 +1989,7 @@ public final class AstBuilder extends AbstractAstBuilder {
}
}
- var constLevel = symbolTable.getCurrentScope().getConstLevel();
- var needsConst = false;
- if (receiver instanceof OuterNode) {
- var outerScope = getParentLexicalScope();
- if (outerScope != null) {
- needsConst =
- switch (constLevel) {
- case MODULE -> outerScope.isModuleScope();
- case ALL -> outerScope.getConstLevel() != ConstLevel.ALL;
- case NONE -> false;
- };
- }
- } else if (receiver instanceof GetModuleNode) {
- needsConst = constLevel != ConstLevel.NONE;
- } else if (receiver instanceof ThisNode) {
- var constDepth = symbolTable.getCurrentScope().getConstDepth();
- needsConst = constLevel == ConstLevel.ALL && constDepth == -1;
- }
+ var needsConst = needsConst(receiver);
if (ctx.t.getType() == PklLexer.QDOT) {
return new NullPropagatingOperationNode(
sourceSection,
@@ -2127,6 +2091,29 @@ public final class AstBuilder extends AbstractAstBuilder {
return ctx.es.stream().map(this::visitExpr).toArray(ExpressionNode[]::new);
}
+ private boolean needsConst(ExpressionNode receiver) {
+ var scope = symbolTable.getCurrentScope();
+ var constLevel = scope.getConstLevel();
+ var needsConst = false;
+ if (receiver instanceof OuterNode) {
+ var outerScope = getParentLexicalScope();
+ if (outerScope != null) {
+ needsConst =
+ switch (constLevel) {
+ case MODULE -> outerScope.isModuleScope();
+ case ALL -> outerScope.getConstLevel() != ConstLevel.ALL;
+ case NONE -> false;
+ };
+ }
+ } else if (receiver instanceof GetModuleNode) {
+ needsConst = constLevel != ConstLevel.NONE;
+ } else if (receiver instanceof ThisNode) {
+ var constDepth = scope.getConstDepth();
+ needsConst = constLevel == ConstLevel.ALL && constDepth == -1;
+ }
+ return needsConst;
+ }
+
private Identifier toIdentifier(TerminalNode node) {
return Identifier.get(node.getText());
}
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java b/pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java
index 9ed3f2d9..806f951e 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/builder/SymbolTable.java
@@ -223,10 +223,6 @@ public final class SymbolTable {
return scope;
}
- private boolean isConst() {
- return constLevel.isConst();
- }
-
/**
* Returns the lexical depth from the current scope to the top-most scope that is const. Depth
* is 0-indexed, and -1 means that the scope is not a const scope.
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/expression/binary/EqualNode.java b/pkl-core/src/main/java/org/pkl/core/ast/expression/binary/EqualNode.java
index c5f71b40..532eef39 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/expression/binary/EqualNode.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/expression/binary/EqualNode.java
@@ -65,9 +65,9 @@ public abstract class EqualNode extends ExpressionNode {
}
/**
- * This method effectively covers `VmValue left, VmValue right` but is implemented in a more
- * efficient way. See:
- * https://www.graalvm.org/22.0/graalvm-as-a-platform/language-implementation-framework/TruffleLibraries/#strategy-2-java-interfaces
+ * This method effectively covers `VmValue left, VmValue right` but is implemented in a more
+ * efficient way .
*/
@Specialization(
guards = {"left.getClass() == leftJavaClass", "right.getClass() == leftJavaClass"},
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/expression/binary/NotEqualNode.java b/pkl-core/src/main/java/org/pkl/core/ast/expression/binary/NotEqualNode.java
index f67bafbb..0af7fbe6 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/expression/binary/NotEqualNode.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/expression/binary/NotEqualNode.java
@@ -65,9 +65,9 @@ public abstract class NotEqualNode extends ExpressionNode {
}
/**
- * This method effectively covers `VmValue left, VmValue right` but is implemented in a more
- * efficient way. See:
- * https://www.graalvm.org/22.0/graalvm-as-a-platform/language-implementation-framework/TruffleLibraries/#strategy-2-java-interfaces
+ * This method effectively covers `VmValue left, VmValue right` but is implemented in a more
+ * efficient way .
*/
@Specialization(
guards = {"left.getClass() == leftJavaClass", "right.getClass() == leftJavaClass"},
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorMemberNode.java b/pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorMemberNode.java
index 801be41d..5cdfbaa8 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorMemberNode.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/expression/generator/GeneratorMemberNode.java
@@ -78,7 +78,7 @@ public abstract class GeneratorMemberNode extends PklNode {
* `ObjectData.forBindings`. - 3 `FrameSlot`s for `i`, `key`, and `value`
*/
@ValueType
- static final class ObjectData {
+ public static final class ObjectData {
// member count is exact iff every for/when body has exactly one member
ObjectData(int minMemberCount, int length) {
this.members = EconomicMaps.create(minMemberCount);
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/expression/literal/PropertiesLiteralNode.java b/pkl-core/src/main/java/org/pkl/core/ast/expression/literal/PropertiesLiteralNode.java
index 971cc901..bdf76d29 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/expression/literal/PropertiesLiteralNode.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/expression/literal/PropertiesLiteralNode.java
@@ -107,7 +107,7 @@ public abstract class PropertiesLiteralNode extends SpecializedObjectLiteralNode
// Ultimately, this lambda or a lambda returned from it will call one of the other
// specializations,
// which will perform the "isValidXYZ" guard check.
- // That said, to flag non-sensical amendments early, this specialization could have a guard to
+ // That said, to flag nonsensical amendments early, this specialization could have a guard to
// check
// that this amendment is at least one of a valid listing, mapping, or object amendment (modulo
// parameters).
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/expression/literal/SpecializedObjectLiteralNode.java b/pkl-core/src/main/java/org/pkl/core/ast/expression/literal/SpecializedObjectLiteralNode.java
index 16638eca..975f7632 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/expression/literal/SpecializedObjectLiteralNode.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/expression/literal/SpecializedObjectLiteralNode.java
@@ -67,6 +67,7 @@ public abstract class SpecializedObjectLiteralNode extends ObjectLiteralNode {
// only runs once per VmClass (which often means once per PropertiesLiteralNode)
// unless an XYZUncached specialization is active
+ @SuppressWarnings("ExtractMethodRecommender")
@TruffleBoundary
@Idempotent
protected boolean checkIsValidTypedAmendment(Object parent) {
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ImportNode.java b/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ImportNode.java
index 11187478..f8fdd4a8 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ImportNode.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/expression/unary/ImportNode.java
@@ -49,10 +49,6 @@ public final class ImportNode extends AbstractImportNode {
assert importUri.isAbsolute();
}
- public URI getImportUri() {
- return importUri;
- }
-
public Object executeGeneric(VirtualFrame frame) {
if (importedModule == null) {
CompilerDirectives.transferToInterpreterAndInvalidate();
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/frame/ReadEnclosingAuxiliarySlotNode.java b/pkl-core/src/main/java/org/pkl/core/ast/frame/ReadEnclosingAuxiliarySlotNode.java
index 0023e86d..9ad28498 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/frame/ReadEnclosingAuxiliarySlotNode.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/frame/ReadEnclosingAuxiliarySlotNode.java
@@ -23,7 +23,6 @@ import org.pkl.core.ast.ExpressionNode;
import org.pkl.core.runtime.VmUtils;
public class ReadEnclosingAuxiliarySlotNode extends ExpressionNode {
-
private final int slot;
private final int levelsUp;
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/frame/ReadFrameSlotNode.java b/pkl-core/src/main/java/org/pkl/core/ast/frame/ReadFrameSlotNode.java
index a0ed8303..70b1426a 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/frame/ReadFrameSlotNode.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/frame/ReadFrameSlotNode.java
@@ -22,7 +22,6 @@ import com.oracle.truffle.api.source.SourceSection;
import org.pkl.core.ast.ExpressionNode;
public abstract class ReadFrameSlotNode extends ExpressionNode {
-
private final int slot;
protected ReadFrameSlotNode(SourceSection sourceSection, int slot) {
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/frame/WriteAuxiliarySlotNode.java b/pkl-core/src/main/java/org/pkl/core/ast/frame/WriteAuxiliarySlotNode.java
deleted file mode 100644
index 50bcaee6..00000000
--- a/pkl-core/src/main/java/org/pkl/core/ast/frame/WriteAuxiliarySlotNode.java
+++ /dev/null
@@ -1,31 +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.frame;
-
-import com.oracle.truffle.api.frame.VirtualFrame;
-import org.pkl.core.ast.PklNode;
-
-public class WriteAuxiliarySlotNode extends PklNode {
- private final int slot;
-
- public WriteAuxiliarySlotNode(int slot) {
- this.slot = slot;
- }
-
- public void evalGeneric(VirtualFrame frame, Object value) {
- frame.setAuxiliarySlot(slot, value);
- }
-}
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/internal/IsInstanceOfNode.java b/pkl-core/src/main/java/org/pkl/core/ast/internal/IsInstanceOfNode.java
index a28e5139..2046c11f 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/internal/IsInstanceOfNode.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/internal/IsInstanceOfNode.java
@@ -50,8 +50,9 @@ public abstract class IsInstanceOfNode extends PklNode {
}
/**
- * This method effectively covers `VmValue value` but is implemented in a more efficient way. See:
- * https://www.graalvm.org/22.0/graalvm-as-a-platform/language-implementation-framework/TruffleLibraries/#strategy-2-java-interfaces
+ * This method effectively covers `VmValue value` but is implemented in a more
+ * efficient way .
*/
@Specialization(guards = "value.getClass() == valueJavaClass", limit = "99")
protected boolean evalVmValue(
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/member/ObjectMember.java b/pkl-core/src/main/java/org/pkl/core/ast/member/ObjectMember.java
index 5187054a..773c9cf8 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/member/ObjectMember.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/member/ObjectMember.java
@@ -61,8 +61,9 @@ public final class ObjectMember extends Member {
/**
* Tells if this member is a property.
*
- * Not named `isProperty()` to work around https://bugs.openjdk.java.net/browse/JDK-8185424
- * (which is apparently triggered by `-Xdoclint:none`).
+ *
Not named `isProperty()` to work around JDK-8185424 (which is apparently
+ * triggered by `-Xdoclint:none`).
*/
public boolean isProp() {
return name != null;
diff --git a/pkl-core/src/main/java/org/pkl/core/ast/type/TypeNode.java b/pkl-core/src/main/java/org/pkl/core/ast/type/TypeNode.java
index 60e7621a..3eec0953 100644
--- a/pkl-core/src/main/java/org/pkl/core/ast/type/TypeNode.java
+++ b/pkl-core/src/main/java/org/pkl/core/ast/type/TypeNode.java
@@ -44,6 +44,7 @@ import org.pkl.core.ast.member.UntypedObjectMemberNode;
import org.pkl.core.runtime.*;
import org.pkl.core.util.EconomicMaps;
import org.pkl.core.util.LateInit;
+import org.pkl.core.util.Nonnull;
import org.pkl.core.util.Nullable;
public abstract class TypeNode extends PklNode {
@@ -1683,7 +1684,7 @@ public abstract class TypeNode extends PklNode {
}
@Override
- public VmTypeAlias getVmTypeAlias() {
+ public @Nonnull VmTypeAlias getVmTypeAlias() {
return typeAlias;
}
diff --git a/pkl-core/src/main/java/org/pkl/core/module/ModuleKeys.java b/pkl-core/src/main/java/org/pkl/core/module/ModuleKeys.java
index 23c22a89..a7c93ee8 100644
--- a/pkl-core/src/main/java/org/pkl/core/module/ModuleKeys.java
+++ b/pkl-core/src/main/java/org/pkl/core/module/ModuleKeys.java
@@ -151,13 +151,12 @@ public final class ModuleKeys {
}
@Override
- public String loadSource() throws IOException {
+ public String loadSource() {
return text;
}
@Override
- public ResolvedModuleKey resolve(SecurityManager securityManager)
- throws IOException, SecurityManagerException {
+ public ResolvedModuleKey resolve(SecurityManager securityManager) {
return this;
}
@@ -272,11 +271,6 @@ public final class ModuleKeys {
return this;
}
- @Override
- public boolean isCached() {
- return true;
- }
-
@Override
public ModuleKey getOriginal() {
return this;
@@ -469,11 +463,6 @@ public final class ModuleKeys {
return true;
}
- @Override
- public boolean isLocal() {
- return false;
- }
-
@Override
public boolean isGlobbable() {
return false;
diff --git a/pkl-core/src/main/java/org/pkl/core/module/PathElement.java b/pkl-core/src/main/java/org/pkl/core/module/PathElement.java
index a8ef77c3..e3128a83 100644
--- a/pkl-core/src/main/java/org/pkl/core/module/PathElement.java
+++ b/pkl-core/src/main/java/org/pkl/core/module/PathElement.java
@@ -25,7 +25,7 @@ import org.pkl.core.util.EconomicMaps;
import org.pkl.core.util.Nullable;
public class PathElement {
- public static Comparator comparator =
+ public static final Comparator comparator =
(o1, o2) -> {
if (o1.isDirectory && !o2.isDirectory) {
return 1;
diff --git a/pkl-core/src/main/java/org/pkl/core/module/ProjectDependenciesManager.java b/pkl-core/src/main/java/org/pkl/core/module/ProjectDependenciesManager.java
index 85a62c7e..f99d163e 100644
--- a/pkl-core/src/main/java/org/pkl/core/module/ProjectDependenciesManager.java
+++ b/pkl-core/src/main/java/org/pkl/core/module/ProjectDependenciesManager.java
@@ -50,10 +50,11 @@ public class ProjectDependenciesManager {
private Map myDependencies = null;
@GuardedBy("lock")
- private EconomicMap> localPackageDependencies = null;
+ private final EconomicMap> localPackageDependencies =
+ EconomicMaps.create();
@GuardedBy("lock")
- private EconomicMap> packageDependencies =
+ private final EconomicMap> packageDependencies =
EconomicMaps.create();
private final Object lock = new Object();
@@ -74,7 +75,6 @@ public class ProjectDependenciesManager {
}
var projectDeps = getProjectDeps();
myDependencies = doBuildResolvedDependenciesForProject(declaredDependencies, projectDeps);
- localPackageDependencies = EconomicMaps.create();
for (var localPkg : declaredDependencies.getLocalDependencies().values()) {
ensureLocalProjectDependencyInitialized(localPkg, projectDeps);
}
@@ -83,7 +83,6 @@ public class ProjectDependenciesManager {
private void ensureLocalProjectDependencyInitialized(
DeclaredDependencies localProjectDependencies, ProjectDeps projectDeps) {
- assert localPackageDependencies != null;
// turn `package:` scheme into `projectpackage`: scheme
var uri = PackageUri.create("project" + localProjectDependencies.getMyPackageUri());
if (localPackageDependencies.containsKey(uri)) {
diff --git a/pkl-core/src/main/java/org/pkl/core/packages/PackageResolvers.java b/pkl-core/src/main/java/org/pkl/core/packages/PackageResolvers.java
index 6641bf20..112f7ad3 100644
--- a/pkl-core/src/main/java/org/pkl/core/packages/PackageResolvers.java
+++ b/pkl-core/src/main/java/org/pkl/core/packages/PackageResolvers.java
@@ -339,7 +339,7 @@ class PackageResolvers {
}
@Override
- public List doListElements(PackageAssetUri uri, Checksums checksums)
+ public List doListElements(PackageAssetUri uri, @Nullable Checksums checksums)
throws IOException, SecurityManagerException {
var packageUri = uri.getPackageUri();
ensurePackageDownloaded(packageUri, checksums);
@@ -351,7 +351,7 @@ class PackageResolvers {
}
@Override
- public boolean doHasElement(PackageAssetUri uri, Checksums checksums)
+ public boolean doHasElement(PackageAssetUri uri, @Nullable Checksums checksums)
throws IOException, SecurityManagerException {
var packageUri = uri.getPackageUri();
ensurePackageDownloaded(packageUri, checksums);
diff --git a/pkl-core/src/main/java/org/pkl/core/project/ProjectDeps.java b/pkl-core/src/main/java/org/pkl/core/project/ProjectDeps.java
index 05af1894..d8251ffa 100644
--- a/pkl-core/src/main/java/org/pkl/core/project/ProjectDeps.java
+++ b/pkl-core/src/main/java/org/pkl/core/project/ProjectDeps.java
@@ -86,7 +86,7 @@ public class ProjectDeps {
return parse(input);
}
- public static ProjectDeps parse(String input) throws JsonParseException, URISyntaxException {
+ public static ProjectDeps parse(String input) throws JsonParseException {
var parsed = Json.parseObject(input);
var schemaVersion = parsed.getInt("schemaVersion");
if (!supportedSchemaVersions.contains(schemaVersion)) {
diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/Identifier.java b/pkl-core/src/main/java/org/pkl/core/runtime/Identifier.java
index dac80cc4..be88c3dd 100644
--- a/pkl-core/src/main/java/org/pkl/core/runtime/Identifier.java
+++ b/pkl-core/src/main/java/org/pkl/core/runtime/Identifier.java
@@ -64,13 +64,8 @@ public final class Identifier implements Comparable {
public static final Identifier CONVERTERS = get("converters");
public static final Identifier USE_MAPPING = get("useMapping");
- // members of pkl.base#IntSeq, pkl.base#RegexMatch
- public static final Identifier START = get("start");
- public static final Identifier END = get("end");
-
// members of pkl.base#RegexMatch
public static final Identifier VALUE = get("value");
- public static final Identifier GROUPS = get("groups");
// members of pkl.base#Module
public static final Identifier OUTPUT = get("output");
@@ -111,10 +106,6 @@ public final class Identifier implements Comparable {
public static final Identifier PB = get("pb");
public static final Identifier PIB = get("pib");
- // members of pkl.base#Pair
- public static final Identifier FIRST = get("first");
- public static final Identifier SECOND = get("second");
-
// members of pkl.base#Function(1-5)
public static final Identifier APPLY = get("apply");
@@ -147,8 +138,6 @@ public final class Identifier implements Comparable {
// members of pkl.yaml
public static final Identifier MAX_COLLECTION_ALIASES = get("maxCollectionAliases");
- public static final Identifier DEPENDENCIES = get("dependencies");
-
// common in lambdas etc
public static final Identifier IT = get("it");
diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/MathModule.java b/pkl-core/src/main/java/org/pkl/core/runtime/MathModule.java
index 17576aaa..20422d9f 100644
--- a/pkl-core/src/main/java/org/pkl/core/runtime/MathModule.java
+++ b/pkl-core/src/main/java/org/pkl/core/runtime/MathModule.java
@@ -15,7 +15,6 @@
*/
package org.pkl.core.runtime;
-import com.oracle.truffle.api.CompilerDirectives;
import java.net.URI;
public final class MathModule extends StdLibModule {
@@ -30,10 +29,4 @@ public final class MathModule extends StdLibModule {
public static VmTyped getModule() {
return instance;
}
-
- @CompilerDirectives.TruffleBoundary
- private static VmClass loadClass(String className) {
- var theModule = getModule();
- return (VmClass) VmUtils.readMember(theModule, Identifier.get(className));
- }
}
diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmClass.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmClass.java
index f2cb354e..b452e361 100644
--- a/pkl-core/src/main/java/org/pkl/core/runtime/VmClass.java
+++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmClass.java
@@ -88,7 +88,7 @@ public final class VmClass extends VmValue {
private final Object allHiddenPropertyNamesLock = new Object();
- // Helps to to overcome recursive initialization issues
+ // Helps to overcome recursive initialization issues
// between classes and annotations in pkl.base.
@CompilationFinal private volatile boolean isInitialized;
@@ -497,7 +497,6 @@ public final class VmClass extends VmValue {
public EconomicMap getDynamicToTypedMembers() {
synchronized (dynamicToTypedMembersLock) {
if (__dynamicToTypedMembers == null) {
- //noinspection ConstantConditions
__dynamicToTypedMembers =
createDelegatingMembers(
(member) ->
@@ -515,7 +514,6 @@ public final class VmClass extends VmValue {
public EconomicMap getMapToTypedMembers() {
synchronized (mapToTypedMembersLock) {
if (__mapToTypedMembers == null) {
- //noinspection ConstantConditions
__mapToTypedMembers =
createDelegatingMembers(
(member) ->
diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmCollection.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmCollection.java
index 61b90b7b..0dc660fb 100644
--- a/pkl-core/src/main/java/org/pkl/core/runtime/VmCollection.java
+++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmCollection.java
@@ -56,6 +56,7 @@ public abstract class VmCollection extends VmValue implements Iterable {
}
}
+ @SuppressWarnings("BooleanMethodIsAlwaysInverted")
public abstract boolean isLengthOne();
public final void checkLengthOne() {
diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmLanguage.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmLanguage.java
index 38191eaf..1a1ce9a2 100644
--- a/pkl-core/src/main/java/org/pkl/core/runtime/VmLanguage.java
+++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmLanguage.java
@@ -21,7 +21,6 @@ import com.oracle.truffle.api.TruffleLanguage;
import com.oracle.truffle.api.TruffleLanguage.ContextPolicy;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.source.Source;
-import org.pkl.core.SecurityManagerException;
import org.pkl.core.ast.builder.AstBuilder;
import org.pkl.core.ast.expression.unary.ImportNode;
import org.pkl.core.module.ModuleKey;
@@ -74,8 +73,7 @@ public final class VmLanguage extends TruffleLanguage {
}
@TruffleBoundary
- public VmTyped loadModule(ModuleKey moduleKey, ImportNode importNode)
- throws SecurityManagerException {
+ public VmTyped loadModule(ModuleKey moduleKey, ImportNode importNode) {
var context = VmContext.get(null);
return context
diff --git a/pkl-core/src/main/java/org/pkl/core/runtime/VmMap.java b/pkl-core/src/main/java/org/pkl/core/runtime/VmMap.java
index 5637b6c8..e2fa42e7 100644
--- a/pkl-core/src/main/java/org/pkl/core/runtime/VmMap.java
+++ b/pkl-core/src/main/java/org/pkl/core/runtime/VmMap.java
@@ -98,7 +98,9 @@ public final class VmMap extends VmValue implements Iterable next() {
var key = keyIterator.next();
- return Map.entry(key, map.get(key));
+ var value = map.get(key);
+ assert value != null;
+ return Map.entry(key, value);
}
@Override
@@ -187,7 +189,9 @@ public final class VmMap extends VmValue implements Iterable {
var section = VmUtils.unavailableSourceSection();
var identifier = Identifier.get(name);
var member = new ObjectMember(section, section, VmModifier.NONE, identifier, name);
- //noinspection ConstantConditions
var node =
isPropertyTypeChecked
? TypeCheckedPropertyNodeGen.create(null, new FrameDescriptor(), member, bodyNode)
diff --git a/pkl-core/src/main/java/org/pkl/core/stdlib/xml/RendererNodes.java b/pkl-core/src/main/java/org/pkl/core/stdlib/xml/RendererNodes.java
index 397652e8..f2a15c71 100644
--- a/pkl-core/src/main/java/org/pkl/core/stdlib/xml/RendererNodes.java
+++ b/pkl-core/src/main/java/org/pkl/core/stdlib/xml/RendererNodes.java
@@ -293,6 +293,7 @@ public final class RendererNodes {
} else if (deferredKey instanceof String string) {
writeXmlElement(string, null, value, true, true);
} else {
+ assert deferredKey != null;
cannotRenderNonStringKey(deferredKey);
}
}
@@ -458,7 +459,7 @@ public final class RendererNodes {
}
private void startNewLine() {
- if (builder.length() == 0) return;
+ if (builder.isEmpty()) return;
lineNumber += 1;
builder.append(LINE_BREAK).append(currIndent);
diff --git a/pkl-core/src/main/java/org/pkl/core/util/IoUtils.java b/pkl-core/src/main/java/org/pkl/core/util/IoUtils.java
index 375dd9a8..9849b8d8 100644
--- a/pkl-core/src/main/java/org/pkl/core/util/IoUtils.java
+++ b/pkl-core/src/main/java/org/pkl/core/util/IoUtils.java
@@ -527,58 +527,25 @@ public final class IoUtils {
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
public static boolean isDecimalDigit(char ch) {
- switch (ch) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- return true;
- default:
- return false;
- }
+ return switch (ch) {
+ case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' -> true;
+ default -> false;
+ };
}
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
public static boolean isDecimalDigitOrUnderscore(char ch) {
- switch (ch) {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- case '_':
- return true;
- default:
- return false;
- }
+ return switch (ch) {
+ case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '_' -> true;
+ default -> false;
+ };
}
public static boolean isNonZeroDecimalDigit(char ch) {
- switch (ch) {
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- return true;
- default:
- return false;
- }
+ return switch (ch) {
+ case '1', '2', '3', '4', '5', '6', '7', '8', '9' -> true;
+ default -> false;
+ };
}
public static boolean isOctalDigit(char ch) {
diff --git a/pkl-core/src/main/java/org/pkl/core/util/NonnullByDefault.java b/pkl-core/src/main/java/org/pkl/core/util/NonnullByDefault.java
index 777b429a..b15834d2 100644
--- a/pkl-core/src/main/java/org/pkl/core/util/NonnullByDefault.java
+++ b/pkl-core/src/main/java/org/pkl/core/util/NonnullByDefault.java
@@ -24,13 +24,14 @@ import javax.annotation.meta.TypeQualifierDefault;
/**
* Indicates that method return types and method parameters in the annotated package are {@link
- * org.pkl.core.util.Nonnull} unless explicitly annotated with {@link org.pkl.core.util.Nullable}.
+ * Nonnull} unless explicitly annotated with {@link Nullable}.
*
* This annotation is a generalization of {@link javax.annotation.ParametersAreNonnullByDefault}.
* All Pkl packages containing Java code should carry this annotation.
*
*
Ideally, this default would apply to every {@link ElementType#TYPE_USE}, but I haven't been
- * able to make this work reasonably in IntelliJ (https://youtrack.jetbrains.com/issue/IDEA-278618).
+ * able to make this work reasonably in IntelliJ .
*/
@Documented
@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE_PARAMETER})
diff --git a/pkl-core/src/main/java/org/pkl/core/util/StringUtils.java b/pkl-core/src/main/java/org/pkl/core/util/StringUtils.java
index 898b6534..fa3c86d4 100644
--- a/pkl-core/src/main/java/org/pkl/core/util/StringUtils.java
+++ b/pkl-core/src/main/java/org/pkl/core/util/StringUtils.java
@@ -25,11 +25,13 @@ public final class StringUtils {
// whose key property is that it maps 25 characters into the 32-slot table without collision.
// Basically this is an opportunistic fast implementation as opposed to "good code". For most
// other use-cases, the reduction in readability isn't worth it.
+ @SuppressWarnings("UnnecessaryUnicodeEscape")
private static final String TABLE =
"\u2002\u3000\r\u0085\u200A\u2005\u2000\u3000"
+ "\u2029\u000B\u3000\u2008\u2003\u205F\u3000\u1680"
+ "\u0009\u0020\u2006\u2001\u202F\u00A0\u000C\u2009"
+ "\u3000\u2004\u3000\u3000\u2028\n\u2007\u3000";
+
private static final int MULTIPLIER = 1682554634;
private static final int SHIFT = Integer.numberOfLeadingZeros(TABLE.length() - 1);
diff --git a/pkl-core/src/main/java/org/pkl/core/util/json/JsonParser.java b/pkl-core/src/main/java/org/pkl/core/util/json/JsonParser.java
index 55cab98e..40dc3e50 100644
--- a/pkl-core/src/main/java/org/pkl/core/util/json/JsonParser.java
+++ b/pkl-core/src/main/java/org/pkl/core/util/json/JsonParser.java
@@ -397,7 +397,7 @@ public final class JsonParser {
var start = captureStart;
var end = index - 1;
captureStart = -1;
- if (captureBuffer.length() > 0) {
+ if (!captureBuffer.isEmpty()) {
captureBuffer.append(buffer, start, end - start);
var captured = captureBuffer.toString();
captureBuffer.setLength(0);
diff --git a/pkl-core/src/main/java/org/pkl/core/util/json/JsonWriter.java b/pkl-core/src/main/java/org/pkl/core/util/json/JsonWriter.java
index dfe48b35..ba36bc28 100644
--- a/pkl-core/src/main/java/org/pkl/core/util/json/JsonWriter.java
+++ b/pkl-core/src/main/java/org/pkl/core/util/json/JsonWriter.java
@@ -201,7 +201,7 @@ public class JsonWriter implements Closeable, Flushable {
* @param indent a string containing only whitespace.
*/
public final void setIndent(String indent) {
- if (indent.length() == 0) {
+ if (indent.isEmpty()) {
this.indent = null;
this.separator = ":";
} else {
diff --git a/pkl-core/src/main/java/org/pkl/core/util/xml/Xml10Validator.java b/pkl-core/src/main/java/org/pkl/core/util/xml/Xml10Validator.java
index 9f8398b2..c079355e 100644
--- a/pkl-core/src/main/java/org/pkl/core/util/xml/Xml10Validator.java
+++ b/pkl-core/src/main/java/org/pkl/core/util/xml/Xml10Validator.java
@@ -17,10 +17,8 @@ package org.pkl.core.util.xml;
import java.util.Arrays;
-/**
- * Originally taken from:
- * https://github.com/apache/xerces2-j/blob/8ce366ce9a20e7ffcb1dd37d0c4b5663d65b1f7d/src/org/apache/xerces/util/XMLChar.java
- */
+// Originally taken from:
+// https://github.com/apache/xerces2-j/blob/8ce366ce9a20e7ffcb1dd37d0c4b5663d65b1f7d/src/org/apache/xerces/util/XMLChar.java
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
final class Xml10Validator extends XmlValidator {
private static final byte[] CHARS = new byte[1 << 16];
diff --git a/pkl-core/src/main/java/org/pkl/core/util/xml/Xml11Validator.java b/pkl-core/src/main/java/org/pkl/core/util/xml/Xml11Validator.java
index d73fbfa0..a8219d8d 100644
--- a/pkl-core/src/main/java/org/pkl/core/util/xml/Xml11Validator.java
+++ b/pkl-core/src/main/java/org/pkl/core/util/xml/Xml11Validator.java
@@ -17,10 +17,8 @@ package org.pkl.core.util.xml;
import java.util.Arrays;
-/**
- * Originally taken from:
- * https://github.com/apache/xerces2-j/blob/8ce366ce9a20e7ffcb1dd37d0c4b5663d65b1f7d/src/org/apache/xerces/util/XML11Char.java
- */
+// Originally taken from:
+// https://github.com/apache/xerces2-j/blob/8ce366ce9a20e7ffcb1dd37d0c4b5663d65b1f7d/src/org/apache/xerces/util/XML11Char.java
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
final class Xml11Validator extends XmlValidator {
private static final byte[] CHARS = new byte[1 << 16];
diff --git a/pkl-core/src/main/java/org/pkl/core/util/yaml/YamlEscaper.java b/pkl-core/src/main/java/org/pkl/core/util/yaml/YamlEscaper.java
index 201e078b..00120d48 100644
--- a/pkl-core/src/main/java/org/pkl/core/util/yaml/YamlEscaper.java
+++ b/pkl-core/src/main/java/org/pkl/core/util/yaml/YamlEscaper.java
@@ -43,6 +43,7 @@ public final class YamlEscaper extends AbstractCharEscaper {
@Override
protected @Nullable String findReplacement(char ch) {
+ //noinspection UnnecessaryUnicodeEscape
return ch <= '\u0022'
? REPLACEMENTS[ch]
: ch == '\u2028' ? "\\L" : ch == '\u2029' ? "\\P" : null;
diff --git a/pkl-core/src/main/resources/org/pkl/core/errorMessages.properties b/pkl-core/src/main/resources/org/pkl/core/errorMessages.properties
index 2a30c404..865acf3b 100644
--- a/pkl-core/src/main/resources/org/pkl/core/errorMessages.properties
+++ b/pkl-core/src/main/resources/org/pkl/core/errorMessages.properties
@@ -31,12 +31,6 @@ A for-generator cannot generate object properties (only entries and elements).
forGeneratorCannotGenerateMethods=\
A for-generator cannot generate object methods (only entries and elements).
-legacyForGeneratorCannotHaveTwoVars=\
-A legacy for-generator cannot have two for-variables.\n\
-\n\
-The correct syntax for a for-generator with two for-variables is:\n\
-for (key, value in iterable) { ... }
-
cannotIterateOverThisValue=\
Cannot iterate over value of type `{0}`.
@@ -92,13 +86,6 @@ Instead, instantiate a concrete subclass.
cannotInstantiateType=\
Cannot instantiate type `{0}`.
-cannotAmendValueOfExternalClass=\
-Cannot amend value of external class `{0}`.\n\
-\n\
-Values of external classes cannot be amended.\n\
-Instead, create a new value using the class'' literal syntax or constructor method.\n\
-For example, `123` creates a value of class `Int`, and `Pair(1, 2)` creates a value of class `Pair`.
-
cannotAmendPropertyDefinition=\
A property definition cannot be amended.\n\
\n\
@@ -135,6 +122,7 @@ Cannot amend fixed property `{0}`.
cannotAssignConstProperty=\
Cannot assign to const property `{0}`.
+# suppress inspection "UnusedProperty"
cannotAmendConstProperty=\
Cannot amend const property `{0}`.
@@ -479,9 +467,6 @@ Undefined value.
undefinedPropertyValue=\
Tried to read property `{0}` but its value is undefined.
-unreachableCode=\
-This code should not have been reached.
-
cannotFindModule=\
Cannot find module `{0}`.
@@ -542,9 +527,6 @@ Cannot convert Float `{0}` to Int because it is too large.
cannotConvertNonFiniteFloat=\
Cannot convert non-finite Float `{0}` to Int.
-cannotConvertMapWithNonStringKeyToTyped=\
-Cannot convert map with non-string key to typed object.
-
intValueTooLarge=\
Int value `{0}` is too large (only Int32 supported here).
@@ -560,15 +542,9 @@ Cannot combine glob imports with triple-dot module URIs.
cannotGlobUri=\
Cannot expand glob pattern `{0}` because scheme `{1}` is not globbable.
-expectedAClass=\
-Expected a class, but got a value of type `{0}`.
-
expectedAnnotationClass=\
Expected an annotation class.
-expectedAClassButGotNull=\
-Expected a class, but got `null`.
-
expectedNonNullValue=\
Expected a non-null value, but got `null`.
@@ -665,10 +641,6 @@ For example: `package://example.com/my/project@1.0.0#/path/to/file.pkl`.
invalidResourceUri=\
Resource URI `{0}` has invalid syntax.
-# used as {1} in invalidModuleUri and invalidResourceUri
-invalidUriFormat=\
-must match pattern `{0}`
-
invalidGlobPattern=\
Invalid glob pattern `{0}`.
diff --git a/pkl-executor/src/main/java/org/pkl/executor/Version.java b/pkl-executor/src/main/java/org/pkl/executor/Version.java
index 909751d1..748bd24b 100644
--- a/pkl-executor/src/main/java/org/pkl/executor/Version.java
+++ b/pkl-executor/src/main/java/org/pkl/executor/Version.java
@@ -19,7 +19,7 @@ import java.util.*;
import java.util.regex.Pattern;
/**
- * A semantic version (https://semver.org/spec/v2.0.0.html).
+ * A semantic version .
*
*
This class guarantees that valid semantic version numbers are handled correctly, but does
* not guarantee that invalid semantic version numbers are rejected.
@@ -212,8 +212,7 @@ final class Version implements Comparable {
@Override
public String toString() {
- return ""
- + major
+ return major
+ "."
+ minor
+ "."
diff --git a/pkl-gradle/src/main/java/org/pkl/gradle/PklPlugin.java b/pkl-gradle/src/main/java/org/pkl/gradle/PklPlugin.java
index e1f8645a..a3ec76fa 100644
--- a/pkl-gradle/src/main/java/org/pkl/gradle/PklPlugin.java
+++ b/pkl-gradle/src/main/java/org/pkl/gradle/PklPlugin.java
@@ -398,7 +398,7 @@ public class PklPlugin implements Plugin {
var outputDir = spec.getOutputDir().get().getAsFile();
module.getGeneratedSourceDirs().add(outputDir);
if (spec.getSourceSet().get().getName().toLowerCase().contains("test")) {
- module.setTestSourceDirs(append(module.getTestSourceDirs(), outputDir));
+ module.getTestSources().from(append(module.getTestSources().getFiles(), outputDir));
} else {
module.setSourceDirs(append(module.getSourceDirs(), outputDir));
}
@@ -476,7 +476,9 @@ public class PklPlugin implements Plugin {
try {
var getConventionMethod = sourceSet.getClass().getMethod("getConvention");
var convention = getConventionMethod.invoke(sourceSet);
+ //noinspection deprecation
if (convention instanceof Convention c) {
+ //noinspection deprecation
var kotlinSourceSet = c.getPlugins().get("kotlin");
if (kotlinSourceSet == null) {
project