Skip to content

Commit ce1a2cf

Browse files
mickaelistriaRob Stryker
authored andcommitted
Empower JavacBindingResolver.resolveWellKnownType
Make it capable of resolving *any* type visible to this build.
1 parent 18d70c9 commit ce1a2cf

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

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

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,21 @@
4848
import com.sun.tools.javac.api.JavacTaskImpl;
4949
import com.sun.tools.javac.api.JavacTrees;
5050
import com.sun.tools.javac.code.Attribute;
51-
import com.sun.tools.javac.code.Attribute.Compound;
51+
import com.sun.tools.javac.code.ClassFinder;
5252
import com.sun.tools.javac.code.Symbol;
53+
import com.sun.tools.javac.code.Symtab;
54+
import com.sun.tools.javac.code.TypeTag;
55+
import com.sun.tools.javac.code.Types;
56+
import com.sun.tools.javac.code.Attribute.Compound;
5357
import com.sun.tools.javac.code.Symbol.ClassSymbol;
58+
import com.sun.tools.javac.code.Symbol.CompletionFailure;
5459
import com.sun.tools.javac.code.Symbol.MethodSymbol;
5560
import com.sun.tools.javac.code.Symbol.ModuleSymbol;
5661
import com.sun.tools.javac.code.Symbol.PackageSymbol;
5762
import com.sun.tools.javac.code.Symbol.RootPackageSymbol;
5863
import com.sun.tools.javac.code.Symbol.TypeSymbol;
5964
import com.sun.tools.javac.code.Symbol.TypeVariableSymbol;
6065
import com.sun.tools.javac.code.Symbol.VarSymbol;
61-
import com.sun.tools.javac.code.Symtab;
6266
import com.sun.tools.javac.code.Type.ArrayType;
6367
import com.sun.tools.javac.code.Type.ClassType;
6468
import com.sun.tools.javac.code.Type.ErrorType;
@@ -71,9 +75,9 @@
7175
import com.sun.tools.javac.code.Type.PackageType;
7276
import com.sun.tools.javac.code.Type.TypeVar;
7377
import com.sun.tools.javac.code.Type.UnknownType;
74-
import com.sun.tools.javac.code.TypeTag;
75-
import com.sun.tools.javac.code.Types;
78+
import com.sun.tools.javac.comp.Modules;
7679
import com.sun.tools.javac.tree.JCTree;
80+
import com.sun.tools.javac.tree.TreeInfo;
7781
import com.sun.tools.javac.tree.JCTree.JCAnnotatedType;
7882
import com.sun.tools.javac.tree.JCTree.JCAnnotation;
7983
import com.sun.tools.javac.tree.JCTree.JCArrayTypeTree;
@@ -98,7 +102,6 @@
98102
import com.sun.tools.javac.tree.JCTree.JCTypeParameter;
99103
import com.sun.tools.javac.tree.JCTree.JCVariableDecl;
100104
import com.sun.tools.javac.tree.JCTree.JCWildcard;
101-
import com.sun.tools.javac.tree.TreeInfo;
102105
import com.sun.tools.javac.util.Context;
103106
import com.sun.tools.javac.util.Names;
104107

@@ -1621,9 +1624,21 @@ public ITypeBinding resolveWellKnownType(String typeName) {
16211624
default -> null;
16221625
};
16231626
if (type == null) {
1624-
return null;
1627+
ClassFinder finder = ClassFinder.instance(context);
1628+
Modules modules = Modules.instance(context);
1629+
Names names = Names.instance(context);
1630+
if (finder != null && modules != null && names != null) {
1631+
try {
1632+
ClassSymbol sym = finder.loadClass(modules.getDefaultModule(), names.fromString(typeName));
1633+
if (sym != null) {
1634+
type = sym.type;
1635+
}
1636+
} catch (CompletionFailure failure) {
1637+
// do nothing, class not found
1638+
}
1639+
}
16251640
}
1626-
return this.bindings.getTypeBinding(type, true);
1641+
return type != null ? this.bindings.getTypeBinding(type, true) : null;
16271642
}
16281643

16291644
@Override

0 commit comments

Comments
 (0)