From da0002ba0ff29ef2ff626adcf6ebc743b93a10a2 Mon Sep 17 00:00:00 2001 From: Nicolay Mitropolsky Date: Thu, 31 Aug 2017 20:17:15 +0300 Subject: [PATCH] `PsiClassNamePatternCondition` now exposes used `stringPattern` to be able to test if pattern is applyable without obtaining a `PsiClass` --- .../PsiClassNamePatternCondition.java | 29 ++++++++----------- .../intellij/patterns/PsiClassPattern.java | 6 ++-- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/java/java-psi-api/src/com/intellij/patterns/PsiClassNamePatternCondition.java b/java/java-psi-api/src/com/intellij/patterns/PsiClassNamePatternCondition.java index 82ebd88c7676..2d448ed0a132 100644 --- a/java/java-psi-api/src/com/intellij/patterns/PsiClassNamePatternCondition.java +++ b/java/java-psi-api/src/com/intellij/patterns/PsiClassNamePatternCondition.java @@ -20,31 +20,26 @@ import com.intellij.util.ProcessingContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.function.BiPredicate; +public class PsiClassNamePatternCondition extends PatternCondition { -abstract public class PsiClassNamePatternCondition extends PatternCondition { + private final ElementPattern stringPattern; - public static PsiClassNamePatternCondition accepting(BiPredicate condition) { - return new PsiClassNamePatternCondition() { - @Override - public boolean accepts(String qualifiedName, ProcessingContext context) { - return condition.test(qualifiedName, context); - } - }; + public PsiClassNamePatternCondition(ElementPattern pattern) { + this("withQualifiedName", pattern); } - public PsiClassNamePatternCondition() { - this("withQualifiedName"); - } - - public PsiClassNamePatternCondition(@Nullable String debugMethodName) { + public PsiClassNamePatternCondition(@Nullable String debugMethodName, ElementPattern pattern) { super(debugMethodName); + stringPattern = pattern; } @Override - public final boolean accepts(@NotNull PsiClass aClass, ProcessingContext context) { - return accepts(aClass.getQualifiedName(), context); + public boolean accepts(@NotNull PsiClass aClass, ProcessingContext context) { + return stringPattern.accepts(aClass.getQualifiedName(), context); } - public abstract boolean accepts(String qualifiedName, ProcessingContext context); + @SuppressWarnings("unused") //Used in Kotlin + public ElementPattern getStringPattern() { + return stringPattern; + } } diff --git a/java/java-psi-api/src/com/intellij/patterns/PsiClassPattern.java b/java/java-psi-api/src/com/intellij/patterns/PsiClassPattern.java index 39cf2ba477fa..482a1a75a2fa 100644 --- a/java/java-psi-api/src/com/intellij/patterns/PsiClassPattern.java +++ b/java/java-psi-api/src/com/intellij/patterns/PsiClassPattern.java @@ -21,6 +21,8 @@ import com.intellij.util.ProcessingContext; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; +import static com.intellij.patterns.StandardPatterns.string; + /** * @author peter */ @@ -102,10 +104,10 @@ public class PsiClassPattern extends PsiMemberPattern } public PsiClassPattern withQualifiedName(@NonNls @NotNull final String qname) { - return with(PsiClassNamePatternCondition.accepting((qualifiedName, context) -> qname.equals(qualifiedName))); + return with(new PsiClassNamePatternCondition(string().equalTo(qname))); } public PsiClassPattern withQualifiedName(@NonNls @NotNull final ElementPattern qname) { - return with(PsiClassNamePatternCondition.accepting((qualifiedName, context) -> qname.accepts(qualifiedName, context))); + return with(new PsiClassNamePatternCondition(qname)); } }