From c72d922ffa87488204e39dc4a66d949c6bfe4182 Mon Sep 17 00:00:00 2001 From: Rob Stryker Date: Wed, 23 Oct 2024 11:27:56 -0400 Subject: [PATCH] Streamline search visitor by using existing utility methods and lambda Signed-off-by: Rob Stryker --- .../core/search/matching/DOMASTNodeUtils.java | 2 +- .../matching/PatternLocatorVisitor.java | 108 +++++------------- 2 files changed, 28 insertions(+), 82 deletions(-) diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/DOMASTNodeUtils.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/DOMASTNodeUtils.java index 19b1038686c..20151a0ade1 100644 --- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/DOMASTNodeUtils.java +++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/DOMASTNodeUtils.java @@ -62,7 +62,7 @@ private static IJavaElement findElementForNodeViaDirectBinding(ASTNode key) { return Optional.ofNullable(key).map(DOMASTNodeUtils::getBinding).map(IBinding::getJavaElement).orElse(null); } - private static IBinding getBinding(ASTNode astNode) { + public static IBinding getBinding(ASTNode astNode) { if (astNode instanceof Name name) { return name.resolveBinding(); } diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PatternLocatorVisitor.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PatternLocatorVisitor.java index 9a71c2b49d7..38b1f782728 100644 --- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PatternLocatorVisitor.java +++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/matching/PatternLocatorVisitor.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.jdt.internal.core.search.matching; +import java.util.function.Function; import org.eclipse.jdt.core.dom.*; /** @@ -28,69 +29,49 @@ public PatternLocatorVisitor(PatternLocator patternLocator, MatchingNodeSet node this.locator = locator; } - @Override - public boolean visit(AnnotationTypeDeclaration node) { + private boolean defaultVisitImplementation(ASTNode node) { + return defaultVisitImplementationWithFunc(node, DOMASTNodeUtils::getBinding); + } + + private boolean defaultVisitImplementationWithFunc(ASTNode node, Function func) { int level = this.patternLocator.match(node, this.nodeSet, this.locator); if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveBinding(), this.locator); + level = this.patternLocator.resolveLevel(func.apply(node), this.locator); } this.nodeSet.addMatch(node, level); return true; + + } + + + @Override + public boolean visit(AnnotationTypeDeclaration node) { + return defaultVisitImplementation(node); } @Override public boolean visit(MethodDeclaration node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(MethodInvocation node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveMethodBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(ExpressionMethodReference node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveMethodBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(SuperMethodReference node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveMethodBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(SuperMethodInvocation node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveMethodBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } private boolean visitAbstractTypeDeclaration(AbstractTypeDeclaration node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(EnumDeclaration node) { @@ -106,21 +87,11 @@ public boolean visit(RecordDeclaration node) { } @Override public boolean visit(AnonymousClassDeclaration node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } private boolean visitType(Type node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(SimpleType type) { @@ -158,30 +129,15 @@ public boolean visit(UnionType node) { } @Override public boolean visit(ClassInstanceCreation node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveConstructorBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(CreationReference node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveMethodBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(SuperConstructorInvocation node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveConstructorBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(SimpleName node) { @@ -203,21 +159,11 @@ public boolean visit(SimpleName node) { } @Override public boolean visit(VariableDeclarationFragment node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(SingleVariableDeclaration node) { - int level = this.patternLocator.match(node, this.nodeSet, this.locator); - if ((level & PatternLocator.MATCH_LEVEL_MASK) == PatternLocator.POSSIBLE_MATCH && (this.nodeSet.mustResolve || this.patternLocator.mustResolve)) { - level = this.patternLocator.resolveLevel(node.resolveBinding(), this.locator); - } - this.nodeSet.addMatch(node, level); - return true; + return defaultVisitImplementation(node); } @Override public boolean visit(EnumConstantDeclaration node) {