diff --git a/bench/gradle.lockfile b/bench/gradle.lockfile index 65a4a3c2..3725f163 100644 --- a/bench/gradle.lockfile +++ b/bench/gradle.lockfile @@ -60,7 +60,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolv org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.jetbrains:annotations:13.0=jmh,jmhCompileClasspath,jmhRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJmh,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=jmhCompileClasspath,testCompileClasspath +org.jspecify:jspecify:1.0.0=jmh,jmhCompileClasspath,jmhRuntimeClasspath,testCompileClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=jmh,jmhCompileClasspath,jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=jmh,jmhCompileClasspath,jmhRuntimeClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=jmh,jmhCompileClasspath,jmhRuntimeClasspath,testCompileClasspath,testRuntimeClasspath diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 674df1bf..d3e67ccf 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -28,6 +28,8 @@ val toolchainVersion = 25 dependencies { implementation(libs.downloadTaskPlugin) + implementation(libs.errorPronePlugin) + implementation(libs.nullawayPlugin) implementation(libs.spotlessPlugin) implementation(libs.kotlinPlugin) { exclude(module = "kotlin-android-extensions") } implementation(libs.shadowPlugin) diff --git a/buildSrc/src/main/kotlin/pklFatJar.gradle.kts b/buildSrc/src/main/kotlin/pklFatJar.gradle.kts index 891bd7cb..90734918 100644 --- a/buildSrc/src/main/kotlin/pklFatJar.gradle.kts +++ b/buildSrc/src/main/kotlin/pklFatJar.gradle.kts @@ -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. @@ -84,7 +84,7 @@ for ((key, value) in relocations) { } } -val nonRelocations = listOf("com/oracle/truffle/", "org/graalvm/") +val nonRelocations = listOf("com/oracle/truffle/", "org/graalvm/", "org/jspecify") tasks.shadowJar { inputs.property("relocations", relocations) @@ -148,37 +148,36 @@ val testFatJar by tasks.check { dependsOn(testFatJar) } -val validateFatJar by - tasks.registering { - val outputFile = layout.buildDirectory.file("validateFatJar/result.txt") - inputs.files(tasks.shadowJar) - inputs.property("nonRelocations", nonRelocations) - outputs.file(outputFile) +val validateFatJar by tasks.registering { + val outputFile = layout.buildDirectory.file("validateFatJar/result.txt") + inputs.files(tasks.shadowJar) + inputs.property("nonRelocations", nonRelocations) + outputs.file(outputFile) - doLast { - val unshadowedFiles = mutableListOf() - zipTree(tasks.shadowJar.get().outputs.files.singleFile).visit { - val fileDetails = this - val path = fileDetails.relativePath.pathString - if ( - !(fileDetails.isDirectory || - path.startsWith("org/pkl/") || - path.startsWith("META-INF/") || - nonRelocations.any { path.startsWith(it) }) - ) { - // don't throw exception inside `visit` - // as this gives a misleading "Could not expand ZIP" error message - unshadowedFiles.add(path) - } - } - if (unshadowedFiles.isEmpty()) { - outputFile.get().asFile.writeText("SUCCESS") - } else { - outputFile.get().asFile.writeText("FAILURE") - throw GradleException("Found unshadowed files:\n" + unshadowedFiles.joinToString("\n")) + doLast { + val unshadowedFiles = mutableListOf() + zipTree(tasks.shadowJar.get().outputs.files.singleFile).visit { + val fileDetails = this + val path = fileDetails.relativePath.pathString + if ( + !(fileDetails.isDirectory || + path.startsWith("org/pkl/") || + path.startsWith("META-INF/") || + nonRelocations.any { path.startsWith(it) }) + ) { + // don't throw exception inside `visit` + // as this gives a misleading "Could not expand ZIP" error message + unshadowedFiles.add(path) } } + if (unshadowedFiles.isEmpty()) { + outputFile.get().asFile.writeText("SUCCESS") + } else { + outputFile.get().asFile.writeText("FAILURE") + throw GradleException("Found unshadowed files:\n" + unshadowedFiles.joinToString("\n")) + } } +} tasks.check { dependsOn(validateFatJar) } diff --git a/buildSrc/src/main/kotlin/pklJSpecify.gradle.kts b/buildSrc/src/main/kotlin/pklJSpecify.gradle.kts new file mode 100644 index 00000000..e50ca0e0 --- /dev/null +++ b/buildSrc/src/main/kotlin/pklJSpecify.gradle.kts @@ -0,0 +1,46 @@ +/* + * 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. + * 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. + */ +import net.ltgt.gradle.errorprone.errorprone +import net.ltgt.gradle.nullaway.nullaway +import org.gradle.accessors.dm.LibrariesForLibs +import org.gradle.api.tasks.compile.JavaCompile + +plugins { + `java-library` + id("net.ltgt.errorprone") + id("net.ltgt.nullaway") +} + +val libs = the() + +dependencies { + api(libs.jspecify) + errorprone(libs.errorProne) + errorprone(libs.nullaway) +} + +nullaway { onlyNullMarked = true } + +tasks.withType().configureEach { + options.errorprone.disableAllChecks = true + options.errorprone.nullaway { + error() + onlyNullMarked = true + jspecifyMode = true + // honor assert x != null in addition to Objects.requireNonNull(x) + assertsEnabled = true + } +} diff --git a/docs/gradle.lockfile b/docs/gradle.lockfile index c8417151..ac2bb013 100644 --- a/docs/gradle.lockfile +++ b/docs/gradle.lockfile @@ -57,7 +57,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolv org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 237a7d93..ad6c6af0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,6 +4,8 @@ checksumPlugin = "1.4.0" clikt = "5.+" commonMark = "0.+" downloadTaskPlugin = "5.7.0" +errorProne = "2.48.0" +errorPronePlugin = "5.1.0" geantyref = "1.+" #noinspection UnusedVersionCatalogEntry googleJavaFormat = "1.35.0" @@ -33,6 +35,7 @@ jimfs = "1.+" jline = "4.+" jmh = "1.+" jmhPlugin = "0.7.3" +jspecify = "1.0.0" jsr305 = "3.+" junit = "6.+" kotlinBom = "2.2.21" @@ -53,6 +56,8 @@ ktfmt = "0.62" log4j = "2.17.1" msgpack = "0.9.11" nexusPublishPlugin = "2.0.0" +nullaway = "0.13.1" +nullawayPlugin = "3.0.0" nuValidator = "26.+" paguro = "3.+" shadowPlugin = "9.+" @@ -68,6 +73,9 @@ cliktMarkdown = { group = "com.github.ajalt.clikt", name = "clikt-markdown", ver commonMark = { group = "org.commonmark", name = "commonmark", version.ref = "commonMark" } commonMarkTables = { group = "org.commonmark", name = "commonmark-ext-gfm-tables", version.ref = "commonMark" } downloadTaskPlugin = { group = "de.undercouch", name = "gradle-download-task", version.ref = "downloadTaskPlugin" } +#noinspection UnusedVersionCatalogEntry +errorProne = { group = "com.google.errorprone", name = "error_prone_core", version.ref = "errorProne" } +errorPronePlugin = { group = "net.ltgt.gradle", name = "gradle-errorprone-plugin", version.ref = "errorPronePlugin" } geantyref = { group = "io.leangen.geantyref", name = "geantyref", version.ref = "geantyref" } graalCompiler = { group = "org.graalvm.compiler", name = "compiler", version.ref = "graalVm" } graalSdk = { group = "org.graalvm.sdk", name = "graal-sdk", version.ref = "graalVm" } @@ -78,6 +86,8 @@ jimfs = { group = "com.google.jimfs", name = "jimfs", version.ref = "jimfs" } jlineReader = { group = "org.jline", name = "jline-reader", version.ref = "jline" } jlineTerminal = { group = "org.jline", name = "jline-terminal", version.ref = "jline" } jlineTerminalJni = { group = "org.jline", name = "jline-terminal-jni", version.ref = "jline" } +#noinspection UnusedVersionCatalogEntry +jspecify = { group = "org.jspecify", name = "jspecify", version.ref = "jspecify" } jsr305 = { group = "com.google.code.findbugs", name = "jsr305", version.ref = "jsr305" } junitApi = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junit" } junitEngine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junit" } @@ -99,6 +109,9 @@ log4j12Api = { group = "org.apache.logging.log4j", name = "log4j-1.2-api", versi msgpack = { group = "org.msgpack", name = "msgpack-core", version.ref = "msgpack" } #noinspection UnusedVersionCatalogEntry nuValidator = { group = "nu.validator", name = "validator", version.ref = "nuValidator" } +#noinspection UnusedVersionCatalogEntry +nullaway = { group = "com.uber.nullaway", name = "nullaway", version.ref = "nullaway" } +nullawayPlugin = { group = "net.ltgt.gradle", name = "gradle-nullaway-plugin", version.ref = "nullawayPlugin" } # to be replaced with https://github.com/usethesource/capsule or https://github.com/lacuna/bifurcan paguro = { group = "org.organicdesign", name = "Paguro", version.ref = "paguro" } pklConfigJavaAll025 = { group = "org.pkl-lang", name = "pkl-config-java-all", version = "0.25.0" } @@ -116,8 +129,12 @@ wiremock = { group = "org.wiremock", name = "wiremock", version.ref = "wiremock" [plugins] # ordered alphabetically checksum = { id = "org.gradle.crypto.checksum", version.ref = "checksumPlugin" } +#noinspection UnusedVersionCatalogEntry +errorProne = { id = "net.ltgt.errorprone", version.ref = "errorPronePlugin" } ideaExt = { id = "org.jetbrains.gradle.plugin.idea-ext", version.ref = "ideaExtPlugin" } jmh = { id = "me.champeau.jmh", version.ref = "jmhPlugin" } kotlinxSerialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlinToolchain" } nexusPublish = { id = "io.github.gradle-nexus.publish-plugin", version.ref = "nexusPublishPlugin" } +#noinspection UnusedVersionCatalogEntry +nullaway = { id = "net.ltgt.nullaway", version.ref = "nullawayPlugin" } shadow = { id = "com.gradleup.shadow", version.ref = "shadowPlugin" } diff --git a/pkl-cli/gradle.lockfile b/pkl-cli/gradle.lockfile index a99ea95d..714852ce 100644 --- a/pkl-cli/gradle.lockfile +++ b/pkl-cli/gradle.lockfile @@ -134,7 +134,7 @@ org.jline:jline-native:4.0.12=compileClasspath,nativeImageClasspath,runtimeClass org.jline:jline-reader:4.0.12=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.jline:jline-terminal-jni:4.0.12=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.jline:jline-terminal:4.0.12=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath,testRuntimeClasspath +org.jspecify:jspecify:1.0.0=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-codegen-java/gradle.lockfile b/pkl-codegen-java/gradle.lockfile index 4c90d798..cf441c0c 100644 --- a/pkl-codegen-java/gradle.lockfile +++ b/pkl-codegen-java/gradle.lockfile @@ -82,7 +82,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResol org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath org.jetbrains:markdown:0.7.3=runtimeClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-codegen-kotlin/gradle.lockfile b/pkl-codegen-kotlin/gradle.lockfile index 72ca6d2e..37de0d79 100644 --- a/pkl-codegen-kotlin/gradle.lockfile +++ b/pkl-codegen-kotlin/gradle.lockfile @@ -87,7 +87,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResol org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath org.jetbrains:markdown:0.7.3=runtimeClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-commons-cli/gradle.lockfile b/pkl-commons-cli/gradle.lockfile index b65ba141..3a665be9 100644 --- a/pkl-commons-cli/gradle.lockfile +++ b/pkl-commons-cli/gradle.lockfile @@ -93,7 +93,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResol org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathSvm,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.jetbrains:markdown-jvm:0.7.3=runtimeClasspath,testRuntimeClasspath org.jetbrains:markdown:0.7.3=runtimeClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=runtimeClasspath,svmClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-config-java/gradle.lockfile b/pkl-config-java/gradle.lockfile index 34e2c228..bd777a2f 100644 --- a/pkl-config-java/gradle.lockfile +++ b/pkl-config-java/gradle.lockfile @@ -83,7 +83,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResol org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,pklCodegenJava,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.jetbrains:markdown-jvm:0.7.3=pklCodegenJava org.jetbrains:markdown:0.7.3=pklCodegenJava -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=pklCodegenJava,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-config-kotlin/gradle.lockfile b/pkl-config-kotlin/gradle.lockfile index a4614ba1..399b2e9d 100644 --- a/pkl-config-kotlin/gradle.lockfile +++ b/pkl-config-kotlin/gradle.lockfile @@ -82,7 +82,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResol org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,pklCodegenKotlin,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath org.jetbrains:markdown-jvm:0.7.3=pklCodegenKotlin org.jetbrains:markdown:0.7.3=pklCodegenKotlin -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=pklCodegenKotlin,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-core/gradle.lockfile b/pkl-core/gradle.lockfile index cffbbb59..76f8a24a 100644 --- a/pkl-core/gradle.lockfile +++ b/pkl-core/gradle.lockfile @@ -59,7 +59,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolv org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.jetbrains:annotations:13.0=generatorCompileClasspath,generatorRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathGenerator,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-core/src/main/java/org/pkl/core/ast/builder/ImportsAndReadsParser.java b/pkl-core/src/main/java/org/pkl/core/ast/builder/ImportsAndReadsParser.java index b63c3386..c098897e 100644 --- a/pkl-core/src/main/java/org/pkl/core/ast/builder/ImportsAndReadsParser.java +++ b/pkl-core/src/main/java/org/pkl/core/ast/builder/ImportsAndReadsParser.java @@ -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,7 +52,7 @@ import org.pkl.parser.syntax.StringPart.StringChars; *
  • read expressions * */ -public class ImportsAndReadsParser extends AbstractAstBuilder<@Nullable List> { +public class ImportsAndReadsParser extends AbstractAstBuilder> { public record Entry( boolean isModule, @@ -141,12 +141,11 @@ public class ImportsAndReadsParser extends AbstractAstBuilder<@Nullable List aggregateResult( - @Nullable List aggregate, @Nullable List nextResult) { - if (aggregate == null || aggregate.isEmpty()) { + protected List aggregateResult(List aggregate, List nextResult) { + if (aggregate.isEmpty()) { return nextResult; } - if (nextResult == null || nextResult.isEmpty()) { + if (nextResult.isEmpty()) { return aggregate; } var ret = new ArrayList(aggregate.size() + nextResult.size()); diff --git a/pkl-doc/gradle.lockfile b/pkl-doc/gradle.lockfile index ab9b9ebd..71adbcea 100644 --- a/pkl-doc/gradle.lockfile +++ b/pkl-doc/gradle.lockfile @@ -123,7 +123,7 @@ org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClassp org.jetbrains:annotations:23.0.0=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.jetbrains:markdown-jvm:0.7.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath org.jetbrains:markdown:0.7.3=nativeImageClasspath,runtimeClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath,testRuntimeClasspath +org.jspecify:jspecify:1.0.0=compileClasspath,nativeImageClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-executor/gradle.lockfile b/pkl-executor/gradle.lockfile index 6f1bb2c3..15e0a6d1 100644 --- a/pkl-executor/gradle.lockfile +++ b/pkl-executor/gradle.lockfile @@ -56,7 +56,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolv org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-formatter/gradle.lockfile b/pkl-formatter/gradle.lockfile index 7bce9b5f..657b6adf 100644 --- a/pkl-formatter/gradle.lockfile +++ b/pkl-formatter/gradle.lockfile @@ -49,7 +49,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolv org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-parser/gradle.lockfile b/pkl-parser/gradle.lockfile index a0c4b7e6..e8d1a992 100644 --- a/pkl-parser/gradle.lockfile +++ b/pkl-parser/gradle.lockfile @@ -2,11 +2,29 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. com.github.ben-manes.caffeine:caffeine:2.9.3=swiftExportClasspathResolvable -com.google.code.findbugs:jsr305:3.0.2=compileClasspath,compileOnlyDependenciesMetadata +com.github.ben-manes.caffeine:caffeine:3.0.5=annotationProcessor,testAnnotationProcessor +com.github.kevinstern:software-and-algorithms:1.0=annotationProcessor,testAnnotationProcessor +com.google.auto.service:auto-service-annotations:1.0.1=annotationProcessor,testAnnotationProcessor +com.google.auto.value:auto-value-annotations:1.9=annotationProcessor,testAnnotationProcessor +com.google.auto:auto-common:1.2.2=annotationProcessor,testAnnotationProcessor +com.google.code.findbugs:jsr305:3.0.2=compileOnlyDependenciesMetadata +com.google.errorprone:error_prone_annotation:2.48.0=annotationProcessor,testAnnotationProcessor com.google.errorprone:error_prone_annotations:2.28.0=swiftExportClasspathResolvable -io.github.java-diff-utils:java-diff-utils:4.12=kotlinInternalAbiValidation +com.google.errorprone:error_prone_annotations:2.48.0=annotationProcessor,testAnnotationProcessor +com.google.errorprone:error_prone_check_api:2.48.0=annotationProcessor,testAnnotationProcessor +com.google.errorprone:error_prone_core:2.48.0=annotationProcessor,testAnnotationProcessor +com.google.googlejavaformat:google-java-format:1.34.1=annotationProcessor,testAnnotationProcessor +com.google.guava:failureaccess:1.0.3=annotationProcessor,testAnnotationProcessor +com.google.guava:guava:33.5.0-jre=annotationProcessor,testAnnotationProcessor +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=annotationProcessor,testAnnotationProcessor +com.google.j2objc:j2objc-annotations:3.1=annotationProcessor,testAnnotationProcessor +com.google.protobuf:protobuf-java:4.33.2=annotationProcessor,testAnnotationProcessor +com.uber.nullaway:nullaway:0.13.1=annotationProcessor,testAnnotationProcessor +io.github.eisop:dataflow-errorprone:3.41.0-eisop1=annotationProcessor,testAnnotationProcessor +io.github.java-diff-utils:java-diff-utils:4.12=annotationProcessor,kotlinInternalAbiValidation,testAnnotationProcessor io.opentelemetry:opentelemetry-api:1.41.0=swiftExportClasspathResolvable io.opentelemetry:opentelemetry-context:1.41.0=swiftExportClasspathResolvable +javax.inject:javax.inject:1=annotationProcessor,testAnnotationProcessor net.bytebuddy:byte-buddy:1.18.3=testCompileClasspath,testRuntimeClasspath org.apiguardian:apiguardian-api:1.1.2=testCompileClasspath org.assertj:assertj-core:3.27.7=testCompileClasspath,testRuntimeClasspath @@ -15,6 +33,8 @@ org.bouncycastle:bcpkix-jdk18on:1.80=kotlinBouncyCastleConfiguration org.bouncycastle:bcprov-jdk18on:1.80=kotlinBouncyCastleConfiguration org.bouncycastle:bcutil-jdk18on:1.80=kotlinBouncyCastleConfiguration org.checkerframework:checker-qual:3.43.0=swiftExportClasspathResolvable +org.checkerframework:checker-qual:3.53.0=annotationProcessor,testAnnotationProcessor +org.checkerframework:dataflow-nullaway:3.53.0=annotationProcessor,testAnnotationProcessor org.jetbrains.kotlin:abi-tools-api:2.3.20=kotlinInternalAbiValidation org.jetbrains.kotlin:abi-tools:2.3.20=kotlinInternalAbiValidation org.jetbrains.kotlin:kotlin-bom:2.2.21=compileClasspath,runtimeClasspath,testCompileClasspath,testRuntimeClasspath @@ -51,7 +71,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolv org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=annotationProcessor,compileClasspath,runtimeClasspath,testAnnotationProcessor,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath @@ -61,4 +81,5 @@ org.junit.platform:junit-platform-launcher:6.0.3=testRuntimeClasspath org.junit:junit-bom:6.0.3=testCompileClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.9.11=testRuntimeClasspath org.opentest4j:opentest4j:1.3.0=testCompileClasspath,testRuntimeClasspath -empty=annotationProcessor,apiDependenciesMetadata,implementationDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,signatures,sourcesJar,testAnnotationProcessor,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testImplementationDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions +org.pcollections:pcollections:4.0.1=annotationProcessor,testAnnotationProcessor +empty=apiDependenciesMetadata,implementationDependenciesMetadata,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,kotlinScriptDefExtensions,signatures,sourcesJar,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testImplementationDependenciesMetadata,testIntransitiveDependenciesMetadata,testKotlinScriptDefExtensions diff --git a/pkl-parser/pkl-parser.gradle.kts b/pkl-parser/pkl-parser.gradle.kts index d7100c0a..535f1abd 100644 --- a/pkl-parser/pkl-parser.gradle.kts +++ b/pkl-parser/pkl-parser.gradle.kts @@ -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. @@ -16,15 +16,12 @@ plugins { pklAllProjects pklJavaLibrary + pklJSpecify pklPublishLibrary idea } -dependencies { - compileOnly(libs.jsr305) - - testImplementation(projects.pklCommonsTest) -} +dependencies { testImplementation(projects.pklCommonsTest) } publishing { publications { diff --git a/pkl-parser/src/main/java/org/pkl/parser/GenericParserImpl.java b/pkl-parser/src/main/java/org/pkl/parser/GenericParserImpl.java index 8e2248e4..98f71413 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/GenericParserImpl.java +++ b/pkl-parser/src/main/java/org/pkl/parser/GenericParserImpl.java @@ -18,12 +18,12 @@ package org.pkl.parser; import java.util.ArrayList; import java.util.List; import java.util.function.Supplier; +import org.jspecify.annotations.Nullable; import org.pkl.parser.syntax.Operator; import org.pkl.parser.syntax.generic.FullSpan; import org.pkl.parser.syntax.generic.Node; import org.pkl.parser.syntax.generic.NodeType; import org.pkl.parser.util.ErrorMessages; -import org.pkl.parser.util.Nullable; @SuppressWarnings("DuplicatedCode") class GenericParserImpl { @@ -1125,6 +1125,8 @@ class GenericParserImpl { if (lookahead() != Token.UNION) { if (hasDefault) { + //noinspection ConstantValue (NullAway needs this assertion, IntelliJ doesn't) + assert start != null; throw parserError(ErrorMessages.create("notAUnion"), start.endWith(first.span)); } return first; diff --git a/pkl-parser/src/main/java/org/pkl/parser/ParserError.java b/pkl-parser/src/main/java/org/pkl/parser/ParserError.java index 8b15fa5e..10be7d72 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/ParserError.java +++ b/pkl-parser/src/main/java/org/pkl/parser/ParserError.java @@ -15,8 +15,8 @@ */ package org.pkl.parser; +import org.jspecify.annotations.Nullable; import org.pkl.parser.syntax.Module; -import org.pkl.parser.util.Nullable; public final class ParserError extends RuntimeException { private final Span span; diff --git a/pkl-parser/src/main/java/org/pkl/parser/ParserImpl.java b/pkl-parser/src/main/java/org/pkl/parser/ParserImpl.java index e4287770..cdbd062c 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/ParserImpl.java +++ b/pkl-parser/src/main/java/org/pkl/parser/ParserImpl.java @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.function.Supplier; +import org.jspecify.annotations.Nullable; import org.pkl.parser.syntax.Annotation; import org.pkl.parser.syntax.ArgumentList; import org.pkl.parser.syntax.Class; @@ -85,7 +86,6 @@ import org.pkl.parser.syntax.TypeArgumentList; import org.pkl.parser.syntax.TypeParameter; import org.pkl.parser.syntax.TypeParameterList; import org.pkl.parser.util.ErrorMessages; -import org.pkl.parser.util.Nullable; @SuppressWarnings("DuplicatedCode") final class ParserImpl { @@ -94,7 +94,7 @@ final class ParserImpl { private Token lookahead; private Span spanLookahead; private boolean backtracking = false; - private FullToken prev; + private FullToken prev = new FullToken(Token.SOF, new Span(0, 0), 0); private FullToken _lookahead; private boolean precededBySemicolon = false; @@ -113,7 +113,7 @@ final class ParserImpl { var start = spanLookahead; Span end = null; ModuleDecl moduleDecl; - var nodes = new ArrayList(); + var nodes = new ArrayList<@Nullable Node>(); try { var header = parseMemberHeader(); @@ -157,7 +157,7 @@ final class ParserImpl { } ReplInput parseReplInput() { - var nodes = new ArrayList(); + var nodes = new ArrayList<@Nullable Node>(); while (lookahead != Token.EOF) { var header = parseMemberHeader(); switch (lookahead) { @@ -193,7 +193,11 @@ final class ParserImpl { if (nodes.isEmpty()) { span = new Span(0, 0); } else { - span = nodes.get(0).span().endWith(nodes.get(nodes.size() - 1).span()); + var first = nodes.get(0); + var last = nodes.get(nodes.size() - 1); + assert first != null; + assert last != null; + span = first.span().endWith(last.span()); } return new ReplInput(nodes, span); } @@ -220,7 +224,7 @@ final class ParserImpl { end = extendsOrAmendsDecl.span(); } if (moduleName != null || extendsOrAmendsDecl != null) { - var children = new ArrayList(); + var children = new ArrayList<@Nullable Node>(); children.add(header.docComment); children.addAll(header.annotations); var modifiersOffset = children.size(); @@ -229,6 +233,10 @@ final class ParserImpl { children.add(moduleKeyword); children.add(moduleName); children.add(extendsOrAmendsDecl); + //noinspection ConstantValue (NullAway needs this assertion, IntelliJ doesn't) + assert start != null; + //noinspection ConstantValue + assert end != null; return new ModuleDecl(children, modifiersOffset, nameOffset, start.endWith(end)); } return null; @@ -315,7 +323,7 @@ final class ParserImpl { return new DocComment(spans); } - private Span parseModuleMember(MemberHeader header, List nodes) { + private Span parseModuleMember(MemberHeader header, List<@Nullable Node> nodes) { switch (lookahead) { case IDENTIFIER -> { var node = parseClassProperty(header); @@ -361,7 +369,8 @@ final class ParserImpl { } expect(Token.ASSIGN, "unexpectedToken", "="); var type = parseType(); - var children = new ArrayList(header.annotations.size() + header.modifiers.size() + 5); + var children = + new ArrayList<@Nullable Node>(header.annotations.size() + header.modifiers.size() + 5); children.add(header.docComment); children.addAll(header.annotations); var modifiersOffset = header.annotations.size() + 1; @@ -377,7 +386,7 @@ final class ParserImpl { private Class parseClass(MemberHeader header) { var classKeyword = next(); var startSpan = header.span(classKeyword.span); - var children = new ArrayList(); + var children = new ArrayList<@Nullable Node>(); children.add(header.docComment); children.addAll(header.annotations); var modifiersOffset = header.annotations.size() + 1; @@ -433,7 +442,7 @@ final class ParserImpl { private ClassProperty parseClassProperty(MemberHeader header) { var name = parseIdentifier(); var start = header.span(name.span()); - var children = new ArrayList(); + var children = new ArrayList<@Nullable Node>(); children.add(header.docComment); children.addAll(header.annotations); var modifiersOffset = header.annotations.size() + 1; @@ -481,7 +490,7 @@ final class ParserImpl { var func = expect(Token.FUNCTION, "unexpectedToken", "function").span; var start = header.span(func); var headerSpanStart = header.modifierSpan(func); - var children = new ArrayList(); + var children = new ArrayList<@Nullable Node>(); children.add(header.docComment); children.addAll(header.annotations); var modifiersOffset = header.annotations.size() + 1; @@ -522,7 +531,7 @@ final class ParserImpl { private ObjectBody parseObjectBody() { var start = expect(Token.LBRACE, "unexpectedToken", "{").span; - List nodes = new ArrayList<>(); + var nodes = new ArrayList(); var membersOffset = -1; if (lookahead == Token.RBRACE) { return new ObjectBody(List.of(), 0, start.endWith(next().span)); @@ -656,7 +665,7 @@ final class ParserImpl { if (typeAnnotation != null || lookahead == Token.ASSIGN) { expect(Token.ASSIGN, "unexpectedToken", "="); var expr = parseExpr("}"); - var nodes = new ArrayList(allModifiers.size() + 4); + var nodes = new ArrayList<@Nullable Node>(allModifiers.size() + 4); nodes.addAll(allModifiers); nodes.add(identifier); nodes.add(typeAnnotation); @@ -666,7 +675,7 @@ final class ParserImpl { } var bodies = parseBodyList(); var end = bodies.get(bodies.size() - 1).span(); - var nodes = new ArrayList(allModifiers.size() + 4); + var nodes = new ArrayList<@Nullable Node>(allModifiers.size() + 4); nodes.addAll(allModifiers); nodes.add(identifier); nodes.add(null); @@ -693,7 +702,7 @@ final class ParserImpl { } expect(Token.ASSIGN, "unexpectedToken", "="); var expr = parseExpr("}"); - var nodes = new ArrayList(modifiers.size() + 6); + var nodes = new ArrayList<@Nullable Node>(modifiers.size() + 6); nodes.addAll(modifiers); nodes.add(new Keyword(function)); nodes.add(identifier); @@ -728,7 +737,7 @@ final class ParserImpl { } var bodies = parseBodyList(); var end = bodies.get(bodies.size() - 1).span(); - var nodes = new ArrayList(bodies.size() + 2); + var nodes = new ArrayList<@Nullable Node>(bodies.size() + 2); nodes.add(pred); nodes.add(null); nodes.addAll(bodies); @@ -746,7 +755,7 @@ final class ParserImpl { } var bodies = parseBodyList(); var end = bodies.get(bodies.size() - 1).span(); - var nodes = new ArrayList(bodies.size() + 2); + var nodes = new ArrayList<@Nullable Node>(bodies.size() + 2); nodes.add(key); nodes.add(null); nodes.addAll(bodies); @@ -1043,7 +1052,7 @@ final class ParserImpl { @SuppressWarnings("DuplicatedCode") private Expr parseExprRest(Expr expr) { - // non null + // non-null if (lookahead == Token.NON_NULL) { var end = next().span; var res = new NonNullExpr(expr, expr.span().endWith(end)); @@ -1125,7 +1134,6 @@ final class ParserImpl { case INTERPOLATION_START -> { var istart = next().span; if (!builder.isEmpty()) { - assert startSpan != null; parts.add(new StringChars(builder.toString(), startSpan.endWith(end))); builder = new StringBuilder(); } @@ -1196,11 +1204,12 @@ final class ParserImpl { return renderString(nodes, indent); } - @SuppressWarnings("DataFlowIssue") private List renderString(List nodes, String commonIndent) { var parts = new ArrayList(); var builder = new StringBuilder(); - var endOffset = nodes.get(nodes.size() - 1).token.token == Token.STRING_NEWLINE ? 1 : 2; + var lastToken = nodes.get(nodes.size() - 1).token; + assert lastToken != null; + var endOffset = lastToken.token == Token.STRING_NEWLINE ? 1 : 2; var isNewLine = true; Span start = null; Span end = null; @@ -1208,6 +1217,8 @@ final class ParserImpl { var node = nodes.get(i); if (node.node != null) { if (!builder.isEmpty()) { + assert start != null; + assert end != null; parts.add(new StringChars(builder.toString(), start.endWith(end))); builder = new StringBuilder(); start = null; @@ -1253,6 +1264,8 @@ final class ParserImpl { } } if (!builder.isEmpty()) { + assert start != null; + assert end != null; parts.add(new StringChars(builder.toString(), start.endWith(end))); } return parts; @@ -1448,7 +1461,7 @@ final class ParserImpl { private Annotation parseAnnotation() { var start = next().span; - var children = new ArrayList(2); + var children = new ArrayList<@Nullable Node>(2); var type = parseType(); children.add(type); ObjectBody body = null; @@ -1688,7 +1701,7 @@ final class ParserImpl { } private record TempNode( - @Nullable FullToken token, @Nullable StringPart.StringInterpolation node) { + @Nullable FullToken token, StringPart.@Nullable StringInterpolation node) { Span span() { if (token != null) return token.span; assert node != null; @@ -1764,13 +1777,7 @@ final class ParserImpl { return !(docComment == null && annotations.isEmpty() && modifiers.isEmpty()); } - @SuppressWarnings("DataFlowIssue") - @Nullable - Span span() { - return span(null); - } - - Span span(Span or) { + @Nullable Span span() { if (docComment != null) { return docComment.span(); } @@ -1780,7 +1787,12 @@ final class ParserImpl { if (!modifiers().isEmpty()) { return modifiers.get(0).span(); } - return or; + return null; + } + + Span span(Span or) { + var span = span(); + return span != null ? span : or; } Span modifierSpan(Span or) { diff --git a/pkl-parser/src/main/java/org/pkl/parser/Token.java b/pkl-parser/src/main/java/org/pkl/parser/Token.java index d80467b8..d5949e7e 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/Token.java +++ b/pkl-parser/src/main/java/org/pkl/parser/Token.java @@ -106,6 +106,7 @@ public enum Token { QSPREAD, UNDERSCORE, EOF, + SOF, // start-of-file sentinel SEMICOLON, INT, diff --git a/pkl-parser/src/main/java/org/pkl/parser/package-info.java b/pkl-parser/src/main/java/org/pkl/parser/package-info.java index 9919ca47..e2eeeb61 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/package-info.java +++ b/pkl-parser/src/main/java/org/pkl/parser/package-info.java @@ -1,4 +1,4 @@ -@NonnullByDefault +@NullMarked package org.pkl.parser; -import org.pkl.parser.util.NonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/AbstractNode.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/AbstractNode.java index 07180fd0..90085f75 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/AbstractNode.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/AbstractNode.java @@ -18,8 +18,8 @@ package org.pkl.parser.syntax; import java.util.Collections; import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public abstract class AbstractNode implements Node { protected final Span span; @@ -62,7 +62,7 @@ public abstract class AbstractNode implements Node { } @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (this == o) { return true; } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Annotation.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Annotation.java index 2f78b51a..58387cee 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Annotation.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Annotation.java @@ -16,17 +16,17 @@ package org.pkl.parser.syntax; import java.util.List; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class Annotation extends AbstractNode { - public Annotation(List nodes, Span span) { + public Annotation(List<@Nullable Node> nodes, Span span) { super(span, nodes); } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitAnnotation(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ArgumentList.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ArgumentList.java index 8c758f0d..54e41787 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ArgumentList.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ArgumentList.java @@ -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 ArgumentList extends AbstractNode { @@ -27,7 +26,7 @@ public final class ArgumentList extends AbstractNode { } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitArgumentList(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Class.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Class.java index 33426730..08e62636 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Class.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Class.java @@ -16,22 +16,22 @@ package org.pkl.parser.syntax; import java.util.List; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class Class extends AbstractNode { private final int modifiersOffset; private final int keywordOffset; - public Class(List nodes, int modifiersOffset, int keywordOffset, Span span) { + public Class(List<@Nullable Node> nodes, int modifiersOffset, int keywordOffset, Span span) { super(span, nodes); this.modifiersOffset = modifiersOffset; this.keywordOffset = keywordOffset; } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitClass(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassBody.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassBody.java index 9209bbec..8af17be4 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassBody.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassBody.java @@ -19,7 +19,6 @@ import java.util.ArrayList; import java.util.List; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class ClassBody extends AbstractNode { @@ -28,7 +27,7 @@ public final class ClassBody extends AbstractNode { } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitClassBody(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassMethod.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassMethod.java index 6cd69fb9..19bd7b88 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassMethod.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassMethod.java @@ -16,9 +16,9 @@ package org.pkl.parser.syntax; import java.util.List; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class ClassMethod extends AbstractNode { private final int modifiersOffset; @@ -26,7 +26,7 @@ public final class ClassMethod extends AbstractNode { private final Span headerSpan; public ClassMethod( - List nodes, int modifiersOffset, int nameOffset, Span headerSpan, Span span) { + List<@Nullable Node> nodes, int modifiersOffset, int nameOffset, Span headerSpan, Span span) { super(span, nodes); this.headerSpan = headerSpan; this.modifiersOffset = modifiersOffset; @@ -34,7 +34,7 @@ public final class ClassMethod extends AbstractNode { } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitClassMethod(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassProperty.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassProperty.java index 0743ecc0..931d8007 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassProperty.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ClassProperty.java @@ -16,22 +16,22 @@ package org.pkl.parser.syntax; import java.util.List; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class ClassProperty extends AbstractNode { private final int modifiersOffset; private final int nameOffset; - public ClassProperty(List nodes, int modifiersOffset, int nameOffset, Span span) { + public ClassProperty(List<@Nullable Node> nodes, int modifiersOffset, int nameOffset, Span span) { super(span, nodes); this.modifiersOffset = modifiersOffset; this.nameOffset = nameOffset; } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitClassProperty(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/DocComment.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/DocComment.java index 84cb5025..864b05ed 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/DocComment.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/DocComment.java @@ -37,7 +37,7 @@ public final class DocComment extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitDocComment(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Expr.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Expr.java index 7ddec543..50c1920e 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Expr.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Expr.java @@ -18,9 +18,9 @@ package org.pkl.parser.syntax; import java.util.Arrays; import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; 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 { @@ -35,7 +35,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitThisExpr(this); } } @@ -46,7 +46,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitOuterExpr(this); } } @@ -57,7 +57,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitModuleExpr(this); } } @@ -68,7 +68,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitNullLiteralExpr(this); } } @@ -82,7 +82,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitBoolLiteralExpr(this); } @@ -100,7 +100,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitIntLiteralExpr(this); } @@ -118,7 +118,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitFloatLiteralExpr(this); } @@ -153,7 +153,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitSingleLineStringLiteralExpr(this); } @@ -183,7 +183,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitMultiLineStringLiteralExpr(this); } @@ -207,7 +207,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitThrowExpr(this); } @@ -224,7 +224,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitTraceExpr(this); } @@ -244,7 +244,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitImportExpr(this); } @@ -268,7 +268,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitReadExpr(this); } @@ -296,7 +296,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitUnqualifiedAccessExpr(this); } @@ -325,7 +325,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitQualifiedAccessExpr(this); } @@ -356,7 +356,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitSuperAccessExpr(this); } @@ -377,7 +377,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitSuperSubscriptExpr(this); } @@ -394,7 +394,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitSubscriptExpr(this); } @@ -417,7 +417,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitIfExpr(this); } @@ -446,7 +446,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitLetExpr(this); } @@ -475,7 +475,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitFunctionLiteralExpr(this); } @@ -498,7 +498,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitParenthesizedExpr(this); } @@ -515,7 +515,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitNewExpr(this); } @@ -540,7 +540,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitAmendsExpr(this); } @@ -563,7 +563,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitNonNullExpr(this); } @@ -580,7 +580,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitUnaryMinusExpr(this); } @@ -597,7 +597,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitLogicalNotExpr(this); } @@ -617,7 +617,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitBinaryOperatorExpr(this); } @@ -642,9 +642,8 @@ public abstract sealed class Expr extends AbstractNode { return "BinaryOp{children=" + children + ", op=" + op + ", span=" + span + '}'; } - @SuppressWarnings("ConstantValue") @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (o == null || getClass() != o.getClass()) { return false; } @@ -669,7 +668,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitTypeCheckExpr(this); } @@ -692,7 +691,7 @@ public abstract sealed class Expr extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitTypeCastExpr(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ExtendsOrAmendsClause.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ExtendsOrAmendsClause.java index 7790941a..0ba01999 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ExtendsOrAmendsClause.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ExtendsOrAmendsClause.java @@ -17,9 +17,9 @@ package org.pkl.parser.syntax; import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class ExtendsOrAmendsClause extends AbstractNode { private final Type type; @@ -30,7 +30,7 @@ public final class ExtendsOrAmendsClause extends AbstractNode { } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitExtendsOrAmendsClause(this); } @@ -56,9 +56,8 @@ public final class ExtendsOrAmendsClause extends AbstractNode { + '}'; } - @SuppressWarnings("ConstantValue") @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (o == null || getClass() != o.getClass()) { return false; } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Identifier.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Identifier.java index 33132859..e35b96bb 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Identifier.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Identifier.java @@ -17,6 +17,7 @@ package org.pkl.parser.syntax; import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; @@ -29,7 +30,7 @@ public final class Identifier extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitIdentifier(this); } @@ -54,9 +55,8 @@ public final class Identifier extends AbstractNode { return "Identifier{value='" + value + '\'' + ", span=" + span + '}'; } - @SuppressWarnings("ConstantValue") @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (o == null || getClass() != o.getClass()) { return false; } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ImportClause.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ImportClause.java index 21dab966..91eb7eb3 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ImportClause.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ImportClause.java @@ -17,9 +17,9 @@ package org.pkl.parser.syntax; import java.util.Arrays; import java.util.Objects; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class ImportClause extends AbstractNode { private final boolean isGlob; @@ -31,7 +31,7 @@ public final class ImportClause extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitImportClause(this); } @@ -54,9 +54,8 @@ public final class ImportClause extends AbstractNode { return "Import{isGlob=" + isGlob + ", span=" + span + ", children=" + children + '}'; } - @SuppressWarnings("ConstantValue") @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (o == null || getClass() != o.getClass()) { return false; } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Keyword.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Keyword.java index 6d69b1b4..9df64059 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Keyword.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Keyword.java @@ -26,7 +26,7 @@ public final class Keyword extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitKeyword(this); } } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Modifier.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Modifier.java index 5e8390cb..9b09c4c9 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Modifier.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Modifier.java @@ -17,6 +17,7 @@ package org.pkl.parser.syntax; import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; @@ -29,7 +30,7 @@ public final class Modifier extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitModifier(this); } @@ -42,9 +43,8 @@ public final class Modifier extends AbstractNode { return "Modifier{value=" + value + ", span=" + span + '}'; } - @SuppressWarnings("ConstantValue") @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (o == null || getClass() != o.getClass()) { return false; } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java index c5da7fd5..2ee2ec43 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Module.java @@ -17,17 +17,17 @@ package org.pkl.parser.syntax; import java.util.ArrayList; import java.util.List; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class Module extends AbstractNode { - public Module(List nodes, Span span) { + public Module(List<@Nullable Node> nodes, Span span) { super(span, nodes); } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitModule(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ModuleDecl.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ModuleDecl.java index 44263357..204e0d5d 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ModuleDecl.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ModuleDecl.java @@ -16,22 +16,22 @@ package org.pkl.parser.syntax; import java.util.List; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class ModuleDecl extends AbstractNode { private final int modifiersOffset; private final int nameOffset; - public ModuleDecl(List nodes, int modifiersOffset, int nameOffset, Span span) { + public ModuleDecl(List<@Nullable Node> nodes, int modifiersOffset, int nameOffset, Span span) { super(span, nodes); this.modifiersOffset = modifiersOffset; this.nameOffset = nameOffset; } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitModuleDecl(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Node.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Node.java index 39dec453..5476f448 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Node.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Node.java @@ -16,21 +16,20 @@ package org.pkl.parser.syntax; import java.util.List; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public interface Node { Span span(); - @Nullable - Node parent(); + @Nullable Node parent(); void setParent(Node parent); List children(); - T accept(ParserVisitor visitor); + T accept(ParserVisitor visitor); default String text(char[] source) { return new String(source, span().charIndex(), span().length()); diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectBody.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectBody.java index a34c5592..447f07de 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectBody.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectBody.java @@ -28,7 +28,7 @@ public final class ObjectBody extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitObjectBody(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectMember.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectMember.java index 105b50d1..a88cfd94 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectMember.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ObjectMember.java @@ -18,9 +18,9 @@ package org.pkl.parser.syntax; import java.util.Arrays; import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; 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 { @@ -35,7 +35,7 @@ public abstract sealed class ObjectMember extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitObjectElement(this); } @@ -49,13 +49,13 @@ public abstract sealed class ObjectMember extends AbstractNode { public static final class ObjectProperty extends ObjectMember { private final int identifierOffset; - public ObjectProperty(List nodes, int identifierOffset, Span span) { + public ObjectProperty(List<@Nullable Node> nodes, int identifierOffset, Span span) { super(span, nodes); this.identifierOffset = identifierOffset; } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitObjectProperty(this); } @@ -87,13 +87,13 @@ public abstract sealed class ObjectMember extends AbstractNode { public static final class ObjectMethod extends ObjectMember { private final int identifierOffset; - public ObjectMethod(List nodes, int identifierOffset, Span span) { + public ObjectMethod(List<@Nullable Node> nodes, int identifierOffset, Span span) { super(span, nodes); this.identifierOffset = identifierOffset; } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitObjectMethod(this); } @@ -158,12 +158,12 @@ public abstract sealed class ObjectMember extends AbstractNode { } public static final class MemberPredicate extends ObjectMember { - public MemberPredicate(List nodes, Span span) { + public MemberPredicate(List<@Nullable Node> nodes, Span span) { super(span, nodes); } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitMemberPredicate(this); } @@ -184,12 +184,12 @@ public abstract sealed class ObjectMember extends AbstractNode { } public static final class ObjectEntry extends ObjectMember { - public ObjectEntry(List nodes, Span span) { + public ObjectEntry(List<@Nullable Node> nodes, Span span) { super(span, nodes); } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitObjectEntry(this); } @@ -218,7 +218,7 @@ public abstract sealed class ObjectMember extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitObjectSpread(this); } @@ -244,9 +244,8 @@ public abstract sealed class ObjectMember extends AbstractNode { + '}'; } - @SuppressWarnings("ConstantValue") @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (o == null || getClass() != o.getClass()) { return false; } @@ -273,7 +272,7 @@ public abstract sealed class ObjectMember extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitWhenGenerator(this); } @@ -301,7 +300,7 @@ public abstract sealed class ObjectMember extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitForGenerator(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Parameter.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Parameter.java index 52002005..e27e729d 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Parameter.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Parameter.java @@ -17,9 +17,9 @@ package org.pkl.parser.syntax; import java.util.Arrays; import java.util.List; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public abstract sealed class Parameter extends AbstractNode { @@ -28,7 +28,7 @@ public abstract sealed class Parameter extends AbstractNode { } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitParameter(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ParameterList.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ParameterList.java index da6aab7c..9e23e1ff 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ParameterList.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ParameterList.java @@ -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 ParameterList extends AbstractNode { public ParameterList(List parameters, Span span) { @@ -26,7 +25,7 @@ public final class ParameterList extends AbstractNode { } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitParameterList(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/QualifiedIdentifier.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/QualifiedIdentifier.java index 890ecfa2..349f908d 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/QualifiedIdentifier.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/QualifiedIdentifier.java @@ -26,7 +26,7 @@ public final class QualifiedIdentifier extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitQualifiedIdentifier(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/ReplInput.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/ReplInput.java index e254ef52..823a538f 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/ReplInput.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/ReplInput.java @@ -16,17 +16,17 @@ package org.pkl.parser.syntax; import java.util.List; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class ReplInput extends AbstractNode { - public ReplInput(List nodes, Span span) { + public ReplInput(List<@Nullable Node> nodes, Span span) { super(span, nodes); } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitReplInput(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/StringConstant.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/StringConstant.java index 05af022c..f94a855a 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/StringConstant.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/StringConstant.java @@ -17,9 +17,9 @@ package org.pkl.parser.syntax; import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class StringConstant extends AbstractNode { private final String string; @@ -30,7 +30,7 @@ public final class StringConstant extends AbstractNode { } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitStringConstant(this); } @@ -43,9 +43,8 @@ public final class StringConstant extends AbstractNode { return "StringConstant{string='" + string + '\'' + ", span=" + span + '}'; } - @SuppressWarnings("ConstantValue") @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (o == null || getClass() != o.getClass()) { return false; } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/StringPart.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/StringPart.java index d5647aba..d226b0db 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/StringPart.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/StringPart.java @@ -17,9 +17,9 @@ package org.pkl.parser.syntax; import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public abstract sealed class StringPart extends AbstractNode { @@ -28,7 +28,7 @@ public abstract sealed class StringPart extends AbstractNode { } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitStringPart(this); } @@ -49,9 +49,8 @@ public abstract sealed class StringPart extends AbstractNode { return "StringChars{string='" + string + '\'' + ", span=" + span + '}'; } - @SuppressWarnings("ConstantValue") @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (o == null || getClass() != o.getClass()) { return false; } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/Type.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/Type.java index 32f0e8f1..88ab013d 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/Type.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/Type.java @@ -18,9 +18,9 @@ package org.pkl.parser.syntax; import java.util.Arrays; import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public abstract sealed class Type extends AbstractNode { @@ -34,7 +34,7 @@ public abstract sealed class Type extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitUnknownType(this); } } @@ -45,7 +45,7 @@ public abstract sealed class Type extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitNothingType(this); } } @@ -56,7 +56,7 @@ public abstract sealed class Type extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitModuleType(this); } } @@ -67,7 +67,7 @@ public abstract sealed class Type extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitStringConstantType(this); } @@ -84,7 +84,7 @@ public abstract sealed class Type extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitDeclaredType(this); } @@ -105,7 +105,7 @@ public abstract sealed class Type extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitParenthesizedType(this); } @@ -122,7 +122,7 @@ public abstract sealed class Type extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitNullableType(this); } @@ -139,7 +139,7 @@ public abstract sealed class Type extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitConstrainedType(this); } @@ -164,7 +164,7 @@ public abstract sealed class Type extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitUnionType(this); } @@ -189,9 +189,8 @@ public abstract sealed class Type extends AbstractNode { + '}'; } - @SuppressWarnings("ConstantValue") @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (o == null || getClass() != o.getClass()) { return false; } @@ -217,7 +216,7 @@ public abstract sealed class Type extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitFunctionType(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAlias.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAlias.java index af7e63fb..9a5c17c1 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAlias.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAlias.java @@ -16,23 +16,23 @@ package org.pkl.parser.syntax; import java.util.List; +import org.jspecify.annotations.Nullable; 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; - public TypeAlias(List children, int modifiersOffset, int nameOffset, Span span) { + public TypeAlias(List<@Nullable Node> children, int modifiersOffset, int nameOffset, Span span) { super(span, children); this.modifiersOffset = modifiersOffset; this.nameOffset = nameOffset; } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitTypeAlias(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAnnotation.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAnnotation.java index ad4162a0..d581bd9e 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAnnotation.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeAnnotation.java @@ -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 TypeAnnotation extends AbstractNode { public TypeAnnotation(Type type, Span span) { @@ -26,7 +25,7 @@ public final class TypeAnnotation extends AbstractNode { } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitTypeAnnotation(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeArgumentList.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeArgumentList.java index c4617073..5e62ae77 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeArgumentList.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeArgumentList.java @@ -31,7 +31,7 @@ public final class TypeArgumentList extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitTypeArgumentList(this); } } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameter.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameter.java index 8b2dccee..b859aeb0 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameter.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameter.java @@ -17,9 +17,9 @@ package org.pkl.parser.syntax; import java.util.List; import java.util.Objects; +import org.jspecify.annotations.Nullable; import org.pkl.parser.ParserVisitor; import org.pkl.parser.Span; -import org.pkl.parser.util.Nullable; public final class TypeParameter extends AbstractNode { private final @Nullable Variance variance; @@ -30,7 +30,7 @@ public final class TypeParameter extends AbstractNode { } @Override - public T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitTypeParameter(this); } @@ -56,9 +56,8 @@ public final class TypeParameter extends AbstractNode { + '}'; } - @SuppressWarnings("ConstantValue") @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (o == null || getClass() != o.getClass()) { return false; } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameterList.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameterList.java index 20f3bd50..611a1cae 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameterList.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/TypeParameterList.java @@ -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 TypeParameterList extends AbstractNode { public TypeParameterList(List parameters, Span span) { @@ -26,7 +25,7 @@ public final class TypeParameterList extends AbstractNode { } @Override - public @Nullable T accept(ParserVisitor visitor) { + public T accept(ParserVisitor visitor) { return visitor.visitTypeParameterList(this); } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/generic/Node.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/generic/Node.java index 81038059..bc481b15 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/generic/Node.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/generic/Node.java @@ -18,7 +18,7 @@ package org.pkl.parser.syntax.generic; import java.util.Collections; import java.util.List; import java.util.Objects; -import org.pkl.parser.util.Nullable; +import org.jspecify.annotations.Nullable; public final class Node { public final List children; @@ -60,7 +60,7 @@ public final class Node { } @Override - public boolean equals(Object o) { + public boolean equals(@Nullable Object o) { if (this == o) { return true; } diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/generic/package-info.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/generic/package-info.java index 63e51082..3859be2a 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/generic/package-info.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/generic/package-info.java @@ -1,4 +1,4 @@ -@NonnullByDefault +@NullMarked package org.pkl.parser.syntax.generic; -import org.pkl.parser.util.NonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/pkl-parser/src/main/java/org/pkl/parser/syntax/package-info.java b/pkl-parser/src/main/java/org/pkl/parser/syntax/package-info.java index 19881c4f..8e0076ae 100644 --- a/pkl-parser/src/main/java/org/pkl/parser/syntax/package-info.java +++ b/pkl-parser/src/main/java/org/pkl/parser/syntax/package-info.java @@ -1,4 +1,4 @@ -@NonnullByDefault +@NullMarked package org.pkl.parser.syntax; -import org.pkl.parser.util.NonnullByDefault; +import org.jspecify.annotations.NullMarked; diff --git a/pkl-parser/src/main/java/org/pkl/parser/util/NonnullByDefault.java b/pkl-parser/src/main/java/org/pkl/parser/util/NonnullByDefault.java deleted file mode 100644 index 93bc3cbb..00000000 --- a/pkl-parser/src/main/java/org/pkl/parser/util/NonnullByDefault.java +++ /dev/null @@ -1,41 +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.parser.util; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.meta.TypeQualifierDefault; - -/** - * Indicates that method return types and method parameters in the annotated package are 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. - */ -@Documented -@TypeQualifierDefault({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE_PARAMETER}) -@javax.annotation.Nonnull -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.PACKAGE) -public @interface NonnullByDefault {} diff --git a/pkl-parser/src/main/java/org/pkl/parser/util/Nullable.java b/pkl-parser/src/main/java/org/pkl/parser/util/Nullable.java deleted file mode 100644 index ce61c5e0..00000000 --- a/pkl-parser/src/main/java/org/pkl/parser/util/Nullable.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright © 2024-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.parser.util; - -import static javax.annotation.meta.When.MAYBE; - -import java.lang.annotation.Documented; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import javax.annotation.meta.TypeQualifierNickname; - -@Target({ - ElementType.TYPE_PARAMETER, - ElementType.TYPE_USE, - ElementType.PARAMETER, - ElementType.FIELD, - ElementType.METHOD -}) -@Retention(RetentionPolicy.RUNTIME) -@Documented -@javax.annotation.Nonnull(when = MAYBE) -@TypeQualifierNickname -public @interface Nullable {} diff --git a/pkl-server/gradle.lockfile b/pkl-server/gradle.lockfile index bdc587ba..8b632c98 100644 --- a/pkl-server/gradle.lockfile +++ b/pkl-server/gradle.lockfile @@ -56,7 +56,7 @@ org.jetbrains.kotlinx:kotlinx-serialization-bom:1.7.3=swiftExportClasspathResolv org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.7.3=swiftExportClasspathResolvable org.jetbrains.kotlinx:kotlinx-serialization-core:1.7.3=swiftExportClasspathResolvable org.jetbrains:annotations:13.0=compileClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,kotlinInternalAbiValidation,kotlinKlibCommonizerClasspath,runtimeClasspath,swiftExportClasspathResolvable,testCompileClasspath,testRuntimeClasspath -org.jspecify:jspecify:1.0.0=testCompileClasspath +org.jspecify:jspecify:1.0.0=runtimeClasspath,testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-api:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-engine:6.0.3=testCompileClasspath,testRuntimeClasspath org.junit.jupiter:junit-jupiter-params:6.0.3=testCompileClasspath,testRuntimeClasspath diff --git a/pkl-tools/gradle.lockfile b/pkl-tools/gradle.lockfile index 083a54fe..ae06bb8e 100644 --- a/pkl-tools/gradle.lockfile +++ b/pkl-tools/gradle.lockfile @@ -58,6 +58,7 @@ org.jline:jline-native:4.0.12=runtimeClasspath,testRuntimeClasspath org.jline:jline-reader:4.0.12=runtimeClasspath,testRuntimeClasspath org.jline:jline-terminal-jni:4.0.12=runtimeClasspath,testRuntimeClasspath org.jline:jline-terminal:4.0.12=runtimeClasspath,testRuntimeClasspath +org.jspecify:jspecify:1.0.0=runtimeClasspath,testRuntimeClasspath org.msgpack:msgpack-core:0.9.11=runtimeClasspath,testRuntimeClasspath org.organicdesign:Paguro:3.10.3=runtimeClasspath,testRuntimeClasspath org.snakeyaml:snakeyaml-engine:2.10=runtimeClasspath,testRuntimeClasspath diff --git a/stdlib/gradle.lockfile b/stdlib/gradle.lockfile index ba5e77ba..d9cca301 100644 --- a/stdlib/gradle.lockfile +++ b/stdlib/gradle.lockfile @@ -2,4 +2,5 @@ # Manual edits can break the build and are not advised. # This file is expected to be part of source control. org.jetbrains.kotlin:kotlin-bom:2.2.21=pklFormatter +org.jspecify:jspecify:1.0.0=pklFormatter empty=signatures