[AA] KT-56617 Optimize type parameter access for Java class symbols

- Completion accesses symbol type parameters to render their names.
  Instead of building the whole list of type parameters, and
  consequently the whole FIR class, completion can now access the type
  parameter names directly.
This commit is contained in:
Marco Pennekamp
2023-03-01 16:54:17 +01:00
committed by Space Team
parent 77e374db77
commit d5933f28ab
2 changed files with 20 additions and 2 deletions
@@ -97,6 +97,16 @@ internal class KtFirPsiJavaClassSymbol(
psi.containingClass?.let { KtFirPsiJavaClassSymbol(it, analysisSession) }
}
override val typeParameterNames: List<Name> by cached {
// The parent Java class might contribute `FirOuterClassTypeParameterRef`s to the FIR class's type parameters (see
// `FirJavaFacade.createFirJavaClass`), but since they are filtered out by `createRegularKtTypeParameters`, we do not need to
// include them in the list of type parameter names.
javaClass.typeParameters.map { it.name }
}
val hasTypeParameters: Boolean
get() = withValidityAssertion { javaClass.typeParameters.isNotEmpty() }
override val isData: Boolean get() = withValidityAssertion { false }
override val isInline: Boolean get() = withValidityAssertion { false }
override val isFun: Boolean get() = withValidityAssertion { false }
@@ -137,7 +147,8 @@ internal class KtFirPsiJavaClassSymbol(
}
override val typeParameters: List<KtTypeParameterSymbol> by cached {
firSymbol.createRegularKtTypeParameters(builder)
if (hasTypeParameters) firSymbol.createRegularKtTypeParameters(builder)
else emptyList()
}
override val annotationsList: KtAnnotationsList by cached {