google / google/error-prone

2.5.1 - RestrictedApiChecker - NoSuchElementException (superclassConstructorSymbol)

Open
#2,152 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
7.2k
Forks
820
Avg merge
5h 9m
Merged PRs (30d)
50

Description

### Description of the problem / feature request:

Updated from 2.4.0 to 2.5.1 for Java 16 compatibility, faced this regression;

```
[javac] C:\SVN\josm\core\src\org\openstreetmap\josm\gui\conflict\pair\relation\RelationMemberListMergeModel.java:37: error: An unhandled exception was thrown by the Error Prone static analysis plugin.
[javac] mergedEntriesTableModel = this.new EntriesTableModel(ListRole.MERGED_ENTRIES) {
[javac] ^
[javac] Please report this at https://github.com/google/error-prone/issues/new and include the following:
[javac]
[javac] error-prone version: 2.5.1
[javac] BugPattern: RestrictedApiChecker
[javac] Stack Trace:
[javac] java.util.NoSuchElementException
[javac] at com.sun.tools.javac.code.Scope$ScopeImpl$1.next(Scope.java:592)
[javac] at com.sun.tools.javac.code.Scope$ScopeImpl$1.next(Scope.java:572)
[javac] at com.google.common.collect.Iterators.getOnlyElement(Iterators.java:301)
[javac] at com.google.common.collect.Iterables.getOnlyElement(Iterables.java:254)
[javac] at com.google.errorprone.bugpatterns.RestrictedApiChecker.superclassConstructorSymbol(RestrictedApiChecker.java:138)
[javac] at com.google.errorprone.bugpatterns.RestrictedApiChecker.matchNewClass(RestrictedApiChecker.java:152)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.processMatchers(ErrorProneScanner.java:450)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitNewClass(ErrorProneScanner.java:774)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitNewClass(ErrorProneScanner.java:151)
[javac] at com.sun.tools.javac.tree.JCTree$JCNewClass.accept(JCTree.java:1705)
[javac] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac] at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[javac] at com.sun.source.util.TreeScanner.visitAssignment(TreeScanner.java:585)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitAssignment(ErrorProneScanner.java:507)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitAssignment(ErrorProneScanner.java:151)
[javac] at com.sun.tools.javac.tree.JCTree$JCAssign.accept(JCTree.java:1878)
[javac] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac] at com.sun.source.util.TreeScanner.visitExpressionStatement(TreeScanner.java:433)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:634)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitExpressionStatement(ErrorProneScanner.java:151)
[javac] at com.sun.tools.javac.tree.JCTree$JCExpressionStatement.accept(JCTree.java:1454)
[javac] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac] at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[javac] at com.sun.source.util.TreeScanner.visitBlock(TreeScanner.java:248)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:521)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitBlock(ErrorProneScanner.java:151)
[javac] at com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1026)
[javac] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac] at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[javac] at com.sun.source.util.TreeScanner.visitMethod(TreeScanner.java:206)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:741)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitMethod(ErrorProneScanner.java:151)
[javac] at com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:898)
[javac] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac] at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:90)
[javac] at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[javac] at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
[javac] at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:187)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:549)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitClass(ErrorProneScanner.java:151)
[javac] at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:808)
[javac] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:82)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:74)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:48)
[javac] at com.sun.source.util.TreeScanner.scan(TreeScanner.java:105)
[javac] at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:113)
[javac] at com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:144)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:561)
[javac] at com.google.errorprone.scanner.ErrorProneScanner.visitCompilationUnit(ErrorProneScanner.java:151)
[javac] at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:591)
[javac] at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:56)
[javac] at com.google.errorprone.scanner.Scanner.scan(Scanner.java:58)
[javac] at com.google.errorprone.scanner.ErrorProneScannerTransformer.apply(ErrorProneScannerTransformer.java:43)
[javac] at com.google.errorprone.ErrorProneAnalyzer.finished(ErrorProneAnalyzer.java:152)
[javac] at com.sun.tools.javac.api.MultiTaskListener.finished(MultiTaskListener.java:120)
[javac] at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1404)
[javac] at com.sun.tools.javac.main.JavaCompiler.flow(JavaCompiler.java:1353)
[javac] at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:946)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:302)
[javac] at com.sun.tools.javac.main.Main.compile(Main.java:162)
[javac] at com.sun.tools.javac.Main.compile(Main.java:57)
[javac] at com.sun.tools.javac.Main.main(Main.java:43)
```

### Bugs: what's the simplest, easiest way to reproduce this bug? Please provide a minimal example if possible.

The class which fails:

```java
public class RelationMemberListMergeModel extends AbstractListMergeModel {
// ...
@Override
protected void buildMergedEntriesTableModel() {
mergedEntriesTableModel = this.new EntriesTableModel(ListRole.MERGED_ENTRIES) { // crash here
@Override
public boolean isCellEditable(int row, int column) {
switch(column) {
case 1: return true;
default: return false;
}
}
};
}
// ...
}
```

Super class with nested class:
```java
public abstract class AbstractListMergeModel extends ChangeNotifier {
// ...
protected EntriesTableModel myEntriesTableModel;
protected EntriesTableModel theirEntriesTableModel;
protected EntriesTableModel mergedEntriesTableModel;
// ...
public class EntriesTableModel extends DefaultTableModel implements OsmPrimitivesTableModel {
private final ListRole role;
public EntriesTableModel(ListRole role) {
this.role = role;
}
// ...
}
// ...
}
```

### What version of Error Prone are you using?

2.5.1

### Have you found anything relevant by searching the web?

Similar to #2099?

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.