Address warning diagnostics (#1395)

This addressess various warning diagnostics throughout the codebase.
This commit is contained in:
Daniel Chao
2026-01-07 22:11:24 -08:00
committed by GitHub
parent 474305c7b9
commit 14d58a17b0
63 changed files with 387 additions and 371 deletions
+1 -3
View File
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -14,8 +14,6 @@
* limitations under the License.
*/
// https://youtrack.jetbrains.com/issue/KTIJ-19369
@file:Suppress("DSL_SCOPE_VIOLATION")
import org.jetbrains.gradle.ext.ActionDelegationConfig
import org.jetbrains.gradle.ext.ActionDelegationConfig.TestRunner.PLATFORM
import org.jetbrains.gradle.ext.ProjectSettings
@@ -4,7 +4,7 @@ import org.pkl.config.java.JavaType;
import org.pkl.core.ModuleSource;
import org.junit.jupiter.api.Test;
@SuppressWarnings("unused")
@SuppressWarnings({"unused", "NewClassNamingConvention"})
// the pkl-jvm-examples repo has a similar example
public class JavaConfigExample {
@Test
@@ -7,7 +7,7 @@ import org.pkl.core.PObject;
import org.junit.jupiter.api.Test;
// the pkl-jvm-examples repo has a similar example
@SuppressWarnings({"unchecked", "unused", "ConstantConditions"})
@SuppressWarnings({"unchecked", "unused", "ConstantConditions", "NewClassNamingConvention"})
public class CoreEvaluatorExample {
@Test
public void usage() {
+9 -1
View File
@@ -9,12 +9,18 @@ googleJavaFormat = "1.25.2"
# must not use `+` because used in download URL
# 23.1.x requires JDK 20+
graalVm = "25.0.0"
#noinspection UnusedVersionCatalogEntry
graalVmJdkVersion = "25.0.0"
# slightly hacky but convenient place so we remember to update the checksum
#noinspection UnusedVersionCatalogEntry
graalVmSha256-macos-x64 = "04278cf867d040e29dc71dd7727793f0ea67eb72adce8a35d04b87b57906778d"
#noinspection UnusedVersionCatalogEntry
graalVmSha256-macos-aarch64 = "c446d5aaeda98660a4c14049d299e9fba72105a007df89f19d27cf3979d37158"
#noinspection UnusedVersionCatalogEntry
graalVmSha256-linux-x64 = "1862f2ce97387a303cae4c512cb21baf36fafd2457c3cbbc10d87db94b89d3dd"
#noinspection UnusedVersionCatalogEntry
graalVmSha256-linux-aarch64 = "6c3c8b7617006c5d174d9cf7d357ccfb4bae77a4df1294ee28084fcb6eea8921"
#noinspection UnusedVersionCatalogEntry
graalVmSha256-windows-x64 = "33ef1d186b5c1e95465fcc97e637bc26e72d5f2250a8615b9c5d667ed5c17fd0"
ideaExtPlugin = "1.1.9"
intellijPlugin = "2.10.1"
@@ -62,6 +68,7 @@ geantyref = { group = "io.leangen.geantyref", name = "geantyref", version.ref =
graalCompiler = { group = "org.graalvm.compiler", name = "compiler", version.ref = "graalVm" }
graalSdk = { group = "org.graalvm.sdk", name = "graal-sdk", version.ref = "graalVm" }
graalJs = { group = "org.graalvm.js", name = "js", version.ref = "graalVm" }
#noinspection UnusedVersionCatalogEntry
intellij = { group = "com.jetbrains.intellij.idea", name = "ideaIC", version.ref = "intellij" }
javaPoet = { group = "com.palantir.javapoet", name = "javapoet", version.ref = "javaPoet" }
javaxInject = { group = "javax.inject", name = "javax.inject", version.ref = "javaxInject" }
@@ -75,7 +82,6 @@ junitApi = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.re
junitEngine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junit" }
junitParams = { group = "org.junit.jupiter", name = "junit-jupiter-params", version.ref = "junit" }
junitLauncher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junitPlatform" }
kotlinCompilerEmbeddable = { group = "org.jetbrains.kotlin", name = "kotlin-compiler-embeddable", version.ref = "kotlin" }
kotlinPlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" }
kotlinPoet = { group = "com.squareup", name = "kotlinpoet", version.ref = "kotlinPoet" }
kotlinReflect = { group = "org.jetbrains.kotlin", name = "kotlin-reflect", version.ref = "kotlin" }
@@ -84,8 +90,10 @@ kotlinStdLib = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", ve
kotlinxHtml = { group = "org.jetbrains.kotlinx", name = "kotlinx-html-jvm", version.ref = "kotlinxHtml" }
kotlinxSerializationJson = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "kotlinxSerialization" }
kotlinxCoroutinesCore = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" }
#noinspection UnusedVersionCatalogEntry
log4j12Api = { group = "org.apache.logging.log4j", name = "log4j-1.2-api", version.ref = "log4j" }
msgpack = { group = "org.msgpack", name = "msgpack-core", version.ref = "msgpack" }
#noinspection UnusedVersionCatalogEntry
nuValidator = { group = "nu.validator", name = "validator", version.ref = "nuValidator" }
# to be replaced with https://github.com/usethesource/capsule or https://github.com/lacuna/bifurcan
paguro = { group = "org.organicdesign", name = "Paguro", version.ref = "paguro" }
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -13,6 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:Suppress("unused")
package org.pkl.codegen.java
import com.palantir.javapoet.*
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -595,10 +595,7 @@ class JavaCodeGeneratorTest {
assertAll(
"toString() returns Pkl name",
javaClass.enumConstants.zip(cases) { enumConstant, (pklName, _) ->
{
assertThat(enumConstant.toString()).isEqualTo(pklName)
Unit
}
{ assertThat(enumConstant.toString()).isEqualTo(pklName) }
},
)
}
@@ -2264,7 +2261,7 @@ class JavaCodeGeneratorTest {
}
private fun Map<String, String>.validateContents(
vararg assertions: kotlin.Pair<String, List<String>>
@Suppress("RemoveRedundantQualifierName") vararg assertions: kotlin.Pair<String, List<String>>
) {
val files = toMutableMap()
@@ -2289,7 +2286,7 @@ class JavaCodeGeneratorTest {
}
private fun JavaCodeGeneratorOptions.generateFiles(
vararg pklModules: kotlin.Pair<String, String>
@Suppress("RemoveRedundantQualifierName") vararg pklModules: kotlin.Pair<String, String>
): Map<String, String> =
generateFiles(*pklModules.map { (name, text) -> PklModule(name, text) }.toTypedArray())
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -13,6 +13,8 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:Suppress("unused")
package org.pkl.codegen.kotlin
import com.squareup.kotlinpoet.*
@@ -66,6 +68,7 @@ class KotlinCodeGenerator(
private val STRING = String::class.asClassName()
private val ANY_NULL = ANY.copy(nullable = true)
private val NOTHING = Nothing::class.asClassName()
@Suppress("RemoveRedundantQualifierName")
private val KOTLIN_PAIR = kotlin.Pair::class.asClassName()
private val COLLECTION = Collection::class.asClassName()
private val LIST = List::class.asClassName()
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -2054,7 +2054,7 @@ class KotlinCodeGeneratorTest {
}
private fun Map<String, String>.validateContents(
vararg assertions: kotlin.Pair<String, List<String>>
@Suppress("RemoveRedundantQualifierName") vararg assertions: kotlin.Pair<String, List<String>>
) {
val files = toMutableMap()
@@ -2079,7 +2079,7 @@ class KotlinCodeGeneratorTest {
}
private fun KotlinCodeGeneratorOptions.generateFiles(
vararg pklModules: kotlin.Pair<String, String>
@Suppress("RemoveRedundantQualifierName") vararg pklModules: kotlin.Pair<String, String>
): Map<String, String> =
generateFiles(*pklModules.map { (name, text) -> PklModule(name, text) }.toTypedArray())
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -23,11 +23,11 @@ import org.pkl.core.SecurityManagers
class CliCommandTest {
class CliTest(private val options: CliBaseOptions) : CliCommand(options) {
class CliTest(options: CliBaseOptions) : CliCommand(options) {
override fun doRun() = Unit
val _allowedResources = allowedResources
val _allowedModules = allowedModules
val myAllowedResources = allowedResources
val myAllowedModules = allowedModules
}
private val cmd =
@@ -57,12 +57,12 @@ class CliCommandTest {
)
val opts = cmd.baseOptions.baseOptions(emptyList(), null, true)
val cliTest = CliTest(opts)
assertThat(cliTest._allowedModules.map { it.pattern() })
assertThat(cliTest.myAllowedModules.map { it.pattern() })
.isEqualTo(
SecurityManagers.defaultAllowedModules.map { it.pattern() } +
listOf("\\Qscheme3:\\E", "\\Qscheme4:\\E", "\\Qscheme+ext:\\E")
)
assertThat(cliTest._allowedResources.map { it.pattern() })
assertThat(cliTest.myAllowedResources.map { it.pattern() })
.isEqualTo(
SecurityManagers.defaultAllowedResources.map { it.pattern() } +
listOf("\\Qscheme1:\\E", "\\Qscheme2:\\E", "\\Qscheme+ext:\\E")
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -89,6 +89,7 @@ public class JavaTypeTest {
assertThat(javaType.getType()).isEqualTo(Types.mapOf(String.class, Types.listOf(URI.class)));
}
@SuppressWarnings({"EqualsWithItself", "AssertBetweenInconvertibleTypes"})
@Test
public void sameTypesConstructedInDifferentWaysAreEqual() {
var type1 = JavaType.mapOf(JavaType.of(String.class), JavaType.listOf(URI.class));
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -28,46 +28,51 @@ import org.pkl.core.DurationUnit;
public class ConversionsTest {
@Test
public void pStringToFile() {
var file = Conversions.pStringToFile.converter.convert("relative/path", null);
var file =
Conversions.pStringToFile.converter.convert("relative/path", ValueMapper.preconfigured());
assertThat(file).isEqualTo(new File("relative/path"));
var file2 = Conversions.pStringToFile.converter.convert("/absolute/path", null);
var file2 =
Conversions.pStringToFile.converter.convert("/absolute/path", ValueMapper.preconfigured());
assertThat(file2).isEqualTo(new File("/absolute/path"));
var file3 = Conversions.pStringToFile.converter.convert("", null);
var file3 = Conversions.pStringToFile.converter.convert("", ValueMapper.preconfigured());
assertThat(file3).isEqualTo(new File(""));
}
@Test
public void pStringToPath() {
var path = Conversions.pStringToPath.converter.convert("relative/path", null);
var path =
Conversions.pStringToPath.converter.convert("relative/path", ValueMapper.preconfigured());
assertThat(path).isEqualTo(Path.of("relative/path"));
var path2 = Conversions.pStringToPath.converter.convert("/absolute/path", null);
var path2 =
Conversions.pStringToPath.converter.convert("/absolute/path", ValueMapper.preconfigured());
assertThat(path2).isEqualTo(Path.of("/absolute/path"));
var path3 = Conversions.pStringToPath.converter.convert("", null);
var path3 = Conversions.pStringToPath.converter.convert("", ValueMapper.preconfigured());
assertThat(path3).isEqualTo(Path.of(""));
}
@Test
public void pStringToPattern() {
var str = "(?i)\\w*";
var pattern = Conversions.pStringToPattern.converter.convert(str, null);
var pattern = Conversions.pStringToPattern.converter.convert(str, ValueMapper.preconfigured());
assertThat(pattern.pattern()).isEqualTo(str);
}
@Test
public void pRegexToString() {
var regex = Pattern.compile("(?i)\\w*");
var str = Conversions.pRegexToString.converter.convert(regex, null);
var str = Conversions.pRegexToString.converter.convert(regex, ValueMapper.preconfigured());
assertThat(str).isEqualTo("(?i)\\w*");
}
@Test
public void pDurationToDuration() {
var pDuration = new Duration(100, DurationUnit.MINUTES);
var duration = Conversions.pDurationToDuration.converter.convert(pDuration, null);
var duration =
Conversions.pDurationToDuration.converter.convert(pDuration, ValueMapper.preconfigured());
assertThat(duration).isEqualTo(java.time.Duration.of(100, ChronoUnit.MINUTES));
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -31,7 +31,7 @@ public class PModuleToDataObjectTest {
private static final PModule module =
evaluator.evaluate(modulePath("org/pkl/config/java/mapper/PModuleToDataObjectTest.pkl"));
PObjectToDataObjectTest.Person pigeon =
private final PObjectToDataObjectTest.Person pigeon =
new PObjectToDataObjectTest.Person(
"pigeon",
40,
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -24,6 +24,7 @@ import org.pkl.core.PNull;
public class PNullToAnyTest {
private static final ValueMapper mapper = ValueMapperBuilder.preconfigured().build();
@SuppressWarnings("DataFlowIssue")
@Test
public void test() {
// due to Conversions.identities
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -105,7 +105,8 @@ final class JsonRenderer implements ValueRenderer {
@Override
public void visitBytes(byte[] value) {
throw new RendererException(
String.format("Values of type `Bytes` cannot be rendered as JSON. Value: %s", value));
String.format(
"Values of type `Bytes` cannot be rendered as JSON. Value: %s", (Object) value));
}
@Override
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -110,7 +110,8 @@ final class PropertiesRenderer implements ValueRenderer {
public String convertBytes(byte[] value) {
throw new RendererException(
String.format(
"Values of type `Bytes` cannot be rendered as Properties. Value: %s", value));
"Values of type `Bytes` cannot be rendered as Properties. Value: %s",
(Object) value));
}
@Override
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -2449,8 +2449,7 @@ public class AstBuilder extends AbstractAstBuilder<Object> {
if (dataSizeUnit != null) {
//noinspection ConstantConditions
return new ConstantValueNode(
sourceSection,
new VmDataSize(((IntLiteralNode) receiver).executeInt(null), dataSizeUnit));
sourceSection, new VmDataSize(intLiteralNode.executeInt(null), dataSizeUnit));
}
}
@@ -2465,8 +2464,7 @@ public class AstBuilder extends AbstractAstBuilder<Object> {
if (dataSizeUnit != null) {
//noinspection ConstantConditions
return new ConstantValueNode(
sourceSection,
new VmDataSize(((FloatLiteralNode) receiver).executeFloat(null), dataSizeUnit));
sourceSection, new VmDataSize(floatLiteralNode.executeFloat(null), dataSizeUnit));
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -100,6 +100,7 @@ public abstract class NotEqualNode extends ExpressionNode {
return true;
}
@SuppressWarnings("JavaExistingMethodCanBeUsed")
protected static boolean isIncompatibleTypes(Object left, Object right) {
var leftClass = left.getClass();
var rightClass = right.getClass();
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -67,7 +67,6 @@ 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) {
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -62,7 +62,6 @@ import org.pkl.core.util.ErrorMessages;
import org.pkl.core.util.GlobResolver;
import org.pkl.core.util.GlobResolver.InvalidGlobPatternException;
import org.pkl.core.util.IoUtils;
import org.pkl.core.util.Nullable;
/**
* Given a list of project directories, prepares artifacts to be published as a package.
@@ -441,7 +440,7 @@ public final class ProjectPackager {
}
}
private @Nullable List<ImportsAndReadsParser.Entry> getImportsAndReads(Path pklModulePath) {
private List<ImportsAndReadsParser.Entry> getImportsAndReads(Path pklModulePath) {
try {
var moduleKey = ModuleKeys.file(pklModulePath);
var resolvedModuleKey = ResolvedModuleKeys.file(moduleKey, moduleKey.getUri(), pklModulePath);
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -63,7 +63,11 @@ final class MinPklVersionChecker {
if (!Identifier.MIN_PKL_VERSION.toString().equals(prop.getIdentifier().getValue()))
continue;
var versionText = prop.getExpr().text(source.toCharArray());
var versionTextExpr = prop.getExpr();
if (versionTextExpr == null) {
return;
}
var versionText = versionTextExpr.text(source.toCharArray());
Version version;
try {
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -37,7 +37,7 @@ public final class VmBytes extends VmValue implements Iterable<Long> {
private final byte[] bytes;
private @Nullable VmDataSize size;
public static VmBytes EMPTY = new VmBytes(new byte[0]);
public static final VmBytes EMPTY = new VmBytes(new byte[0]);
@TruffleBoundary
public static VmBytes createFromConstantNodes(ExpressionNode[] elements) {
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -100,7 +100,8 @@ public final class VmDynamic extends VmObject {
@Override
@TruffleBoundary
public boolean equals(Object obj) {
if (this == obj) return true;
if (this == obj) // noinspection Contract
return true;
if (!(obj instanceof VmDynamic other)) return false;
// could use shallow force, but deep force is cached
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -94,9 +94,6 @@ public class VmImportAnalyzer {
} catch (IOException err) {
throw new VmExceptionBuilder().evalError("ioErrorLoadingModule", moduleKey.getUri()).build();
}
if (importsAndReads == null) {
return Set.of();
}
var result = new HashSet<ImportEntry>();
for (var entry : importsAndReads) {
if (!entry.isModule()) {
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -119,7 +119,8 @@ public final class VmMapping extends VmListingOrMapping {
@Override
@TruffleBoundary
public boolean equals(Object obj) {
if (this == obj) return true;
if (this == obj) // noinspection Contract
return true;
if (!(obj instanceof VmMapping other)) return false;
// could use shallow force, but deep force is cached
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -52,14 +52,14 @@ public final class BaseNodes {
public abstract static class NaN extends ExternalPropertyNode {
@Specialization
protected double eval(VmTyped self) {
protected double eval(VmTyped ignored) {
return Double.NaN;
}
}
public abstract static class Infinity extends ExternalPropertyNode {
@Specialization
protected double eval(VmTyped self) {
protected double eval(VmTyped ignored) {
return Double.POSITIVE_INFINITY;
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -27,7 +27,8 @@ public final class DataSizeNodes {
private DataSizeNodes() {}
@ImportStatic(MathUtils.class)
public abstract static class value extends ExternalPropertyNode {
@PklName("value")
public abstract static class valueProperty extends ExternalPropertyNode {
@Specialization(guards = "isMathematicalInteger(self.getValue())")
protected long evalInt(VmDataSize self) {
return (long) self.getValue();
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -29,7 +29,8 @@ public final class DurationNodes {
private DurationNodes() {}
@ImportStatic(MathUtils.class)
public abstract static class value extends ExternalPropertyNode {
@PklName("value")
public abstract static class valueProperty extends ExternalPropertyNode {
@Specialization(guards = "isMathematicalInteger(self.getValue())")
protected long evalInt(VmDuration self) {
return (long) self.getValue();
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -18,6 +18,7 @@ package org.pkl.core.stdlib.base;
import com.oracle.truffle.api.dsl.Specialization;
import org.pkl.core.runtime.VmPair;
import org.pkl.core.stdlib.ExternalPropertyNode;
import org.pkl.core.stdlib.PklName;
public final class PairNodes {
private PairNodes() {}
@@ -43,7 +44,8 @@ public final class PairNodes {
}
}
public abstract static class value extends ExternalPropertyNode {
@PklName("value")
public abstract static class valueProperty extends ExternalPropertyNode {
@Specialization
protected Object eval(VmPair self) {
return self.getSecond();
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -20,7 +20,6 @@ import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import org.graalvm.collections.EconomicMap;
import org.pkl.core.TestResults;
import org.pkl.core.TestResults.Error;
@@ -57,9 +56,8 @@ public final class JUnitReport implements TestReport {
@Override
public void summarize(List<TestResults> allTestResults, Writer writer) throws IOException {
var totalTests = allTestResults.stream().collect(Collectors.summingLong(r -> r.totalTests()));
var totalFailures =
allTestResults.stream().collect(Collectors.summingLong(r -> r.totalFailures()));
var totalTests = allTestResults.stream().mapToLong(TestResults::totalTests).sum();
var totalFailures = allTestResults.stream().mapToLong(TestResults::totalFailures).sum();
assert aggregateSuiteName != null;
@@ -69,12 +67,11 @@ public final class JUnitReport implements TestReport {
"tests", totalTests,
"failures", totalFailures);
var tests =
allTestResults.stream()
.map(r -> buildSuite(r))
.collect(Collectors.toCollection(ArrayList::new));
var suite = buildXmlElement("testsuites", attrs, tests.toArray(new VmDynamic[0]));
var suite =
buildXmlElement(
"testsuites",
attrs,
allTestResults.stream().map(this::buildSuite).toArray(VmDynamic[]::new));
writer.append(renderXML(" ", "1.0", suite));
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -362,7 +362,7 @@ public final class Json {
}
@Override
public Object put(String key, Object value) {
public @Nullable Object put(String key, Object value) {
return delegate.put(key, value);
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -17,14 +17,11 @@ package org.pkl.core.parser
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
import org.pkl.core.Evaluator
import org.pkl.parser.Parser
// tests type argument and parameter parsing with trailing commas that cannot be tested with
// snippets because these constructs are currently only allowed in the stdlib
class TrailingCommasTest {
private val evaluator = Evaluator.preconfigured()
@Test
fun `class type parameter lists parse correctly`() {
val module =
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -27,15 +27,7 @@ internal class ClassPageGenerator(
pageScope: ClassScope,
isTestMode: Boolean,
consoleOut: OutputStream,
) :
ModuleOrClassPageGenerator<ClassScope>(
docsiteInfo,
docModule,
clazz,
pageScope,
isTestMode,
consoleOut,
) {
) : ModuleOrClassPageGenerator<ClassScope>(docsiteInfo, clazz, pageScope, isTestMode, consoleOut) {
override val html: HTML.() -> Unit = {
renderHtmlHead()
@@ -1,5 +1,5 @@
/*
* Copyright © 2024 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -25,8 +25,3 @@ internal object HtmlConstants {
/** The `known-usages` element ID. */
const val KNOWN_USAGES: String = "known-usages"
}
internal object CssConstants {
/** The `current-version` CSS class. */
const val CURRENT_VERSION: String = "current-version"
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -21,7 +21,6 @@ import kotlinx.html.*
internal abstract class MainOrPackagePageGenerator<S>(
docsiteInfo: DocsiteInfo,
pageScope: S,
private val siteScope: SiteScope,
consoleOut: OutputStream,
) : PageGenerator<S>(docsiteInfo, pageScope, consoleOut) where S : PageScope {
protected fun UL.renderModuleOrPackage(
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -23,7 +23,7 @@ internal class MainPageGenerator(
private val packagesData: List<PackageData>,
pageScope: SiteScope,
consoleOut: OutputStream,
) : MainOrPackagePageGenerator<SiteScope>(docsiteInfo, pageScope, pageScope, consoleOut) {
) : MainOrPackagePageGenerator<SiteScope>(docsiteInfo, pageScope, consoleOut) {
override val html: HTML.() -> Unit = {
renderHtmlHead()
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -16,7 +16,6 @@
package org.pkl.doc
import java.io.OutputStream
import java.io.StringWriter
import kotlinx.html.*
import org.pkl.core.Member
import org.pkl.core.PClass
@@ -24,11 +23,9 @@ import org.pkl.core.PClass.ClassMember
import org.pkl.core.PClass.Method
import org.pkl.core.TypeParameter
import org.pkl.core.TypeParameter.Variance
import org.pkl.core.ValueRenderers
internal abstract class ModuleOrClassPageGenerator<S>(
docsiteInfo: DocsiteInfo,
private val docModule: DocModule,
protected val clazz: PClass,
scope: S,
private val isTestMode: Boolean,
@@ -141,12 +138,6 @@ internal abstract class ModuleOrClassPageGenerator<S>(
}
}
private fun renderExportedValue(value: Any): String {
val writer = StringWriter()
ValueRenderers.pcf(writer, " ", false, false).renderValue(value)
return writer.toString()
}
protected fun HtmlBlockTag.renderMethods() {
if (!clazz.hasListedMethod) return
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -28,7 +28,6 @@ internal class ModulePageGenerator(
) :
ModuleOrClassPageGenerator<ModuleScope>(
docsiteInfo,
docModule,
docModule.schema.moduleClass,
pageScope,
isTestMode,
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -23,7 +23,7 @@ internal class PackagePageGenerator(
private val docPackage: DocPackage,
pageScope: PackageScope,
consoleOut: OutputStream,
) : MainOrPackagePageGenerator<PackageScope>(docsiteInfo, pageScope, pageScope.parent, consoleOut) {
) : MainOrPackagePageGenerator<PackageScope>(docsiteInfo, pageScope, consoleOut) {
override val html: HTML.() -> Unit = {
renderHtmlHead()
+2 -2
View File
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -112,7 +112,7 @@ internal val String.uriEncodedComponent
* Follows `encodeURI` from ECMAScript.
*/
internal val String.uriEncoded
get(): String = replace(Regex("([^;/?:@&=+\$,#]+)")) { it.value.uriEncodedComponent }
get(): String = replace(Regex("([^;/?:@&=+$,#]+)")) { it.value.uriEncodedComponent }
fun getModulePath(moduleName: String, packagePrefix: String): String =
moduleName.substring(packagePrefix.length).replace('.', '/')
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -32,7 +32,7 @@ class DocGeneratorTest {
fun `uses virtual thread executor on JDK 21`() {
// On older JDKs, we get a ThreadPoolExecutor.
// not sure if there's a better assertion to make here.
assertThat(DocGenerator.Companion.executor.javaClass.canonicalName)
assertThat(DocGenerator.executor.javaClass.canonicalName)
.isEqualTo("java.util.concurrent.ThreadPerTaskExecutor")
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -85,17 +85,6 @@ class DocGeneratorTestHelper {
internal val cacheDir: Path by lazy { tempDir.resolve("cache") }
internal val sourceModules =
listOf(
docsiteModule,
package1PackageModule,
package2PackageModule,
URI("package://localhost:0/birds@0.5.0"),
URI("package://localhost:0/fruit@1.1.0"),
URI("package://localhost:0/unlisted@1.0.0"),
URI("package://localhost:0/deprecated@1.0.0"),
) + package1InputModules + package2InputModules
internal val expectedRelativeOutputFiles: List<String> by lazy {
expectedOutputFiles.map { path ->
IoUtils.toNormalizedPathString(expectedOutputDir.relativize(path)).let { str ->
@@ -1,93 +0,0 @@
/*
* Copyright © 2025 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.doc
import com.google.common.jimfs.Configuration
import com.google.common.jimfs.Jimfs
import java.net.URI
import java.nio.file.FileSystem
import java.nio.file.Path
import kotlin.io.path.createDirectories
import kotlin.io.path.exists
import org.pkl.commons.test.FileTestUtils
import org.pkl.commons.test.listFilesRecursively
import org.pkl.core.util.IoUtils
class TestUtils {
val tempFileSystem: FileSystem by lazy { Jimfs.newFileSystem(Configuration.unix()) }
val tmpOutputDir by lazy { tempFileSystem.getPath("/work/output").apply { createDirectories() } }
val projectDir = FileTestUtils.rootProjectDir.resolve("pkl-doc")
val inputDir: Path by lazy {
projectDir.resolve("src/test/files/DocGeneratorTest/input").apply { assert(exists()) }
}
val docsiteModule: URI by lazy {
inputDir.resolve("docsite-info.pkl").apply { assert(exists()) }.toUri()
}
internal val package1PackageModule: URI by lazy {
inputDir.resolve("com.package1/doc-package-info.pkl").apply { assert(exists()) }.toUri()
}
val package2PackageModule: URI by lazy {
inputDir.resolve("com.package2/doc-package-info.pkl").apply { assert(exists()) }.toUri()
}
internal val package1InputModules: List<URI> by lazy {
inputDir
.resolve("com.package1")
.listFilesRecursively()
.filter { it.fileName.toString() != "doc-package-info.pkl" }
.map { it.toUri() }
}
val package2InputModules: List<URI> by lazy {
inputDir
.resolve("com.package2")
.listFilesRecursively()
.filter { it.fileName.toString() != "doc-package-info.pkl" }
.map { it.toUri() }
}
val expectedOutputDir: Path by lazy {
projectDir.resolve("src/test/files/DocGeneratorTest/output").createDirectories()
}
val expectedOutputFiles: List<Path> by lazy { expectedOutputDir.listFilesRecursively() }
val actualOutputDir: Path by lazy { tempFileSystem.getPath("/work/DocGeneratorTest") }
val actualOutputFiles: List<Path> by lazy { actualOutputDir.listFilesRecursively() }
val expectedRelativeOutputFiles: List<String> by lazy {
expectedOutputFiles.map { path ->
IoUtils.toNormalizedPathString(expectedOutputDir.relativize(path)).let { str ->
// Git will by default clone symlinks as shortcuts on Windows, and shortcuts have a
// `.lnk` extension.
if (IoUtils.isWindows() && str.endsWith(".lnk")) str.dropLast(4) else str
}
}
}
val actualRelativeOutputFiles: List<String> by lazy {
actualOutputFiles.map { IoUtils.toNormalizedPathString(actualOutputDir.relativize(it)) }
}
val binaryFileExtensions = setOf("woff2", "png", "svg")
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -32,7 +32,9 @@ public class Annotation extends AbstractNode {
public Type getType() {
assert children != null;
return (Type) children.get(0);
var ret = (Type) children.get(0);
assert ret != null;
return ret;
}
public @Nullable ObjectBody getBody() {
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -54,12 +54,16 @@ public final class Class extends AbstractNode {
public Keyword getClassKeyword() {
assert children != null;
return (Keyword) children.get(keywordOffset);
var ret = (Keyword) children.get(keywordOffset);
assert ret != null;
return ret;
}
public Identifier getName() {
assert children != null;
return (Identifier) children.get(keywordOffset + 1);
var ret = (Identifier) children.get(keywordOffset + 1);
assert ret != null;
return ret;
}
public @Nullable TypeParameterList getTypeParameterList() {
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -57,7 +57,9 @@ public class ClassMethod extends AbstractNode {
public Identifier getName() {
assert children != null;
return (Identifier) children.get(nameOffset);
var ret = (Identifier) children.get(nameOffset);
assert ret != null;
return ret;
}
public @Nullable TypeParameterList getTypeParameterList() {
@@ -67,7 +69,9 @@ public class ClassMethod extends AbstractNode {
public ParameterList getParameterList() {
assert children != null;
return (ParameterList) children.get(nameOffset + 2);
var ret = (ParameterList) children.get(nameOffset + 2);
assert ret != null;
return ret;
}
public @Nullable TypeAnnotation getTypeAnnotation() {
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -54,7 +54,9 @@ public final class ClassProperty extends AbstractNode {
public Identifier getName() {
assert children != null;
return (Identifier) children.get(nameOffset);
var ret = (Identifier) children.get(nameOffset);
assert ret != null;
return ret;
}
public @Nullable TypeAnnotation getTypeAnnotation() {
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -18,7 +18,6 @@ package org.pkl.parser.syntax;
import java.util.List;
import org.pkl.parser.ParserVisitor;
import org.pkl.parser.Span;
import org.pkl.parser.util.Nullable;
public final class DocComment extends AbstractNode {
private final List<Span> spans;
@@ -38,7 +37,7 @@ public final class DocComment extends AbstractNode {
}
@Override
public <T> @Nullable T accept(ParserVisitor<? extends T> visitor) {
public <T> T accept(ParserVisitor<? extends T> visitor) {
return visitor.visitDocComment(this);
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -22,6 +22,7 @@ import org.pkl.parser.ParserVisitor;
import org.pkl.parser.Span;
import org.pkl.parser.util.Nullable;
@SuppressWarnings("unused")
public abstract sealed class Expr extends AbstractNode {
public Expr(Span span, @Nullable List<? extends @Nullable Node> children) {
@@ -200,7 +201,9 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
}
@@ -216,7 +219,9 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
}
@@ -235,7 +240,9 @@ public abstract sealed class Expr extends AbstractNode {
public StringConstant getImportStr() {
assert children != null;
return (StringConstant) children.get(0);
var ret = (StringConstant) children.get(0);
assert ret != null;
return ret;
}
public boolean isGlob() {
@@ -258,7 +265,9 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public ReadType getReadType() {
@@ -285,7 +294,9 @@ public abstract sealed class Expr extends AbstractNode {
public Identifier getIdentifier() {
assert children != null;
return (Identifier) children.get(0);
var ret = (Identifier) children.get(0);
assert ret != null;
return ret;
}
public @Nullable ArgumentList getArgumentList() {
@@ -314,12 +325,16 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public Identifier getIdentifier() {
assert children != null;
return (Identifier) children.get(1);
var ret = (Identifier) children.get(1);
assert ret != null;
return ret;
}
public boolean isNullable() {
@@ -344,7 +359,9 @@ public abstract sealed class Expr extends AbstractNode {
public Identifier getIdentifier() {
assert children != null;
return (Identifier) children.get(0);
var ret = (Identifier) children.get(0);
assert ret != null;
return ret;
}
public @Nullable ArgumentList getArgumentList() {
@@ -365,7 +382,9 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getArg() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
}
@@ -381,12 +400,16 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public Expr getArg() {
assert children != null;
return (Expr) children.get(1);
var ret = (Expr) children.get(1);
assert ret != null;
return ret;
}
}
@@ -402,17 +425,23 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getCond() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public Expr getThen() {
assert children != null;
return (Expr) children.get(1);
var ret = (Expr) children.get(1);
assert ret != null;
return ret;
}
public Expr getEls() {
assert children != null;
return (Expr) children.get(2);
var ret = (Expr) children.get(2);
assert ret != null;
return ret;
}
}
@@ -428,17 +457,23 @@ public abstract sealed class Expr extends AbstractNode {
public Parameter getParameter() {
assert children != null;
return (Parameter) children.get(0);
var ret = (Parameter) children.get(0);
assert ret != null;
return ret;
}
public Expr getBindingExpr() {
assert children != null;
return (Expr) children.get(1);
var ret = (Expr) children.get(1);
assert ret != null;
return ret;
}
public Expr getExpr() {
assert children != null;
return (Expr) children.get(2);
var ret = (Expr) children.get(2);
assert ret != null;
return ret;
}
}
@@ -454,12 +489,16 @@ public abstract sealed class Expr extends AbstractNode {
public ParameterList getParameterList() {
assert children != null;
return (ParameterList) children.get(0);
var ret = (ParameterList) children.get(0);
assert ret != null;
return ret;
}
public Expr getExpr() {
assert children != null;
return (Expr) children.get(1);
var ret = (Expr) children.get(1);
assert ret != null;
return ret;
}
}
@@ -475,7 +514,9 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
}
@@ -496,7 +537,9 @@ public abstract sealed class Expr extends AbstractNode {
public ObjectBody getBody() {
assert children != null;
return (ObjectBody) children.get(1);
var ret = (ObjectBody) children.get(1);
assert ret != null;
return ret;
}
public Span newSpan() {
@@ -516,12 +559,16 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public ObjectBody getBody() {
assert children != null;
return (ObjectBody) children.get(1);
var ret = (ObjectBody) children.get(1);
assert ret != null;
return ret;
}
}
@@ -537,7 +584,9 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
}
@@ -553,7 +602,9 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
}
@@ -569,7 +620,9 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
}
@@ -588,12 +641,16 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getLeft() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public Expr getRight() {
assert children != null;
return (Expr) children.get(1);
var ret = (Expr) children.get(1);
assert ret != null;
return ret;
}
public Operator getOp() {
@@ -608,12 +665,12 @@ public abstract sealed class Expr extends AbstractNode {
@SuppressWarnings("ConstantValue")
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (this == o) {
return true;
}
BinaryOperatorExpr binaryOp = (BinaryOperatorExpr) o;
return Objects.deepEquals(children, binaryOp.children)
&& op == binaryOp.op
@@ -638,12 +695,16 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public Type getType() {
assert children != null;
return (Type) children.get(1);
var ret = (Type) children.get(1);
assert ret != null;
return ret;
}
}
@@ -659,12 +720,16 @@ public abstract sealed class Expr extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public Type getType() {
assert children != null;
return (Type) children.get(1);
var ret = (Type) children.get(1);
assert ret != null;
return ret;
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -36,7 +36,9 @@ public class ExtendsOrAmendsClause extends AbstractNode {
public StringConstant getUrl() {
assert children != null;
return (StringConstant) children.get(0);
var ret = (StringConstant) children.get(0);
assert ret != null;
return ret;
}
public Type getType() {
@@ -58,12 +60,12 @@ public class ExtendsOrAmendsClause extends AbstractNode {
@SuppressWarnings("ConstantValue")
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -56,12 +56,12 @@ public final class Identifier extends AbstractNode {
@SuppressWarnings("ConstantValue")
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (this == o) {
return true;
}
Identifier identifier = (Identifier) o;
return Objects.equals(value, identifier.value) && Objects.equals(span, identifier.span);
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -37,7 +37,9 @@ public final class ImportClause extends AbstractNode {
public StringConstant getImportStr() {
assert children != null;
return (StringConstant) children.get(0);
var ret = (StringConstant) children.get(0);
assert ret != null;
return ret;
}
public boolean isGlob() {
@@ -57,12 +59,12 @@ public final class ImportClause extends AbstractNode {
@SuppressWarnings("ConstantValue")
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -44,12 +44,12 @@ public final class Modifier extends AbstractNode {
@SuppressWarnings("ConstantValue")
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (this == o) {
return true;
}
Modifier modifier = (Modifier) o;
return value == modifier.value && Objects.equals(span, modifier.span);
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -83,6 +83,8 @@ public final class ModuleDecl extends AbstractNode {
if (extendsOrAmends != null) {
return start.endWith(extendsOrAmends.span());
}
return start.endWith(children.get(nameOffset + 1).span());
var end = children.get(nameOffset + 1);
assert end != null;
return start.endWith(end.span());
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -22,6 +22,7 @@ import org.pkl.parser.ParserVisitor;
import org.pkl.parser.Span;
import org.pkl.parser.util.Nullable;
@SuppressWarnings("unused")
public abstract sealed class ObjectMember extends AbstractNode {
public ObjectMember(Span span, @Nullable List<? extends @Nullable Node> children) {
@@ -40,7 +41,9 @@ public abstract sealed class ObjectMember extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
}
@@ -65,7 +68,9 @@ public abstract sealed class ObjectMember extends AbstractNode {
public Identifier getIdentifier() {
assert children != null;
return (Identifier) children.get(identifierOffset);
var ret = (Identifier) children.get(identifierOffset);
assert ret != null;
return ret;
}
public @Nullable TypeAnnotation getTypeAnnotation() {
@@ -106,12 +111,16 @@ public abstract sealed class ObjectMember extends AbstractNode {
public Keyword getFunctionKeyword() {
assert children != null;
return (Keyword) children.get(identifierOffset);
var ret = (Keyword) children.get(identifierOffset);
assert ret != null;
return ret;
}
public Identifier getIdentifier() {
assert children != null;
return (Identifier) children.get(identifierOffset + 1);
var ret = (Identifier) children.get(identifierOffset + 1);
assert ret != null;
return ret;
}
public @Nullable TypeParameterList getTypeParameterList() {
@@ -121,7 +130,9 @@ public abstract sealed class ObjectMember extends AbstractNode {
public ParameterList getParamList() {
assert children != null;
return (ParameterList) children.get(identifierOffset + 3);
var ret = (ParameterList) children.get(identifierOffset + 3);
assert ret != null;
return ret;
}
public @Nullable TypeAnnotation getTypeAnnotation() {
@@ -131,7 +142,9 @@ public abstract sealed class ObjectMember extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(identifierOffset + 5);
var ret = (Expr) children.get(identifierOffset + 5);
assert ret != null;
return ret;
}
@SuppressWarnings("DuplicatedCode")
@@ -147,7 +160,9 @@ public abstract sealed class ObjectMember extends AbstractNode {
Span end;
var typeAnnotation = children.get(identifierOffset + 4);
if (typeAnnotation == null) {
end = children.get(identifierOffset + 3).span();
var stop = children.get(identifierOffset + 3);
assert stop != null;
end = stop.span();
} else {
end = typeAnnotation.span();
}
@@ -168,7 +183,9 @@ public abstract sealed class ObjectMember extends AbstractNode {
public Expr getPred() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public @Nullable Expr getExpr() {
@@ -195,7 +212,9 @@ public abstract sealed class ObjectMember extends AbstractNode {
public Expr getKey() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public @Nullable Expr getValue() {
@@ -225,7 +244,9 @@ public abstract sealed class ObjectMember extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public boolean isNullable() {
@@ -247,12 +268,12 @@ public abstract sealed class ObjectMember extends AbstractNode {
@SuppressWarnings("ConstantValue")
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
@@ -279,12 +300,16 @@ public abstract sealed class ObjectMember extends AbstractNode {
public Expr getPredicate() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
public ObjectBody getThenClause() {
assert children != null;
return (ObjectBody) children.get(1);
var ret = (ObjectBody) children.get(1);
assert ret != null;
return ret;
}
public @Nullable ObjectBody getElseClause() {
@@ -306,7 +331,9 @@ public abstract sealed class ObjectMember extends AbstractNode {
public Parameter getP1() {
assert children != null;
return (Parameter) children.get(0);
var ret = (Parameter) children.get(0);
assert ret != null;
return ret;
}
public @Nullable Parameter getP2() {
@@ -316,12 +343,16 @@ public abstract sealed class ObjectMember extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(2);
var ret = (Expr) children.get(2);
assert ret != null;
return ret;
}
public ObjectBody getBody() {
assert children != null;
return (ObjectBody) children.get(3);
var ret = (ObjectBody) children.get(3);
assert ret != null;
return ret;
}
public Span forSpan() {
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -46,7 +46,9 @@ public abstract sealed class Parameter extends AbstractNode {
public Identifier getIdentifier() {
assert children != null;
return (Identifier) children.get(0);
var ret = (Identifier) children.get(0);
assert ret != null;
return ret;
}
public @Nullable TypeAnnotation getTypeAnnotation() {
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -45,12 +45,12 @@ public class StringConstant extends AbstractNode {
@SuppressWarnings("ConstantValue")
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -52,12 +52,12 @@ public abstract sealed class StringPart extends AbstractNode {
@SuppressWarnings("ConstantValue")
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
@@ -78,7 +78,9 @@ public abstract sealed class StringPart extends AbstractNode {
public Expr getExpr() {
assert children != null;
return (Expr) children.get(0);
var ret = (Expr) children.get(0);
assert ret != null;
return ret;
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -73,7 +73,9 @@ public abstract sealed class Type extends AbstractNode {
public StringConstant getStr() {
assert children != null;
return (StringConstant) children.get(0);
var ret = (StringConstant) children.get(0);
assert ret != null;
return ret;
}
}
@@ -89,7 +91,9 @@ public abstract sealed class Type extends AbstractNode {
public QualifiedIdentifier getName() {
assert children != null;
return (QualifiedIdentifier) children.get(0);
var ret = (QualifiedIdentifier) children.get(0);
assert ret != null;
return ret;
}
public @Nullable TypeArgumentList getArgs() {
@@ -110,7 +114,9 @@ public abstract sealed class Type extends AbstractNode {
public Type getType() {
assert children != null;
return (Type) children.get(0);
var ret = (Type) children.get(0);
assert ret != null;
return ret;
}
}
@@ -126,7 +132,9 @@ public abstract sealed class Type extends AbstractNode {
public Type getType() {
assert children != null;
return (Type) children.get(0);
var ret = (Type) children.get(0);
assert ret != null;
return ret;
}
}
@@ -142,7 +150,9 @@ public abstract sealed class Type extends AbstractNode {
public Type getType() {
assert children != null;
return (Type) children.get(0);
var ret = (Type) children.get(0);
assert ret != null;
return ret;
}
@SuppressWarnings("unchecked")
@@ -190,12 +200,12 @@ public abstract sealed class Type extends AbstractNode {
@SuppressWarnings("ConstantValue")
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
@@ -227,7 +237,9 @@ public abstract sealed class Type extends AbstractNode {
public Type getRet() {
assert children != null;
return (Type) children.get(children.size() - 1);
var ret = (Type) children.get(children.size() - 1);
assert ret != null;
return ret;
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -20,6 +20,7 @@ import org.pkl.parser.ParserVisitor;
import org.pkl.parser.Span;
import org.pkl.parser.util.Nullable;
@SuppressWarnings("unused")
public final class TypeAlias extends AbstractNode {
private final int modifiersOffset;
private final int nameOffset;
@@ -54,12 +55,16 @@ public final class TypeAlias extends AbstractNode {
public Keyword getTypealiasKeyword() {
assert children != null;
return (Keyword) children.get(nameOffset);
var ret = (Keyword) children.get(nameOffset);
assert ret != null;
return ret;
}
public Identifier getName() {
assert children != null;
return (Identifier) children.get(nameOffset + 1);
var ret = (Identifier) children.get(nameOffset + 1);
assert ret != null;
return ret;
}
public @Nullable TypeParameterList getTypeParameterList() {
@@ -69,7 +74,9 @@ public final class TypeAlias extends AbstractNode {
public Type getType() {
assert children != null;
return (Type) children.get(nameOffset + 3);
var ret = (Type) children.get(nameOffset + 3);
assert ret != null;
return ret;
}
@SuppressWarnings("DuplicatedCode")
@@ -83,7 +90,9 @@ public final class TypeAlias extends AbstractNode {
break;
}
}
var end = children.get(nameOffset + 1).span();
var endNode = children.get(nameOffset + 1);
assert endNode != null;
var end = endNode.span();
var tparList = children.get(nameOffset + 2);
if (tparList != null) {
end = tparList.span();
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -32,6 +32,8 @@ public class TypeAnnotation extends AbstractNode {
public Type getType() {
assert children != null;
return (Type) children.get(0);
var ret = (Type) children.get(0);
assert ret != null;
return ret;
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -40,7 +40,9 @@ public final class TypeParameter extends AbstractNode {
public Identifier getIdentifier() {
assert children != null;
return (Identifier) children.get(0);
var ret = (Identifier) children.get(0);
assert ret != null;
return ret;
}
@Override
@@ -58,12 +60,12 @@ public final class TypeParameter extends AbstractNode {
@SuppressWarnings("ConstantValue")
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
if (this == o) {
return true;
}
if (!super.equals(o)) {
return false;
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2025-2026 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.
@@ -71,19 +71,6 @@ class GenericSexpRenderer(code: String) {
buf.append(')')
}
private fun renderQualifiedAccess(node: Node) {
var children = node.children
if (children.last().type == NodeType.UNQUALIFIED_ACCESS_EXPR) {
children = children.dropLast(1) + collectChildren(children.last())
}
val toRender = mutableListOf<Node>()
for (child in children) {
if (child.type in IGNORED_CHILDREN || child.type == NodeType.OPERATOR) continue
toRender += child
}
doRender(name(node), toRender)
}
private fun renderDefaultUnionType(node: Node) {
buf.append(tab)
buf.append("(defaultUnionType\n")
@@ -1,5 +1,5 @@
/*
* Copyright © 2024-2025 Apple Inc. and the Pkl project authors. All rights reserved.
* Copyright © 2024-2026 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.
@@ -1092,7 +1092,7 @@ class SexpRenderer {
}
companion object {
private fun sortModuleEntries(mod: org.pkl.parser.syntax.Module): List<Node> {
private fun sortModuleEntries(mod: Module): List<Node> {
val res = mutableListOf<Node>()
res += mod.classes
res += mod.typeAliases