FIR Java: implement "appendErasedType" thus adding predefined signatures

Related to KT-29937
This commit is contained in:
Mikhail Glukhikh
2019-03-12 11:55:57 +03:00
parent 43d06f85e3
commit d00d078b4f
7 changed files with 50 additions and 5 deletions
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.java.declarations.FirJavaMethod
import org.jetbrains.kotlin.fir.java.declarations.FirJavaValueParameter
import org.jetbrains.kotlin.fir.java.enhancement.*
import org.jetbrains.kotlin.fir.java.enhancement.EnhancementSignatureParts
import org.jetbrains.kotlin.fir.java.toNotNullConeKotlinType
import org.jetbrains.kotlin.fir.java.types.FirJavaTypeRef
import org.jetbrains.kotlin.fir.scopes.FirScope
import org.jetbrains.kotlin.fir.scopes.ProcessorAction
@@ -26,8 +27,7 @@ import org.jetbrains.kotlin.fir.symbols.ConePropertySymbol
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.ir.expressions.IrConstKind
import org.jetbrains.kotlin.load.java.AnnotationTypeQualifierResolver
import org.jetbrains.kotlin.load.java.descriptors.NullDefaultValue
@@ -173,17 +173,38 @@ class JavaClassEnhancementScope(
append("(")
for (parameter in valueParameters) {
// TODO: appendErasedType(parameter.returnTypeRef)
appendErasedType(parameter.returnTypeRef)
}
append(")")
if (this@computeJvmDescriptor !is FirJavaMethod || (returnTypeRef as FirJavaTypeRef).isVoid()) {
append("V")
} else {
// TODO: appendErasedType(returnTypeRef)
appendErasedType(returnTypeRef)
}
}
private fun StringBuilder.appendErasedType(typeRef: FirTypeRef) {
when (typeRef) {
is FirResolvedTypeRef -> appendConeType(typeRef.type)
is FirJavaTypeRef -> appendConeType(typeRef.toNotNullConeKotlinType(session))
}
}
private fun StringBuilder.appendConeType(coneType: ConeKotlinType) {
append("L")
when (coneType) {
is ConeClassLikeType -> {
val classId = coneType.lookupTag.classId
append(classId.packageFqName.asString().replace(".", "/"))
append("/")
append(classId.relativeClassName)
}
is ConeTypeParameterType -> append(coneType.lookupTag.name)
}
append(";")
}
private fun FirJavaTypeRef.isVoid(): Boolean {
return type is JavaPrimitiveType && type.type == null
}