Minor. Introduce typeMapper val into UltraLightSupport
To avoid multiple creation
This commit is contained in:
@@ -669,6 +669,7 @@ interface UltraLightSupport {
|
|||||||
fun findAnnotation(owner: KtAnnotated, fqName: FqName): Pair<KtAnnotationEntry, AnnotationDescriptor>?
|
fun findAnnotation(owner: KtAnnotated, fqName: FqName): Pair<KtAnnotationEntry, AnnotationDescriptor>?
|
||||||
fun isTooComplexForUltraLightGeneration(element: KtClassOrObject): Boolean
|
fun isTooComplexForUltraLightGeneration(element: KtClassOrObject): Boolean
|
||||||
val deprecationResolver: DeprecationResolver
|
val deprecationResolver: DeprecationResolver
|
||||||
|
val typeMapper: KotlinTypeMapper
|
||||||
}
|
}
|
||||||
|
|
||||||
interface KtUltraLightElementWithNullabilityAnnotation<out T : KtDeclaration, out D : PsiModifierListOwner> : KtLightDeclaration<T, D>,
|
interface KtUltraLightElementWithNullabilityAnnotation<out T : KtDeclaration, out D : PsiModifierListOwner> : KtLightDeclaration<T, D>,
|
||||||
|
|||||||
@@ -18,21 +18,17 @@ import org.jetbrains.kotlin.asJava.elements.KotlinLightTypeParameterListBuilder
|
|||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||||
import org.jetbrains.kotlin.codegen.ClassBuilderMode
|
|
||||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
|
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
|
||||||
import org.jetbrains.kotlin.codegen.OwnerKind
|
import org.jetbrains.kotlin.codegen.OwnerKind
|
||||||
import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter
|
import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter
|
||||||
import org.jetbrains.kotlin.codegen.signature.JvmSignatureWriter
|
import org.jetbrains.kotlin.codegen.signature.JvmSignatureWriter
|
||||||
import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker
|
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
import org.jetbrains.kotlin.config.JvmTarget
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
||||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
import org.jetbrains.kotlin.psi.KtTypeParameter
|
import org.jetbrains.kotlin.psi.KtTypeParameter
|
||||||
import org.jetbrains.kotlin.psi.KtTypeParameterListOwner
|
import org.jetbrains.kotlin.psi.KtTypeParameterListOwner
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
@@ -147,7 +143,7 @@ internal fun UltraLightSupport.mapType(
|
|||||||
mapTypeToSignatureWriter: (KotlinTypeMapper, JvmSignatureWriter) -> Unit
|
mapTypeToSignatureWriter: (KotlinTypeMapper, JvmSignatureWriter) -> Unit
|
||||||
): PsiType {
|
): PsiType {
|
||||||
val signatureWriter = BothSignatureWriter(BothSignatureWriter.Mode.SKIP_CHECKS)
|
val signatureWriter = BothSignatureWriter(BothSignatureWriter.Mode.SKIP_CHECKS)
|
||||||
mapTypeToSignatureWriter(typeMapper(this), signatureWriter)
|
mapTypeToSignatureWriter(typeMapper, signatureWriter)
|
||||||
val signature = StringCharacterIterator(signatureWriter.toString())
|
val signature = StringCharacterIterator(signatureWriter.toString())
|
||||||
|
|
||||||
val javaType = SignatureParsing.parseTypeString(signature, StubBuildingVisitor.GUESSING_MAPPER)
|
val javaType = SignatureParsing.parseTypeString(signature, StubBuildingVisitor.GUESSING_MAPPER)
|
||||||
@@ -161,15 +157,6 @@ internal fun UltraLightSupport.mapType(
|
|||||||
return type
|
return type
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun typeMapper(support: UltraLightSupport): KotlinTypeMapper = KotlinTypeMapper(
|
|
||||||
BindingContext.EMPTY, ClassBuilderMode.LIGHT_CLASSES,
|
|
||||||
IncompatibleClassTracker.DoNothing, support.moduleName,
|
|
||||||
JvmTarget.JVM_1_8,
|
|
||||||
KotlinTypeMapper.LANGUAGE_VERSION_SETTINGS_DEFAULT, // TODO use proper LanguageVersionSettings
|
|
||||||
false,
|
|
||||||
KotlinType::cleanFromAnonymousTypes
|
|
||||||
)
|
|
||||||
|
|
||||||
// Returns null when type is unchanged
|
// Returns null when type is unchanged
|
||||||
fun KotlinType.cleanFromAnonymousTypes(): KotlinType? {
|
fun KotlinType.cleanFromAnonymousTypes(): KotlinType? {
|
||||||
val returnTypeClass = constructor.declarationDescriptor as? ClassDescriptor ?: return null
|
val returnTypeClass = constructor.declarationDescriptor as? ClassDescriptor ?: return null
|
||||||
@@ -234,7 +221,7 @@ fun KtUltraLightClass.createGeneratedMethodFromDescriptor(
|
|||||||
private fun KtUltraLightClass.lightMethod(
|
private fun KtUltraLightClass.lightMethod(
|
||||||
descriptor: FunctionDescriptor
|
descriptor: FunctionDescriptor
|
||||||
): LightMethodBuilder {
|
): LightMethodBuilder {
|
||||||
val name = typeMapper(support).mapFunctionName(descriptor, OwnerKind.IMPLEMENTATION)
|
val name = support.typeMapper.mapFunctionName(descriptor, OwnerKind.IMPLEMENTATION)
|
||||||
|
|
||||||
val accessFlags: Int by lazyPub {
|
val accessFlags: Int by lazyPub {
|
||||||
val asmFlags = AsmUtil.getMethodAsmFlags(descriptor, OwnerKind.IMPLEMENTATION, support.deprecationResolver)
|
val asmFlags = AsmUtil.getMethodAsmFlags(descriptor, OwnerKind.IMPLEMENTATION, support.deprecationResolver)
|
||||||
|
|||||||
+17
-4
@@ -30,12 +30,13 @@ import org.jetbrains.kotlin.asJava.LightClassBuilder
|
|||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.asJava.builder.InvalidLightClassDataHolder
|
import org.jetbrains.kotlin.asJava.builder.InvalidLightClassDataHolder
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
|
||||||
import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass
|
import org.jetbrains.kotlin.asJava.classes.*
|
||||||
import org.jetbrains.kotlin.asJava.classes.UltraLightSupport
|
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
|
||||||
import org.jetbrains.kotlin.asJava.classes.shouldNotBeVisibleAsLightClass
|
|
||||||
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder
|
||||||
|
import org.jetbrains.kotlin.codegen.ClassBuilderMode
|
||||||
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
|
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
|
||||||
|
import org.jetbrains.kotlin.codegen.state.IncompatibleClassTracker
|
||||||
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
|
||||||
@@ -56,6 +57,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperClassifiers
|
|||||||
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode
|
||||||
import org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException
|
import org.jetbrains.kotlin.resolve.lazy.NoDescriptorForDeclarationException
|
||||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||||
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import java.util.concurrent.ConcurrentMap
|
import java.util.concurrent.ConcurrentMap
|
||||||
|
|
||||||
class IDELightClassGenerationSupport(private val project: Project) : LightClassGenerationSupport() {
|
class IDELightClassGenerationSupport(private val project: Project) : LightClassGenerationSupport() {
|
||||||
@@ -125,6 +127,17 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
|
|||||||
override val deprecationResolver: DeprecationResolver by lazyPub {
|
override val deprecationResolver: DeprecationResolver by lazyPub {
|
||||||
element.getResolutionFacade().getFrontendService(DeprecationResolver::class.java)
|
element.getResolutionFacade().getFrontendService(DeprecationResolver::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val typeMapper: KotlinTypeMapper by lazyPub {
|
||||||
|
KotlinTypeMapper(
|
||||||
|
BindingContext.EMPTY, ClassBuilderMode.LIGHT_CLASSES,
|
||||||
|
IncompatibleClassTracker.DoNothing, moduleName,
|
||||||
|
JvmTarget.JVM_1_8,
|
||||||
|
KotlinTypeMapper.LANGUAGE_VERSION_SETTINGS_DEFAULT, // TODO use proper LanguageVersionSettings
|
||||||
|
false,
|
||||||
|
KotlinType::cleanFromAnonymousTypes
|
||||||
|
)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user