From 14e7165f53b7dbe4eea599a040a1834594abaa4b Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Wed, 14 Aug 2019 11:52:47 +0700 Subject: [PATCH] PsiImmediateClassType: fixed getParameterCount; less allocations in getParameters GitOrigin-RevId: 31f9f495c615b15f730146fea251caaec84670b2 --- .../psi/impl/source/PsiImmediateClassType.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImmediateClassType.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImmediateClassType.java index 0b6aeeadcd59..d5249d142eb5 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImmediateClassType.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/PsiImmediateClassType.java @@ -122,7 +122,11 @@ public class PsiImmediateClassType extends PsiClassType.Stub { public int getParameterCount() { PsiTypeParameterList list = myClass.getTypeParameterList(); if (list == null) return 0; - return list.getTypeParameters().length; + PsiTypeParameter[] parameters = list.getTypeParameters(); + for (PsiTypeParameter parameter : parameters) { + if (mySubstitutor.substitute(parameter) == null) return 0; + } + return parameters.length; } @Override @@ -133,15 +137,17 @@ public class PsiImmediateClassType extends PsiClassType.Stub { return PsiType.EMPTY_ARRAY; } - List lst = new ArrayList<>(); + PsiType[] result = new PsiType[parameters.length]; + int pos = 0; for (PsiTypeParameter parameter : parameters) { PsiType substituted = mySubstitutor.substitute(parameter); if (substituted == null) { return PsiType.EMPTY_ARRAY; } - lst.add(substituted); + result[pos++] = substituted; } - return lst.toArray(createArray(lst.size())); + assert pos == result.length; + return result; } @Override