FIR: refactoring, move class Java class building to separate fun

This commit is contained in:
Ilya Kirillov
2021-01-16 19:58:50 +01:00
parent 93436c1341
commit 2f12b8f87f
@@ -186,7 +186,33 @@ class JavaSymbolProvider(
javaTypeParameterStack.addStack(parentStack) javaTypeParameterStack.addStack(parentStack)
} }
} }
val firJavaClass = buildJavaClass { parentClassTypeParameterStackCache[classSymbol] = javaTypeParameterStack
val firJavaClass = createFirJavaClass(javaClass, classSymbol, outerClassId, parentClassSymbol, classId, javaTypeParameterStack)
parentClassTypeParameterStackCache.remove(classSymbol)
firJavaClass.convertSuperTypes(javaClass, javaTypeParameterStack)
firJavaClass.addAnnotationsFrom(this@JavaSymbolProvider.session, javaClass, javaTypeParameterStack)
return firJavaClass
}
private fun FirJavaClass.convertSuperTypes(
javaClass: JavaClass,
javaTypeParameterStack: JavaTypeParameterStack
) {
replaceSuperTypeRefs(
javaClass.supertypes.map { supertype ->
supertype.toFirResolvedTypeRef(session, javaTypeParameterStack, isForSupertypes = true, forTypeParameterBounds = false)
}
)
}
private fun createFirJavaClass(
javaClass: JavaClass,
classSymbol: FirRegularClassSymbol,
outerClassId: ClassId?,
parentClassSymbol: FirRegularClassSymbol?,
classId: ClassId,
javaTypeParameterStack: JavaTypeParameterStack,
): FirJavaClass = buildJavaClass {
source = (javaClass as? JavaElementImpl<*>)?.psi?.toFirPsiSourceElement() source = (javaClass as? JavaElementImpl<*>)?.psi?.toFirPsiSourceElement()
session = this@JavaSymbolProvider.session session = this@JavaSymbolProvider.session
symbol = classSymbol symbol = classSymbol
@@ -197,7 +223,6 @@ class JavaSymbolProvider(
this.isTopLevel = outerClassId == null this.isTopLevel = outerClassId == null
isStatic = javaClass.isStatic isStatic = javaClass.isStatic
this.javaTypeParameterStack = javaTypeParameterStack this.javaTypeParameterStack = javaTypeParameterStack
parentClassTypeParameterStackCache[classSymbol] = javaTypeParameterStack
existingNestedClassifierNames += javaClass.innerClassNames existingNestedClassifierNames += javaClass.innerClassNames
scopeProvider = this@JavaSymbolProvider.scopeProvider scopeProvider = this@JavaSymbolProvider.scopeProvider
val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack) val classTypeParameters = javaClass.typeParameters.convertTypeParameters(javaTypeParameterStack)
@@ -278,17 +303,6 @@ class JavaSymbolProvider(
declarations += declarations +=
buildConstructorForAnnotationClass(constructorId, this, valueParametersForAnnotationConstructor) buildConstructorForAnnotationClass(constructorId, this, valueParametersForAnnotationConstructor)
} }
parentClassTypeParameterStackCache.remove(classSymbol)
}
firJavaClass.replaceSuperTypeRefs(
javaClass.supertypes.map { supertype ->
supertype.toFirResolvedTypeRef(
this@JavaSymbolProvider.session, javaTypeParameterStack, isForSupertypes = true, forTypeParameterBounds = false
)
}
)
firJavaClass.addAnnotationsFrom(this@JavaSymbolProvider.session, javaClass, javaTypeParameterStack)
return firJavaClass
} }
private fun convertJavaFieldToFir( private fun convertJavaFieldToFir(