[java] introduces PsiType.annotate(); minor optimization

This commit is contained in:
Roman Shevchenko
2016-04-22 18:53:35 +02:00
parent 9c0948ebcf
commit d77c31eaba
6 changed files with 9 additions and 10 deletions
@@ -43,7 +43,7 @@ public class PsiArrayType extends PsiType.Stub {
@NotNull
@Override
public PsiArrayType annotate(@NotNull TypeAnnotationProvider provider) {
return new PsiArrayType(myComponentType, provider);
return provider == getAnnotationProvider() ? this : new PsiArrayType(myComponentType, provider);
}
@NotNull
@@ -38,7 +38,7 @@ public class PsiEllipsisType extends PsiArrayType {
@NotNull
@Override
public PsiEllipsisType annotate(@NotNull TypeAnnotationProvider provider) {
return new PsiEllipsisType(getComponentType(), provider);
return provider == getAnnotationProvider() ? this : new PsiEllipsisType(getComponentType(), provider);
}
@NotNull
@@ -56,7 +56,7 @@ public class PsiPrimitiveType extends PsiType.Stub {
@NotNull
@Override
public PsiPrimitiveType annotate(@NotNull TypeAnnotationProvider provider) {
return new PsiPrimitiveType(myName, provider);
return provider == getAnnotationProvider() ? this : new PsiPrimitiveType(myName, provider);
}
@NotNull
@@ -89,7 +89,7 @@ public class PsiWildcardType extends PsiType.Stub {
@NotNull
@Override
public PsiWildcardType annotate(@NotNull TypeAnnotationProvider provider) {
return new PsiWildcardType(this, provider);
return provider == getAnnotationProvider() ? this : new PsiWildcardType(this, provider);
}
@NotNull
@@ -61,7 +61,7 @@ public class PsiClassReferenceType extends PsiClassType.Stub {
@NotNull
@Override
public PsiClassReferenceType annotate(@NotNull TypeAnnotationProvider provider) {
return new PsiClassReferenceType(myReference, myLanguageLevel, provider);
return provider == getAnnotationProvider() ? this : new PsiClassReferenceType(myReference, myLanguageLevel, provider);
}
@Override
@@ -111,7 +111,7 @@ public class PsiImmediateClassType extends PsiClassType.Stub {
@NotNull
@Override
public PsiImmediateClassType annotate(@NotNull TypeAnnotationProvider provider) {
return new PsiImmediateClassType(myClass, mySubstitutor, myLanguageLevel, provider);
return provider == getAnnotationProvider() ? this : new PsiImmediateClassType(myClass, mySubstitutor, myLanguageLevel, provider);
}
@Override
@@ -123,6 +123,7 @@ public class PsiImmediateClassType extends PsiClassType.Stub {
public String getClassName() {
return myClass.getName();
}
@Override
@NotNull
public PsiType[] getParameters() {
@@ -134,12 +135,10 @@ public class PsiImmediateClassType extends PsiClassType.Stub {
List<PsiType> lst = new ArrayList<PsiType>();
for (PsiTypeParameter parameter : parameters) {
PsiType substituted = mySubstitutor.substitute(parameter);
if (substituted != null) {
lst.add(substituted);
}
else {
if (substituted == null) {
return PsiType.EMPTY_ARRAY;
}
lst.add(substituted);
}
return lst.toArray(createArray(lst.size()));
}