Skip to content

experimental javac compiler: tree.kind is null #4295

@ylecuyer

Description

@ylecuyer

Hello,

I'm trying the experimental javac compiler and getting the following error:

!ENTRY org.eclipse.jdt.core 4 0 2025-12-29 17:07:42.568
!MESSAGE Error while analyzing
!STACK 0
java.lang.IllegalStateException: java.lang.NullPointerException: Cannot invoke "com.sun.tools.javac.tree.JCTree$JCMemberReference$ReferenceKind.ordinal()" because "tree.kind" is null
	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.analyze(JavacTaskImpl.java:383)
	at org.eclipse.jdt.core.dom.JavacCompilationUnitResolver.parse(JavacCompilationUnitResolver.java:1025)
	at org.eclipse.jdt.core.dom.JavacCompilationUnitResolver.toCompilationUnit(JavacCompilationUnitResolver.java:602)
	at org.eclipse.jdt.core.dom.ASTParser.internalCreateASTCached(ASTParser.java:1410)
	at org.eclipse.jdt.core.dom.ASTParser.lambda$1(ASTParser.java:1289)
	at org.eclipse.jdt.internal.core.JavaModelManager.cacheZipFiles(JavaModelManager.java:5709)
	at org.eclipse.jdt.core.dom.ASTParser.internalCreateAST(ASTParser.java:1289)
	at org.eclipse.jdt.core.dom.ASTParser.createAST(ASTParser.java:933)
	at org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:175)
	at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:250)
	at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:571)
	at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:294)
	at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:280)
	at org.eclipse.jdt.internal.core.CompilationUnit.getCompilationUnitElementInfo(CompilationUnit.java:1605)
	at org.eclipse.jdt.internal.core.CompilationUnit.getCustomOptions(CompilationUnit.java:1583)
	at org.eclipse.jdt.core.ICompilationUnit.getOptions(ICompilationUnit.java:607)
	at org.eclipse.jdt.core.dom.ASTParser.setSource(ASTParser.java:677)
	at org.eclipse.jdt.internal.core.search.indexing.SourceIndexer.indexDocumentFromDOM(SourceIndexer.java:415)
	at org.eclipse.jdt.internal.core.search.indexing.SourceIndexer.indexDocument(SourceIndexer.java:104)
	at org.eclipse.jdt.internal.core.search.JavaSearchParticipant.indexDocument(JavaSearchParticipant.java:91)
	at org.eclipse.jdt.internal.core.search.indexing.IndexManager.indexDocument(IndexManager.java:664)
	at org.eclipse.jdt.internal.core.search.indexing.IndexManager$2.execute(IndexManager.java:1269)
	at org.eclipse.jdt.internal.core.search.processing.JobManager.indexerLoop(JobManager.java:541)
	at java.base/java.lang.Thread.run(Thread.java:1474)
Caused by: java.lang.NullPointerException: Cannot invoke "com.sun.tools.javac.tree.JCTree$JCMemberReference$ReferenceKind.ordinal()" because "tree.kind" is null
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitReference(ThisEscapeAnalyzer.java:972)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMemberReference.accept(JCTree.java:2657)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.scan(ThisEscapeAnalyzer.java:460)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.invokeUnknown(ThisEscapeAnalyzer.java:685)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.invoke(ThisEscapeAnalyzer.java:594)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitApply(ThisEscapeAnalyzer.java:535)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1860)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.scan(ThisEscapeAnalyzer.java:460)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitSelect(ThisEscapeAnalyzer.java:934)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCFieldAccess.accept(JCTree.java:2576)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.scan(ThisEscapeAnalyzer.java:460)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitApply(ThisEscapeAnalyzer.java:510)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodInvocation.accept(JCTree.java:1860)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.scan(ThisEscapeAnalyzer.java:460)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitAssign(ThisEscapeAnalyzer.java:912)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCAssign.accept(JCTree.java:2105)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.scan(ThisEscapeAnalyzer.java:460)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitExec(ThisEscapeAnalyzer.java:1080)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1647)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.scan(ThisEscapeAnalyzer.java:460)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:58)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.visitBlock(TreeScanner.java:150)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.lambda$visitBlock$0(ThisEscapeAnalyzer.java:762)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitScoped(ThisEscapeAnalyzer.java:1274)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitBlock(ThisEscapeAnalyzer.java:762)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1136)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.scan(ThisEscapeAnalyzer.java:460)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitIf(ThisEscapeAnalyzer.java:1074)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCIf.accept(JCTree.java:1616)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.scan(ThisEscapeAnalyzer.java:460)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:58)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.visitBlock(TreeScanner.java:150)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.lambda$visitBlock$0(ThisEscapeAnalyzer.java:762)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitScoped(ThisEscapeAnalyzer.java:1274)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitBlock(ThisEscapeAnalyzer.java:762)
	at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1136)
	at jdk.compiler/com.sun.tools.javac.tree.TreeScanner.scan(TreeScanner.java:50)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.scan(ThisEscapeAnalyzer.java:460)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.lambda$analyzeConstructor$0(ThisEscapeAnalyzer.java:1221)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.visitScoped(ThisEscapeAnalyzer.java:1274)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.analyzeConstructor(ThisEscapeAnalyzer.java:1221)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:186)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:197)
	at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
	at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1939)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:570)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:560)
	at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:153)
	at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:176)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:265)
	at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:632)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.doAnalyzeTree(ThisEscapeAnalyzer.java:376)
	at jdk.compiler/com.sun.tools.javac.comp.ThisEscapeAnalyzer.analyzeTree(ThisEscapeAnalyzer.java:244)
	at jdk.compiler/com.sun.tools.javac.comp.WarningAnalyzer.analyzeTree(WarningAnalyzer.java:61)
	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.warn(JavaCompiler.java:1469)
	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.warn(JavaCompiler.java:1436)
	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.analyze(JavacTaskImpl.java:404)
	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$analyze$0(JavacTaskImpl.java:379)
	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)
	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.analyze(JavacTaskImpl.java:379)
	... 23 more

I'm not sure what I can share to be usefull

    "java.jdt.ls.java.home": "~/.asdf/installs/java/openjdk-25/",
    "java.jdt.ls.javac.enabled": "on",
Image

There is no issue compiling with ecj

I can't share the source code of the project but if you tell me where to look with more debugging I can help

Regards

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