Hacktoberfest 2026:维护者为十月标记出来的 issue,仍然开放、适合新手。 浏览 Hacktoberfest issue

Rename class with pattern matching instanceof fails with BINDING_PATTERN com.sun.tools.javac.tree.JCTree$JCBindingPattern

未关闭
#9,645 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

维护者通常 1 天内回复

还没有人认领这个 Issue。

评估

难度
3/5
预计耗时
1-2 天
新手友好度
68/100
Issue 类型
缺陷
描述清晰度
描述清楚
活跃度
活跃
技术栈
java

调研方向

Start with org.netbeans.modules.java.source.save.CasualDiff.java, especially treesMatch at line 3484 and matchTypeTest, then reproduce the class rename using a pattern-matching instanceof expression. Trace how the BINDING_PATTERN node is handled during refactoring. Done means renaming completes without the AssertionError and the reference is updated correctly.

由索引模型根据 Issue 内容生成。

描述

cannot reproduce Java kind:bug needs:triage
Apache NetBeans version

Apache NetBeans 31

What happened

NetBeans 31, when renaming a class that has a JDK 16+ "pattern matching instanceof"

if (cp instanceof GrandProjectContextProvider gcp)

Image
INFO [org.netbeans.ui.indexing]: Indexing finished, indexing took 0 ms.
INFO [org.netbeans.modules.refactoring.spi.impl.ParametersPanel]: org.netbeans.modules.refactoring.api.AbstractRefactoring$ProgressL@2c1ed6fc called start multiple times
INFO [null]: Last record repeated again.
SEVERE [org.openide.util.Exceptions]
java.lang.AssertionError: BINDING_PATTERN com.sun.tools.javac.tree.JCTree$JCBindingPattern
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3484)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3300)
	at org.netbeans.modules.java.source.save.CasualDiff.matchTypeTest(CasualDiff.java:6137)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3384)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3300)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3378)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3300)
	at org.netbeans.modules.java.source.save.CasualDiff.matchIf(CasualDiff.java:6077)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3354)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3300)
	at org.netbeans.modules.java.source.save.CasualDiff.listsMatch(CasualDiff.java:6009)
	at org.netbeans.modules.java.source.save.CasualDiff.matchBlock(CasualDiff.java:6023)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3330)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3300)
	at org.netbeans.modules.java.source.save.CasualDiff.matchLambda(CasualDiff.java:6192)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3456)
	at org.netbeans.modules.java.source.save.CasualDiff.treesMatch(CasualDiff.java:3300)
	at org.netbeans.modules.java.source.save.CasualDiff.listsMatch(CasualDiff.java:6009)
	at org.netbeans.modules.java.source.save.CasualDiff.diffApply(CasualDiff.java:2494)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl0(CasualDiff.java:5787)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl(CasualDiff.java:5603)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5530)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5501)
	at org.netbeans.modules.java.source.save.CasualDiff.diffExec(CasualDiff.java:2385)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl0(CasualDiff.java:5766)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl(CasualDiff.java:5603)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5530)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5501)
	at org.netbeans.modules.java.source.save.CasualDiff.diffList(CasualDiff.java:4314)
	at org.netbeans.modules.java.source.save.CasualDiff.diffBlock(CasualDiff.java:1805)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl0(CasualDiff.java:5727)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl(CasualDiff.java:5603)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5530)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5501)
	at org.netbeans.modules.java.source.save.CasualDiff.diffMethodDef(CasualDiff.java:1494)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl0(CasualDiff.java:5717)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl(CasualDiff.java:5603)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5530)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5501)
	at org.netbeans.modules.java.source.save.CasualDiff.diffList(CasualDiff.java:4314)
	at org.netbeans.modules.java.source.save.CasualDiff.diffClassDef(CasualDiff.java:1204)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl0(CasualDiff.java:5714)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl(CasualDiff.java:5603)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5530)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5501)
	at org.netbeans.modules.java.source.save.CasualDiff.diffList(CasualDiff.java:4314)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTopLevel(CasualDiff.java:602)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl0(CasualDiff.java:5684)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTreeImpl(CasualDiff.java:5603)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5530)
	at org.netbeans.modules.java.source.save.CasualDiff.diffTree(CasualDiff.java:5513)
	at org.netbeans.modules.java.source.save.CasualDiff.diff(CasualDiff.java:358)
	at org.netbeans.api.java.source.WorkingCopy.processCurrentCompilationUnit(WorkingCopy.java:889)
	at org.netbeans.api.java.source.WorkingCopy.getChanges(WorkingCopy.java:1304)
	at org.netbeans.api.java.source.JavaSource$1.run(JavaSource.java:672)
	at org.netbeans.api.java.source.JavaSource$1.run(JavaSource.java:661)
	at org.netbeans.api.java.source.JavaSource$MultiTask.run(JavaSource.java:504)
	at org.netbeans.modules.parsing.impl.TaskProcessor.callUserTask(TaskProcessor.java:586)
	at org.netbeans.modules.parsing.api.ParserManager$MultiUserTaskAction.run(ParserManager.java:235)
	at org.netbeans.modules.parsing.api.ParserManager$MultiUserTaskAction.run(ParserManager.java:205)
	at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:181)
	at org.netbeans.modules.parsing.impl.TaskProcessor$2.call(TaskProcessor.java:178)
	at org.netbeans.modules.masterfs.filebasedfs.utils.FileChangedManager.priorityIO(FileChangedManager.java:153)
	at org.netbeans.modules.masterfs.providers.ProvidedExtensions.priorityIO(ProvidedExtensions.java:341)
	at org.netbeans.modules.parsing.nb.DataObjectEnvFactory.runPriorityIO(DataObjectEnvFactory.java:118)
	at org.netbeans.modules.parsing.impl.Utilities.runPriorityIO(Utilities.java:67)
	at org.netbeans.modules.parsing.impl.TaskProcessor.runUserTask(TaskProcessor.java:178)
	at org.netbeans.modules.parsing.api.ParserManager.parse(ParserManager.java:85)
	at org.netbeans.api.java.source.JavaSource.runUserActionTaskImpl(JavaSource.java:454)
	at org.netbeans.api.java.source.JavaSource.runUserActionTask(JavaSource.java:425)
	at org.netbeans.api.java.source.JavaSource.runModificationTask(JavaSource.java:680)
	at org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin.processFiles(JavaRefactoringPlugin.java:325)
	at org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin.processFiles(JavaRefactoringPlugin.java:264)
	at org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin.processFiles(JavaRefactoringPlugin.java:246)
	at org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin.createAndAddElements(JavaRefactoringPlugin.java:340)
	at org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin.createAndAddElements(JavaRefactoringPlugin.java:356)
	at org.netbeans.modules.refactoring.java.plugins.RenameRefactoringPlugin.prepare(RenameRefactoringPlugin.java:613)
[catch] at org.netbeans.modules.refactoring.api.AbstractRefactoring.pluginsPrepare2(AbstractRefactoring.java:417)
	at org.netbeans.modules.refactoring.api.AbstractRefactoring.pluginsPrepare(AbstractRefactoring.java:401)
	at org.netbeans.modules.refactoring.api.AbstractRefactoring.prepare(AbstractRefactoring.java:212)
	at org.netbeans.modules.refactoring.spi.impl.ParametersPanel$Prepare.run(ParametersPanel.java:1063)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1370)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:287)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1981)
Language / Project Type / NetBeans Component

No response

How to reproduce

Rename a class that has a reference using the pattern matching instanceof

Did this work correctly in an earlier version?

No / Don't know

Operating System

Ubuntu 22.04

JDK

JDK 26.0.2

Apache NetBeans packaging

Community provided installer

Anything else

Always i would say

Are you willing to submit a pull request?

No

主要语言
Java
星标
3.1k
派生
939
平均合并
5 天 12 小时
30 天内合并 PR
23

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

apache/netbeans 的其他 Issue

查看 apache/netbeans 的全部 Issue

相似的 Issue

更多 Java Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。