Skip to content

Commit 4655018

Browse files
mickaelistriadatho7561
authored andcommitted
Better support for searching MemberValuePair
1 parent 0150f9e commit 4655018

File tree

4 files changed

+39
-8
lines changed

4 files changed

+39
-8
lines changed

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.eclipse.jdt.core.dom.ASTParser;
4545
import org.eclipse.jdt.core.dom.ASTRequestor;
4646
import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
47+
import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration;
4748
import org.eclipse.jdt.core.dom.ClassInstanceCreation;
4849
import org.eclipse.jdt.core.dom.ConstructorInvocation;
4950
import org.eclipse.jdt.core.dom.CreationReference;
@@ -241,7 +242,7 @@ private SearchMatch toMatch(MatchLocator locator, org.eclipse.jdt.core.dom.ASTNo
241242
private SearchMatch toCoreMatch(MatchLocator locator, org.eclipse.jdt.core.dom.ASTNode node, int accuracy, PossibleMatch possibleMatch) {
242243
IResource resource = possibleMatch.resource;
243244
if (node instanceof MethodDeclaration || node instanceof AbstractTypeDeclaration
244-
|| node instanceof VariableDeclaration) {
245+
|| node instanceof VariableDeclaration || node instanceof AnnotationTypeMemberDeclaration) {
245246
IJavaElement javaElement = DOMASTNodeUtils.getDeclaringJavaElement(node);
246247
if (javaElement != null) {
247248
ISourceRange range = new SourceRange(node.getStartPosition(), node.getLength());

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import org.eclipse.jdt.core.dom.ASTVisitor;
2020
import org.eclipse.jdt.core.dom.AbstractTypeDeclaration;
2121
import org.eclipse.jdt.core.dom.AnnotationTypeDeclaration;
22+
import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration;
2223
import org.eclipse.jdt.core.dom.AnonymousClassDeclaration;
2324
import org.eclipse.jdt.core.dom.ClassInstanceCreation;
2425
import org.eclipse.jdt.core.dom.ConstructorInvocation;
@@ -123,6 +124,10 @@ public boolean visit(MethodDeclaration node) {
123124
return defaultVisitImplementation(node, (x,y) -> y.match(node, this.nodeSet, this.locator));
124125
}
125126
@Override
127+
public boolean visit(AnnotationTypeMemberDeclaration node) {
128+
return defaultVisitImplementation(node, (x,y) -> y.match(node, this.nodeSet, this.locator));
129+
}
130+
@Override
126131
public boolean visit(MethodInvocation node) {
127132
return defaultVisitImplementation(node, (x,y) -> y.match(node, this.nodeSet, this.locator));
128133
}

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

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@
2020
import org.eclipse.jdt.core.compiler.CharOperation;
2121
import org.eclipse.jdt.core.dom.AST;
2222
import org.eclipse.jdt.core.dom.ASTNode;
23+
import org.eclipse.jdt.core.dom.Annotation;
24+
import org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration;
2325
import org.eclipse.jdt.core.dom.Expression;
2426
import org.eclipse.jdt.core.dom.IBinding;
25-
import org.eclipse.jdt.core.dom.IMemberValuePairBinding;
2627
import org.eclipse.jdt.core.dom.IMethodBinding;
2728
import org.eclipse.jdt.core.dom.ITypeBinding;
2829
import org.eclipse.jdt.core.dom.IVariableBinding;
@@ -33,6 +34,7 @@
3334
import org.eclipse.jdt.core.dom.Modifier;
3435
import org.eclipse.jdt.core.dom.Name;
3536
import org.eclipse.jdt.core.dom.SimpleName;
37+
import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
3638
import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
3739
import org.eclipse.jdt.core.dom.SuperMethodInvocation;
3840
import org.eclipse.jdt.core.search.SearchPattern;
@@ -118,7 +120,21 @@ public LocatorResponse match(org.eclipse.jdt.core.dom.MethodDeclaration node, No
118120
int level = nodeSet.addMatch(node, resolve ? POSSIBLE_MATCH : ACCURATE_MATCH);
119121
return toResponse(level, true);
120122
}
121-
private int matchReference(SimpleName name, List<?> args, NodeSetWrapper nodeSet) {
123+
124+
@Override
125+
public LocatorResponse match(AnnotationTypeMemberDeclaration node, NodeSetWrapper nodeSet, MatchLocator locator) {
126+
return toResponse(this.locator.pattern.findDeclarations && this.locator.matchesName(this.locator.pattern.selector, node.getName().getIdentifier().toCharArray()) ?
127+
POSSIBLE_MATCH : IMPOSSIBLE_MATCH);
128+
}
129+
130+
@Override
131+
public LocatorResponse match(Annotation node, NodeSetWrapper nodeSet, MatchLocator locator) {
132+
return toResponse(this.locator.pattern.findReferences && node instanceof SingleMemberAnnotation singleMemberAnnot ?
133+
POSSIBLE_MATCH : IMPOSSIBLE_MATCH);
134+
}
135+
136+
137+
private int matchReference(SimpleName name, List<?> args) {
122138
if (!this.locator.pattern.findReferences) return IMPOSSIBLE_MATCH;
123139

124140
if (!this.locator.matchesName(this.locator.pattern.selector, name.getIdentifier().toCharArray())) return IMPOSSIBLE_MATCH;
@@ -131,14 +147,14 @@ private int matchReference(SimpleName name, List<?> args, NodeSetWrapper nodeSet
131147
}
132148
@Override
133149
public LocatorResponse match(MethodInvocation node, NodeSetWrapper nodeSet, MatchLocator locator) {
134-
int level = this.matchReference(node.getName(), node.arguments(), nodeSet);
150+
int level = this.matchReference(node.getName(), node.arguments());
135151
if( level == IMPOSSIBLE_MATCH )
136152
return toResponse(IMPOSSIBLE_MATCH);
137153
return toResponse(nodeSet.addMatch(node, level), true);
138154
}
139155
@Override
140156
public LocatorResponse match(org.eclipse.jdt.core.dom.Expression expression, NodeSetWrapper nodeSet, MatchLocator locator) {
141-
int level = expression instanceof SuperMethodInvocation node ? this.matchReference(node.getName(), node.arguments(), nodeSet) :
157+
int level = expression instanceof SuperMethodInvocation node ? this.matchReference(node.getName(), node.arguments()) :
142158
IMPOSSIBLE_MATCH;
143159
if( level == IMPOSSIBLE_MATCH)
144160
return toResponse(IMPOSSIBLE_MATCH);
@@ -156,9 +172,8 @@ public LocatorResponse match(Name node, NodeSetWrapper nodeSet, MatchLocator loc
156172

157173
if (node.getLocationInParent() == MemberValuePair.NAME_PROPERTY
158174
&& this.locator.pattern.parameterCount == 0
159-
&& node instanceof SimpleName simpleName
160-
&& matchesName(simpleName.getIdentifier().toCharArray(), this.locator.pattern.selector)) {
161-
return toResponse(POSSIBLE_MATCH);
175+
&& node instanceof SimpleName simpleName) {
176+
return toResponse(matchReference(simpleName, null));
162177
}
163178

164179
String name = node.toString();
@@ -478,6 +493,12 @@ public LocatorResponse resolveLevel(org.eclipse.jdt.core.dom.ASTNode node, IBind
478493
boolean isErasurePattern = isPatternErasureMatch();
479494
boolean isEquivPattern = isPatternEquivalentMatch();
480495

496+
if (node instanceof SingleMemberAnnotation singleMemberAnnotation) {
497+
var valuePairs = singleMemberAnnotation.resolveAnnotationBinding().getDeclaredMemberValuePairs();
498+
if (valuePairs != null && valuePairs.length > 0) {
499+
binding = valuePairs[0].getMethodBinding();
500+
}
501+
}
481502
if (binding instanceof IMethodBinding method) {
482503
boolean skipVerif = this.locator.pattern.findDeclarations && this.locator.mayBeGeneric;
483504
if (Objects.equals(binding.getJavaElement(), this.locator.pattern.focus)) {

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ public LocatorResponse match(org.eclipse.jdt.core.dom.MemberValuePair node, Node
9292
// each subtype should override if needed
9393
return toResponse(PatternLocator.IMPOSSIBLE_MATCH);
9494
}
95+
public LocatorResponse match(org.eclipse.jdt.core.dom.AnnotationTypeMemberDeclaration node, NodeSetWrapper nodeSet, MatchLocator locator) {
96+
// each subtype should override if needed
97+
return toResponse(PatternLocator.IMPOSSIBLE_MATCH);
98+
}
9599
public LocatorResponse match(MethodInvocation node, NodeSetWrapper nodeSet, MatchLocator locator) {
96100
// each subtype should override if needed
97101
return toResponse(PatternLocator.IMPOSSIBLE_MATCH);

0 commit comments

Comments
 (0)