Optimization: don't create new set of ResolveKind on each resolve.

This commit is contained in:
Sergey Evdokimov
2010-08-19 19:33:13 +04:00
parent 518c0a6a98
commit 04372bc4b9
8 changed files with 18 additions and 11 deletions
@@ -83,8 +83,8 @@ public class GrReferenceExpressionImpl extends GrReferenceElementImpl implements
if (name == null) return GroovyResolveResult.EMPTY_ARRAY;
EnumSet<ClassHint.ResolveKind> kinds = getParent() instanceof GrReferenceExpression
? EnumSet.of(ClassHint.ResolveKind.CLASS, ClassHint.ResolveKind.PACKAGE)
: EnumSet.of(ClassHint.ResolveKind.CLASS);
? ResolverProcessor.RESOLVE_KINDS_CLASS_PACKAGE
: ResolverProcessor.RESOLVE_KINDS_CLASS;
boolean hasAt = hasAt();
GroovyResolveResult[] classCandidates = GroovyResolveResult.EMPTY_ARRAY;
if (!hasAt) {
@@ -400,8 +400,8 @@ public class GrCodeReferenceElementImpl extends GrReferenceElementImpl implement
}
}
} else {
EnumSet<ClassHint.ResolveKind> kinds = kind == CLASS ? EnumSet.of(ClassHint.ResolveKind.CLASS) :
EnumSet.of(ClassHint.ResolveKind.PACKAGE, ClassHint.ResolveKind.CLASS);
EnumSet<ClassHint.ResolveKind> kinds = kind == CLASS ? ResolverProcessor.RESOLVE_KINDS_CLASS :
ResolverProcessor.RESOLVE_KINDS_CLASS_PACKAGE;
ResolverProcessor processor = new ClassResolverProcessor(refName, ref, kinds);
ResolveUtil.treeWalkUp(ref, processor, false);
GroovyResolveResult[] candidates = processor.getCandidates();
@@ -31,7 +31,7 @@ public class AccessorResolverProcessor extends ResolverProcessor {
private final boolean mySearchForGetter;
public AccessorResolverProcessor(String name, PsiElement place, boolean searchForGetter) {
super(name, EnumSet.of(ResolveKind.METHOD), place, PsiType.EMPTY_ARRAY);
super(name, RESOLVE_KINDS_METHOD, place, PsiType.EMPTY_ARRAY);
mySearchForGetter = searchForGetter;
}
@@ -30,6 +30,6 @@ public class ClassResolverProcessor extends ResolverProcessor {
}
public ClassResolverProcessor(String refName, PsiElement place) {
super(refName, EnumSet.of(ClassHint.ResolveKind.CLASS), place, PsiType.EMPTY_ARRAY);
super(refName, RESOLVE_KINDS_CLASS, place, PsiType.EMPTY_ARRAY);
}
}
@@ -43,15 +43,15 @@ public class CompletionProcessor extends ResolverProcessor {
}
public static ResolverProcessor createPropertyCompletionProcessor(PsiElement place) {
return new CompletionProcessor(place, EnumSet.of(ResolveKind.METHOD, ResolveKind.PROPERTY), null);
return new CompletionProcessor(place, RESOLVE_KINDS_METHOD_PROPERTY, null);
}
public static ResolverProcessor createRefSameNameProcessor(PsiElement place, String name) {
return new CompletionProcessor(place, EnumSet.of(ResolveKind.METHOD, ResolveKind.PROPERTY), name);
return new CompletionProcessor(place, RESOLVE_KINDS_METHOD_PROPERTY, name);
}
public static ResolverProcessor createClassCompletionProcessor(PsiElement place) {
return new CompletionProcessor(place, EnumSet.of(ResolveKind.PACKAGE, ResolveKind.CLASS), null);
return new CompletionProcessor(place, RESOLVE_KINDS_CLASS_PACKAGE, null);
}
@NotNull
@@ -65,7 +65,7 @@ public class MethodResolverProcessor extends ResolverProcessor {
this(name, place, isConstructor, thisType, argumentTypes, typeArguments, false);
}
public MethodResolverProcessor(String name, GroovyPsiElement place, boolean isConstructor, PsiType thisType, @Nullable PsiType[] argumentTypes, PsiType[] typeArguments, boolean allVariants) {
super(name, EnumSet.of(ResolveKind.METHOD, ResolveKind.PROPERTY), place, PsiType.EMPTY_ARRAY);
super(name, RESOLVE_KINDS_METHOD_PROPERTY, place, PsiType.EMPTY_ARRAY);
myIsConstructor = isConstructor;
myThisType = thisType;
myArgumentTypes = argumentTypes;
@@ -32,7 +32,7 @@ public class PropertyResolverProcessor extends ResolverProcessor {
private GroovyResolveResult myProperty = null;
public PropertyResolverProcessor(String name, PsiElement place) {
super(name, EnumSet.of(ResolveKind.PROPERTY), place, PsiType.EMPTY_ARRAY);
super(name, RESOLVE_KINDS_PROPERTY, place, PsiType.EMPTY_ARRAY);
}
public boolean execute(PsiElement element, ResolveState state) {
@@ -41,6 +41,13 @@ import static org.jetbrains.plugins.groovy.lang.resolve.processors.ClassHint.Res
*/
public class ResolverProcessor implements PsiScopeProcessor, NameHint, ClassHint, ElementClassHint {
public static final Key<GroovyPsiElement> RESOLVE_CONTEXT = Key.create("RESOLVE_CONTEXT");
public static final EnumSet<ResolveKind> RESOLVE_KINDS_CLASS_PACKAGE = EnumSet.of(CLASS, PACKAGE);
public static final EnumSet<ResolveKind> RESOLVE_KINDS_CLASS = EnumSet.of(CLASS);
public static final EnumSet<ResolveKind> RESOLVE_KINDS_METHOD = EnumSet.of(METHOD);
public static final EnumSet<ResolveKind> RESOLVE_KINDS_METHOD_PROPERTY = EnumSet.of(METHOD, PROPERTY);
public static final EnumSet<ResolveKind> RESOLVE_KINDS_PROPERTY = EnumSet.of(PROPERTY);
protected String myName;
private final EnumSet<ResolveKind> myResolveTargetKinds;
private final Set<String> myProcessedClasses = new HashSet<String>();