apache / apache/netbeans

ConcurrentModificationException: Caller uses obsolete token sequence which is no longer valid.

Open
#4,192 2 comments 0 reactions 0 assignees View on GitHub
Editor Java kind:bug
Dominant language
Java
Stars
3.1k
Forks
935
Avg merge
2d 3h
Merged PRs (30d)
17

Description

### Apache NetBeans version

Apache NetBeans latest daily build

### What happened

I got the following exception in NB 14 (RC6)

```
java.util.ConcurrentModificationException: Caller uses obsolete token sequence which is no longer valid. Underlying token hierarchy has been modified by insertion or removal or a custom language embedding was created.TS.modCount=4602, tokenList.modCount()=4603, rootModCount=4603
Please report a bug against a module that calls lexer's code e.g. java, php etc. but not the lexer module itself.
at org.netbeans.api.lexer.TokenSequence.checkValid(TokenSequence.java:784)
at org.netbeans.api.lexer.TokenSequence.moveIndex(TokenSequence.java:568)
at org.netbeans.modules.java.editor.base.semantic.TokenList.resetToIndex(TokenList.java:372)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.visitExpressionStatement(SemanticHighlighterBase.java:752)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.visitExpressionStatement(SemanticHighlighterBase.java:270)
at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1592)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:69)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.scan(SemanticHighlighterBase.java:1006)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.scan(SemanticHighlighterBase.java:270)
at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
at com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:78)
at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:272)
at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1103)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:69)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.scan(SemanticHighlighterBase.java:1006)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.visitMethod(SemanticHighlighterBase.java:826)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.visitMethod(SemanticHighlighterBase.java:270)
at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:953)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:69)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.scan(SemanticHighlighterBase.java:1006)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.scan(SemanticHighlighterBase.java:270)
at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:96)
at com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:78)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.visitClass(SemanticHighlighterBase.java:934)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.visitClass(SemanticHighlighterBase.java:270)
at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:860)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:69)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.scan(SemanticHighlighterBase.java:1006)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.scan(SemanticHighlighterBase.java:270)
at com.sun.source.util.TreeScanner.scan(TreeScanner.java:111)
at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:78)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.visitCompilationUnit(SemanticHighlighterBase.java:551)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.visitCompilationUnit(SemanticHighlighterBase.java:270)
at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:614)
at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:86)
at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:69)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase$DetectorVisitor.scan(SemanticHighlighterBase.java:1006)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase.process(SemanticHighlighterBase.java:156)
at org.netbeans.modules.java.editor.semantic.SemanticHighlighter.process(SemanticHighlighter.java:56)
at org.netbeans.modules.java.editor.base.semantic.SemanticHighlighterBase.run(SemanticHighlighterBase.java:112)
at org.netbeans.modules.parsing.impl.TaskProcessor.callParserResultTask(TaskProcessor.java:561)
[catch] at org.netbeans.modules.parsing.impl.TaskProcessor$RequestPerformer.run(TaskProcessor.java:786)
at org.openide.util.lookup.Lookups.executeWith(Lookups.java:279)
at org.netbeans.modules.parsing.impl.TaskProcessor$RequestPerformer.execute(TaskProcessor.java:702)
at org.netbeans.modules.parsing.impl.TaskProcessor$CompilationJob.run(TaskProcessor.java:663)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1418)
at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:45)
at org.openide.util.lookup.Lookups.executeWith(Lookups.java:278)
at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2033)
```

### How to reproduce

Difficult to say :-(

### Did this work correctly in an earlier version?

No

### Operating System

Windows 10

### JDK

OpenJDK Runtime Environment 11.0.15+9-LTS

### Apache NetBeans packaging

Apache NetBeans binary zip

### Anything else

_No response_

### Are you willing to submit a pull request?

Yes

### Code of Conduct

Yes

Contributor guide

Open the contributing guide

Research direction

Start with SemanticHighlighterBase.java and its DetectorVisitor.visitExpressionStatement stack entry, then inspect TokenList.java resetToIndex and TokenSequence.java checkValid. Investigate how semantic highlighting encounters the obsolete token sequence; done means the reported exception no longer occurs during the affected Java editor processing, with a reproducible scenario or regression coverage if one can be established.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
devtools
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.