Optimization of resolving domain fields.

This commit is contained in:
Sergey Evdokimov
2010-09-07 18:19:59 +04:00
parent 0a7a70db67
commit 7e747e5ec6
5 changed files with 84 additions and 24 deletions
@@ -38,6 +38,7 @@ import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.Map;
public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements PsiElementFactory {
@@ -275,6 +276,29 @@ public class PsiElementFactoryImpl extends PsiJavaParserFacadeImpl implements Ps
return new PsiClassReferenceType(classReference, null);
}
@NotNull
public PsiClassType createType(@NotNull PsiClass aClass, PsiType parameter) {
PsiTypeParameter[] typeParameters = aClass.getTypeParameters();
assert typeParameters.length == 1;
Map<PsiTypeParameter, PsiType> map = Collections.singletonMap(typeParameters[0], parameter);
return createType(aClass, createSubstitutor(map));
}
@NotNull
public PsiClassType createType(@NotNull PsiClass aClass, PsiType... parameters) {
PsiTypeParameter[] typeParameters = aClass.getTypeParameters();
assert parameters.length == typeParameters.length;
Map<PsiTypeParameter, PsiType> map = new java.util.HashMap<PsiTypeParameter, PsiType>();
for (int i = 0; i < parameters.length; i++) {
map.put(typeParameters[i], parameters[i]);
}
return createType(aClass, createSubstitutor(map));
}
private static class TypeDetacher extends PsiTypeVisitor<PsiType> {
public static final TypeDetacher INSTANCE = new TypeDetacher();
@@ -43,8 +43,8 @@ import java.util.List;
public class LightMethodBuilder extends LightElement implements PsiMethod {
private final String myName;
private Computable<PsiType> myReturnType;
private final LightModifierList myModifierList;
private LightParameterListBuilder myParameterList;
private final PsiModifierList myModifierList;
private PsiParameterList myParameterList;
private Icon myBaseIcon;
private PsiClass myContainingClass;
private boolean myConstructor;
@@ -61,10 +61,18 @@ public class LightMethodBuilder extends LightElement implements PsiMethod {
}
public LightMethodBuilder(PsiManager manager, Language language, String name) {
this(manager, language, name, new LightParameterListBuilder(manager, language), new LightModifierList(manager, language));
}
public LightMethodBuilder(PsiManager manager,
Language language,
String name,
PsiParameterList parameterList,
PsiModifierList modifierList) {
super(manager, language);
myName = name;
myModifierList = new LightModifierList(manager, language);
myParameterList = new LightParameterListBuilder(manager, language);
myParameterList = parameterList;
myModifierList = modifierList;
}
@Override
@@ -126,12 +134,12 @@ public class LightMethodBuilder extends LightElement implements PsiMethod {
}
public LightMethodBuilder addModifier(String modifier) {
myModifierList.addModifier(modifier);
((LightModifierList)myModifierList).addModifier(modifier);
return this;
}
public LightMethodBuilder setModifiers(String... modifiers) {
myModifierList.clearModifiers();
((LightModifierList)myModifierList).clearModifiers();
addModifiers(modifiers);
return this;
}
@@ -145,13 +153,8 @@ public class LightMethodBuilder extends LightElement implements PsiMethod {
return this;
}
public LightMethodBuilder setReturnType(final PsiType returnType) {
return setReturnType(new Computable<PsiType>() {
@Override
public PsiType compute() {
return returnType;
}
});
public LightMethodBuilder setReturnType(PsiType returnType) {
return setReturnType(new Computable.PredefinedValueComputable<PsiType>(returnType));
}
public PsiTypeElement getReturnTypeElement() {
@@ -164,7 +167,7 @@ public class LightMethodBuilder extends LightElement implements PsiMethod {
}
public LightMethodBuilder addParameter(PsiParameter parameter) {
myParameterList.addParameter(parameter);
((LightParameterListBuilder)myParameterList).addParameter(parameter);
return this;
}