Repository navigation
Open
Description
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",
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
Activity
fbricon commentedon Jan 14, 2026
@robstryker does that ring a bell?
robstryker commentedon Jan 28, 2026
That stack trace usually indicates a broken javac AST invariant — in particular, a JCMemberReference whose kind field was never initialized. In practice, this tends to occur when AST nodes are constructed or mutated programmatically, reused across compilation contexts, or when compiler phases are invoked out of order (e.g., analysis on partially initialized trees).
From a quick review, none of our code appears to be doing manual construction or mutation of JCMemberReference nodes, nor skipping required compiler phases, so this doesn’t immediately look familiar as something we’d be triggering directly.
To investigate further, we’d need a minimal, self-contained example source file (or set of files) that reliably reproduces the problem using a standard javac invocation or the relevant API calls. Without a small repro, it’s difficult to determine where the invariant is being violated.