redhat-developer / redhat-developer/vscode-java

experimental javac compiler: tree.kind is null

オープン
#4,295 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

bug javac
主要言語
TypeScript
スター
2.3k
フォーク
546
平均マージ
20時間 1分
マージ済み PR(30日)
11

説明

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

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

提供された java.jdt.ls.javac.enabled および Java 25 の設定を使用して、まず JavacCompilationUnitResolver.parse と jdk.compiler's ThisEscapeAnalyzer.visitReference に報告されているスタックエントリを確認します。最小限の Java 例で失敗を再現するか、共有可能なソースケースを入手します。完了の条件は、トリガーとなるケースが切り分けられ、javac ベースの解析がクラッシュしなくなることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
java
領域
devtools
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。