Skip to content

NullPointerException on circular import #1183

@bioball

Description

@bioball

The following code produces a NullPointerException:

// child/foo.pkl
amends "..."
// child/Qux.pkl
import "foo.pkl"

res: foo.Bar
// Biz.pkl
import "child/Qux.pkl"

qux: Qux = new {
  res = "bar"
}
// foo.pkl
import "Biz.pkl"

prop: Biz

typealias Bar = "bar"

Then run pkl eval child/foo.pkl

See attached zip file for a reproducer.

cycle.zip

Throws:

–– Pkl Error ––
None (cause has no message)

1 | import "foo.pkl"
    ^^^^^^^^^^^^^^^^
at Qux (/Users/danielchao/code/apple/pkl/.dan-scripts/cycle/child/Qux.pkl:1)

3 | qux: Qux = new {
         ^^^
at Biz (/Users/danielchao/code/apple/pkl/.dan-scripts/cycle/Biz.pkl:3)

3 | prop: Biz
          ^^^
at foo (/Users/danielchao/code/apple/pkl/.dan-scripts/cycle/foo.pkl:3)

Pkl 0.29.0 (macOS 14.3.1, native)

java.lang.NullPointerException
        at org.pkl.core.ast.type.ResolveQualifiedDeclaredTypeNode.executeGeneric(ResolveQualifiedDeclaredTypeNode.java:62)
        at org.pkl.core.ast.type.UnresolvedTypeNode$Declared.execute(UnresolvedTypeNode.java:139)
        at org.pkl.core.ast.member.UnresolvedPropertyNode.execute(UnresolvedPropertyNode.java:167)
        at org.pkl.core.ast.member.ClassNode.executeGeneric(ClassNode.java:150)
        at org.pkl.core.ast.member.ClassNode.executeGeneric(ClassNode.java:35)
        at org.pkl.core.ast.member.ModuleNode.executeImpl(ModuleNode.java:56)
        at org.pkl.core.ast.PklRootNode.execute(PklRootNode.java:46)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:776)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:700)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:624)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:124)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:232)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:106)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:556)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:502)
        at org.pkl.core.runtime.VmLanguage.initializeModule(VmLanguage.java:112)
        at org.pkl.core.runtime.ModuleCache.doLoad(ModuleCache.java:178)
        at org.pkl.core.runtime.ModuleCache.getOrLoad(ModuleCache.java:157)
        at org.pkl.core.runtime.VmLanguage.loadModule(VmLanguage.java:81)
        at org.pkl.core.ast.expression.unary.ImportNode.executeGeneric(ImportNode.java:57)
        at org.pkl.core.ast.member.UntypedObjectMemberNode.executeImpl(UntypedObjectMemberNode.java:36)
        at org.pkl.core.ast.PklRootNode.execute(PklRootNode.java:46)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:776)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:700)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:624)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:124)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:232)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:106)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:556)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedIndirectCallNode.call(OptimizedIndirectCallNode.java:68)
        at org.pkl.core.ast.type.ResolveDeclaredTypeNode.getType(ResolveDeclaredTypeNode.java:96)
        at org.pkl.core.ast.type.ResolveSimpleDeclaredTypeNode.executeGeneric(ResolveSimpleDeclaredTypeNode.java:43)
        at org.pkl.core.ast.type.UnresolvedTypeNode$Declared.execute(UnresolvedTypeNode.java:139)
        at org.pkl.core.ast.member.UnresolvedPropertyNode.execute(UnresolvedPropertyNode.java:167)
        at org.pkl.core.ast.member.ClassNode.executeGeneric(ClassNode.java:150)
        at org.pkl.core.ast.member.ClassNode.executeGeneric(ClassNode.java:35)
        at org.pkl.core.ast.member.ModuleNode.executeImpl(ModuleNode.java:56)
        at org.pkl.core.ast.PklRootNode.execute(PklRootNode.java:46)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:776)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:700)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:624)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:124)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:232)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:106)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:556)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:502)
        at org.pkl.core.runtime.VmLanguage.initializeModule(VmLanguage.java:112)
        at org.pkl.core.runtime.ModuleCache.doLoad(ModuleCache.java:178)
        at org.pkl.core.runtime.ModuleCache.getOrLoad(ModuleCache.java:157)
        at org.pkl.core.runtime.VmLanguage.loadModule(VmLanguage.java:81)
        at org.pkl.core.ast.expression.unary.ImportNode.executeGeneric(ImportNode.java:57)
        at org.pkl.core.ast.member.UntypedObjectMemberNode.executeImpl(UntypedObjectMemberNode.java:36)
        at org.pkl.core.ast.PklRootNode.execute(PklRootNode.java:46)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:776)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:700)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:624)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:124)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:232)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:106)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:556)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedIndirectCallNode.call(OptimizedIndirectCallNode.java:68)
        at org.pkl.core.ast.type.ResolveDeclaredTypeNode.getType(ResolveDeclaredTypeNode.java:96)
        at org.pkl.core.ast.type.ResolveSimpleDeclaredTypeNode.executeGeneric(ResolveSimpleDeclaredTypeNode.java:43)
        at org.pkl.core.ast.type.UnresolvedTypeNode$Declared.execute(UnresolvedTypeNode.java:139)
        at org.pkl.core.ast.member.UnresolvedPropertyNode.execute(UnresolvedPropertyNode.java:167)
        at org.pkl.core.ast.member.ClassNode.executeGeneric(ClassNode.java:150)
        at org.pkl.core.ast.member.ClassNode.executeGeneric(ClassNode.java:35)
        at org.pkl.core.ast.member.ModuleNode.executeImpl(ModuleNode.java:56)
        at org.pkl.core.ast.PklRootNode.execute(PklRootNode.java:46)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:776)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:700)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:624)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:124)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:232)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:106)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:556)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:502)
        at org.pkl.core.runtime.VmLanguage.initializeModule(VmLanguage.java:112)
        at org.pkl.core.runtime.ModuleCache.doLoad(ModuleCache.java:178)
        at org.pkl.core.runtime.ModuleCache.getOrLoad(ModuleCache.java:157)
        at org.pkl.core.runtime.VmLanguage.loadModule(VmLanguage.java:81)
        at org.pkl.core.ast.expression.unary.ImportNode.executeGeneric(ImportNode.java:57)
        at org.pkl.core.ast.expression.literal.AmendModuleNodeGen.executeGeneric(AmendModuleNodeGen.java:62)
        at org.pkl.core.ast.member.ModuleNode.executeImpl(ModuleNode.java:56)
        at org.pkl.core.ast.PklRootNode.execute(PklRootNode.java:46)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:776)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:700)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:624)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:124)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTargetInstalledCode.doInvoke(SubstrateOptimizedCallTargetInstalledCode.java:232)
        at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:106)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:556)
        at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:502)
        at org.pkl.core.runtime.VmLanguage.initializeModule(VmLanguage.java:112)
        at org.pkl.core.runtime.ModuleCache.doLoad(ModuleCache.java:178)
        at org.pkl.core.runtime.ModuleCache.getOrLoad(ModuleCache.java:157)
        at org.pkl.core.runtime.VmLanguage.loadModule(VmLanguage.java:67)
        at org.pkl.core.EvaluatorImpl.lambda$doEvaluate$15(EvaluatorImpl.java:367)
        at org.pkl.core.EvaluatorImpl.doEvaluate(EvaluatorImpl.java:316)
        at org.pkl.core.EvaluatorImpl.doEvaluate(EvaluatorImpl.java:364)
        at org.pkl.core.EvaluatorImpl.evaluateOutputBytes(EvaluatorImpl.java:148)
        at org.pkl.cli.CliEvaluator.writeOutput(CliEvaluator.kt:217)
        at org.pkl.cli.CliEvaluator.doRun(CliEvaluator.kt:105)
        at org.pkl.commons.cli.CliCommand.run(CliCommand.kt:46)
        at org.pkl.cli.commands.EvalCommand.run(EvalCommand.kt:84)
        at com.github.ajalt.clikt.core.CoreCliktCommandKt.parse(CoreCliktCommand.kt:107)
        at com.github.ajalt.clikt.core.CoreCliktCommandKt.main(CoreCliktCommand.kt:78)
        at com.github.ajalt.clikt.core.CoreCliktCommandKt.main(CoreCliktCommand.kt:90)
        at org.pkl.cli.Main.main$lambda$0(Main.kt:26)
        at org.pkl.commons.cli.CliMainKt.cliMain(CliMain.kt:33)
        at org.pkl.cli.Main.main(Main.kt:26)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions