Skip to content

Commit 9f0148b

Browse files
Rob Strykerrobstryker
authored andcommitted
[DOM Search] check current package for non-imported missing types
Signed-off-by: Rob Stryker <[email protected]>
1 parent 786f292 commit 9f0148b

File tree

3 files changed

+28
-0
lines changed

3 files changed

+28
-0
lines changed

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,16 @@ public static IBinding findBindingForType(ASTNode node, String signature) {
1919
}
2020
return ret1;
2121
}
22+
23+
public static IBinding findUnresolvedBindingForType(ASTNode node, String signature) {
24+
JavacBindingResolver jcbr = getJavacBindingResolverOrNull(node);
25+
IBinding ret1 = jcbr instanceof JavacBindingResolver br2 ? br2.findBinding(signature) : null;
26+
if( ret1 == null ) {
27+
String sig2 = signature.replaceAll("\\.", "/");
28+
ret1 = jcbr instanceof JavacBindingResolver br2 ? br2.findUnresolvedBinding(sig2) : null;
29+
}
30+
return ret1;
31+
}
32+
2233

2334
}

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/core/search/PatternLocatorVisitor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import org.eclipse.jdt.core.dom.MethodInvocation;
3434
import org.eclipse.jdt.core.dom.Name;
3535
import org.eclipse.jdt.core.dom.NameQualifiedType;
36+
import org.eclipse.jdt.core.dom.PackageDeclaration;
3637
import org.eclipse.jdt.core.dom.ParameterizedType;
3738
import org.eclipse.jdt.core.dom.QualifiedName;
3839
import org.eclipse.jdt.core.dom.QualifiedType;
@@ -303,4 +304,11 @@ public boolean visit(ImportDeclaration node) {
303304
defaultVisitImplementation(node, (x,y) -> y.match(node, this.nodeSet, this.locator));
304305
return true;
305306
}
307+
308+
@Override
309+
public boolean visit(PackageDeclaration node) {
310+
defaultVisitImplementation(node, (x,y) -> y.match(node, this.nodeSet, this.locator));
311+
return true;
312+
}
313+
306314
}

org.eclipse.jdt.core.javac/src/org/eclipse/jdt/internal/core/search/matching/DOMTypeReferenceLocator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public class DOMTypeReferenceLocator extends DOMPatternLocator {
6060
private List<IJavaElement> foundElements = new ArrayList<>();
6161
private Set<org.eclipse.jdt.core.dom.Name> imports = new HashSet<>();
6262
private MatchLocator matchLocator = null;
63+
private String packageName;
6364

6465
public DOMTypeReferenceLocator(TypeReferenceLocator locator) {
6566
super(locator.pattern);
@@ -147,6 +148,9 @@ public LocatorResponse match(org.eclipse.jdt.core.dom.ASTNode node, NodeSetWrapp
147148
Name n = id.getName();
148149
imports.add(n);
149150
}
151+
if( node instanceof PackageDeclaration pd) {
152+
this.packageName = pd.getName().toString();
153+
}
150154
return toResponse(IMPOSSIBLE_MATCH);
151155
}
152156

@@ -213,6 +217,11 @@ public LocatorResponse match(Type node, NodeSetWrapper nodeSet, MatchLocator loc
213217
r1 = matchTypeNodeReturnComponent(node, patternQualifiedString, fqqn, defaultLevel);
214218
if( r1 != null ) return r1;
215219
}
220+
if( this.packageName != null ) {
221+
String fqqn = this.packageName + "." + qualifiedNameFromNode;
222+
r1 = matchTypeNodeReturnComponent(node, patternQualifiedString, fqqn, defaultLevel);
223+
if( r1 != null ) return r1;
224+
}
216225
} else {
217226
String[] qualifiedNameFromNodeSegments = qualifiedNameFromNode.split("\\.");
218227
String[] qualifiedNamePatternSegments = patternQualifiedString.split("\\.");

0 commit comments

Comments
 (0)