Skip to content

Commit e435603

Browse files
committed
Do not fail on resolveBinding() when symbol has no matching .class
1 parent e6c9b17 commit e435603

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacBindingResolver.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,12 @@
4747
import com.sun.tools.javac.api.JavacTaskImpl;
4848
import com.sun.tools.javac.api.JavacTrees;
4949
import com.sun.tools.javac.code.Attribute;
50-
import com.sun.tools.javac.code.Attribute.Compound;
5150
import com.sun.tools.javac.code.ClassFinder;
5251
import com.sun.tools.javac.code.Symbol;
52+
import com.sun.tools.javac.code.Symtab;
53+
import com.sun.tools.javac.code.TypeTag;
54+
import com.sun.tools.javac.code.Types;
55+
import com.sun.tools.javac.code.Attribute.Compound;
5356
import com.sun.tools.javac.code.Symbol.ClassSymbol;
5457
import com.sun.tools.javac.code.Symbol.CompletionFailure;
5558
import com.sun.tools.javac.code.Symbol.MethodSymbol;
@@ -59,7 +62,6 @@
5962
import com.sun.tools.javac.code.Symbol.TypeSymbol;
6063
import com.sun.tools.javac.code.Symbol.TypeVariableSymbol;
6164
import com.sun.tools.javac.code.Symbol.VarSymbol;
62-
import com.sun.tools.javac.code.Symtab;
6365
import com.sun.tools.javac.code.Type.ArrayType;
6466
import com.sun.tools.javac.code.Type.ClassType;
6567
import com.sun.tools.javac.code.Type.ErrorType;
@@ -71,10 +73,9 @@
7173
import com.sun.tools.javac.code.Type.ModuleType;
7274
import com.sun.tools.javac.code.Type.PackageType;
7375
import com.sun.tools.javac.code.Type.TypeVar;
74-
import com.sun.tools.javac.code.TypeTag;
75-
import com.sun.tools.javac.code.Types;
7676
import com.sun.tools.javac.comp.Modules;
7777
import com.sun.tools.javac.tree.JCTree;
78+
import com.sun.tools.javac.tree.TreeInfo;
7879
import com.sun.tools.javac.tree.JCTree.JCAnnotatedType;
7980
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
8081
import com.sun.tools.javac.tree.JCTree.JCArrayTypeTree;
@@ -100,7 +101,6 @@
100101
import com.sun.tools.javac.tree.JCTree.JCTypeUnion;
101102
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
102103
import com.sun.tools.javac.tree.JCTree.JCWildcard;
103-
import com.sun.tools.javac.tree.TreeInfo;
104104
import com.sun.tools.javac.util.Context;
105105
import com.sun.tools.javac.util.Names;
106106

@@ -299,7 +299,8 @@ public JavacTypeBinding getTypeBinding(com.sun.tools.javac.code.Type type, com.s
299299
// no type information we could recover from
300300
return null;
301301
}
302-
if (!type.isParameterized() && !type.isRaw() && type instanceof ClassType classType
302+
if (!(type.tsym instanceof ClassSymbol sym && sym.classfile == null && sym.sourcefile == null)
303+
&& !type.isParameterized() && !type.isRaw() && type instanceof ClassType classType
303304
&& classType.interfaces_field == null) {
304305
// workaround faulty case of TypeMismatchQuickfixText.testMismatchingReturnTypeOnGenericMethod
305306
// interfaces/supertypes are not set which seem to imply that the compiler generated

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/javac/dom/JavacTypeBinding.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ public boolean isRecovered() {
176176
return getComponentType().isRecovered();
177177
}
178178
return this.typeSymbol.kind == Kinds.Kind.ERR ||
179+
(!type.isPrimitiveOrVoid() && this.typeSymbol instanceof ClassSymbol symbol && symbol.sourcefile == null && symbol.classfile == null) ||
179180
this.type.allparams().stream().anyMatch(param -> param.isErroneous()) ||
180181
(Object.class.getName().equals(this.typeSymbol.getQualifiedName().toString())
181182
&& getJavaElement() == null);

0 commit comments

Comments
 (0)