diff --git a/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacBindingResolver.java b/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacBindingResolver.java index dcd4b02b641..1c4a64a8dad 100644 --- a/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacBindingResolver.java +++ b/org.eclipse.jdt.core.javac/src/org/eclipse/jdt/core/dom/JavacBindingResolver.java @@ -47,11 +47,8 @@ import com.sun.tools.javac.api.JavacTaskImpl; import com.sun.tools.javac.api.JavacTrees; import com.sun.tools.javac.code.Attribute; -import com.sun.tools.javac.code.Symbol; -import com.sun.tools.javac.code.Symtab; -import com.sun.tools.javac.code.TypeTag; -import com.sun.tools.javac.code.Types; import com.sun.tools.javac.code.Attribute.Compound; +import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Symbol.ClassSymbol; import com.sun.tools.javac.code.Symbol.MethodSymbol; import com.sun.tools.javac.code.Symbol.ModuleSymbol; @@ -60,6 +57,7 @@ import com.sun.tools.javac.code.Symbol.TypeSymbol; import com.sun.tools.javac.code.Symbol.TypeVariableSymbol; import com.sun.tools.javac.code.Symbol.VarSymbol; +import com.sun.tools.javac.code.Symtab; import com.sun.tools.javac.code.Type.ArrayType; import com.sun.tools.javac.code.Type.ClassType; import com.sun.tools.javac.code.Type.ErrorType; @@ -71,8 +69,9 @@ import com.sun.tools.javac.code.Type.ModuleType; import com.sun.tools.javac.code.Type.PackageType; import com.sun.tools.javac.code.Type.TypeVar; +import com.sun.tools.javac.code.TypeTag; +import com.sun.tools.javac.code.Types; import com.sun.tools.javac.tree.JCTree; -import com.sun.tools.javac.tree.TreeInfo; import com.sun.tools.javac.tree.JCTree.JCAnnotatedType; import com.sun.tools.javac.tree.JCTree.JCAnnotation; import com.sun.tools.javac.tree.JCTree.JCArrayTypeTree; @@ -96,6 +95,7 @@ import com.sun.tools.javac.tree.JCTree.JCTypeParameter; import com.sun.tools.javac.tree.JCTree.JCVariableDecl; import com.sun.tools.javac.tree.JCTree.JCWildcard; +import com.sun.tools.javac.tree.TreeInfo; import com.sun.tools.javac.util.Context; /** @@ -1422,6 +1422,17 @@ public Types getTypes() { return Types.instance(this.context); } + @Override + ITypeBinding getTypeBinding(org.eclipse.jdt.internal.compiler.lookup.TypeBinding referenceBinding) { + char[] sig = referenceBinding.signature(); + IBinding b = this.bindings.getBinding(new String(sig)); + if( b instanceof ITypeBinding itb) { + return itb; + } + return null; + } + + private java.util.List getTypeArguments(final Name name) { if (name.getParent() instanceof SimpleType simpleType) { return getTypeArguments(simpleType); diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/DOMCompletionEngine.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/DOMCompletionEngine.java index 42b47aa3e2e..7002a58ddd0 100644 --- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/DOMCompletionEngine.java +++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/DOMCompletionEngine.java @@ -1208,25 +1208,28 @@ private void processMembers(ITypeBinding typeBinding, Bindings scope, } private static boolean findInSupers(ITypeBinding root, ITypeBinding toFind) { - String keyToFind = toFind.getErasure().getKey(); - Queue toCheck = new LinkedList<>(); - Set alreadyChecked = new HashSet<>(); - toCheck.add(root.getErasure()); - while (!toCheck.isEmpty()) { - ITypeBinding current = toCheck.poll(); - String currentKey = current.getErasure().getKey(); - if (alreadyChecked.contains(currentKey)) { - continue; - } - alreadyChecked.add(currentKey); - if (currentKey.equals(keyToFind)) { - return true; - } - for (ITypeBinding superInterface : current.getInterfaces()) { - toCheck.add(superInterface); - } - if (current.getSuperclass() != null) { - toCheck.add(current.getSuperclass()); + ITypeBinding superFind = toFind.getErasure(); + if( superFind != null ) { + String keyToFind = superFind.getKey(); + Queue toCheck = new LinkedList<>(); + Set alreadyChecked = new HashSet<>(); + toCheck.add(root.getErasure()); + while (!toCheck.isEmpty()) { + ITypeBinding current = toCheck.poll(); + String currentKey = current.getErasure().getKey(); + if (alreadyChecked.contains(currentKey)) { + continue; + } + alreadyChecked.add(currentKey); + if (currentKey.equals(keyToFind)) { + return true; + } + for (ITypeBinding superInterface : current.getInterfaces()) { + toCheck.add(superInterface); + } + if (current.getSuperclass() != null) { + toCheck.add(current.getSuperclass()); + } } } return false;