PsiClassNamePatternCondition now exposes used stringPattern

to be able to test if pattern is applyable without obtaining a `PsiClass`
This commit is contained in:
Nicolay Mitropolsky
2017-09-01 10:08:36 +03:00
parent 04f79710eb
commit da0002ba0f
2 changed files with 16 additions and 19 deletions
@@ -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<PsiClass> {
abstract public class PsiClassNamePatternCondition extends PatternCondition<PsiClass> {
private final ElementPattern<String> stringPattern;
public static PsiClassNamePatternCondition accepting(BiPredicate<String, ProcessingContext> condition) {
return new PsiClassNamePatternCondition() {
@Override
public boolean accepts(String qualifiedName, ProcessingContext context) {
return condition.test(qualifiedName, context);
}
};
public PsiClassNamePatternCondition(ElementPattern<String> pattern) {
this("withQualifiedName", pattern);
}
public PsiClassNamePatternCondition() {
this("withQualifiedName");
}
public PsiClassNamePatternCondition(@Nullable String debugMethodName) {
public PsiClassNamePatternCondition(@Nullable String debugMethodName, ElementPattern<String> 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<String> getStringPattern() {
return stringPattern;
}
}
@@ -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<PsiClass, PsiClassPattern>
}
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<String> qname) {
return with(PsiClassNamePatternCondition.accepting((qualifiedName, context) -> qname.accepts(qualifiedName, context)));
return with(new PsiClassNamePatternCondition(qname));
}
}