occupy less memory in jam patterns

This commit is contained in:
peter
2016-04-20 16:45:10 +02:00
parent be45aaf507
commit 428993f3d7
3 changed files with 25 additions and 4 deletions
@@ -16,15 +16,21 @@
package com.intellij.patterns;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiArrayInitializerMemberValue;
import com.intellij.psi.PsiElement;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import static com.intellij.patterns.PsiJavaPatterns.psiNameValuePair;
/**
* @author peter
*/
public class PsiAnnotationPattern extends PsiElementPattern<PsiAnnotation, PsiAnnotationPattern> {
protected PsiAnnotationPattern() {
static final PsiAnnotationPattern PSI_ANNOTATION_PATTERN = new PsiAnnotationPattern();
private PsiAnnotationPattern() {
super(PsiAnnotation.class);
}
@@ -38,4 +44,17 @@ public class PsiAnnotationPattern extends PsiElementPattern<PsiAnnotation, PsiAn
public PsiAnnotationPattern qName(@NonNls String qname) {
return qName(StandardPatterns.string().equalTo(qname));
}
public PsiAnnotationPattern insideAnnotationAttribute(@NotNull final String attributeName, @NotNull final ElementPattern<PsiAnnotation> parentAnnoPattern) {
return with(new PatternCondition<PsiAnnotation>("insideAnnotationAttribute") {
final PsiNameValuePairPattern attrPattern = psiNameValuePair().withName(attributeName).withSuperParent(2, parentAnnoPattern);
@Override
public boolean accepts(@NotNull PsiAnnotation annotation, ProcessingContext context) {
PsiElement attr = getParent(annotation);
if (attr instanceof PsiArrayInitializerMemberValue) attr = getParent(attr);
return attrPattern.accepts(attr);
}
});
}
}
@@ -144,11 +144,11 @@ public class PsiJavaPatterns extends StandardPatterns{
}
public static PsiAnnotationPattern psiAnnotation() {
return new PsiAnnotationPattern();
return PsiAnnotationPattern.PSI_ANNOTATION_PATTERN;
}
public static PsiNameValuePairPattern psiNameValuePair() {
return new PsiNameValuePairPattern();
return PsiNameValuePairPattern.NAME_VALUE_PAIR_PATTERN;
}
public static PsiTypePattern psiType() {
@@ -25,7 +25,9 @@ import org.jetbrains.annotations.NotNull;
* @author peter
*/
public class PsiNameValuePairPattern extends PsiElementPattern<PsiNameValuePair, PsiNameValuePairPattern> {
protected PsiNameValuePairPattern() {
static final PsiNameValuePairPattern NAME_VALUE_PAIR_PATTERN = new PsiNameValuePairPattern();
private PsiNameValuePairPattern() {
super(PsiNameValuePair.class);
}