diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt index 0acb1589b3f..c88180f679a 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightPsi.kt @@ -669,6 +669,7 @@ interface UltraLightSupport { fun findAnnotation(owner: KtAnnotated, fqName: FqName): Pair? fun isTooComplexForUltraLightGeneration(element: KtClassOrObject): Boolean val deprecationResolver: DeprecationResolver + val typeMapper: KotlinTypeMapper } interface KtUltraLightElementWithNullabilityAnnotation : KtLightDeclaration, diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightUtils.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightUtils.kt index 06c19236875..60f4db191a5 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightUtils.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightUtils.kt @@ -18,21 +18,17 @@ import org.jetbrains.kotlin.asJava.elements.KotlinLightTypeParameterListBuilder import org.jetbrains.kotlin.asJava.elements.KtLightMethod import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.codegen.AsmUtil -import org.jetbrains.kotlin.codegen.ClassBuilderMode import org.jetbrains.kotlin.codegen.JvmCodegenUtil import org.jetbrains.kotlin.codegen.OwnerKind import org.jetbrains.kotlin.codegen.signature.BothSignatureWriter 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.config.JvmTarget import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.load.kotlin.TypeMappingMode import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtTypeParameter import org.jetbrains.kotlin.psi.KtTypeParameterListOwner -import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.types.KotlinType @@ -147,7 +143,7 @@ internal fun UltraLightSupport.mapType( mapTypeToSignatureWriter: (KotlinTypeMapper, JvmSignatureWriter) -> Unit ): PsiType { val signatureWriter = BothSignatureWriter(BothSignatureWriter.Mode.SKIP_CHECKS) - mapTypeToSignatureWriter(typeMapper(this), signatureWriter) + mapTypeToSignatureWriter(typeMapper, signatureWriter) val signature = StringCharacterIterator(signatureWriter.toString()) val javaType = SignatureParsing.parseTypeString(signature, StubBuildingVisitor.GUESSING_MAPPER) @@ -161,15 +157,6 @@ internal fun UltraLightSupport.mapType( 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 fun KotlinType.cleanFromAnonymousTypes(): KotlinType? { val returnTypeClass = constructor.declarationDescriptor as? ClassDescriptor ?: return null @@ -234,7 +221,7 @@ fun KtUltraLightClass.createGeneratedMethodFromDescriptor( private fun KtUltraLightClass.lightMethod( descriptor: FunctionDescriptor ): LightMethodBuilder { - val name = typeMapper(support).mapFunctionName(descriptor, OwnerKind.IMPLEMENTATION) + val name = support.typeMapper.mapFunctionName(descriptor, OwnerKind.IMPLEMENTATION) val accessFlags: Int by lazyPub { val asmFlags = AsmUtil.getMethodAsmFlags(descriptor, OwnerKind.IMPLEMENTATION, support.deprecationResolver) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt index 90f2e2b74a6..7f95cb87008 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt @@ -30,12 +30,13 @@ import org.jetbrains.kotlin.asJava.LightClassBuilder import org.jetbrains.kotlin.asJava.LightClassGenerationSupport import org.jetbrains.kotlin.asJava.builder.InvalidLightClassDataHolder import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder -import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass -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.classes.* import org.jetbrains.kotlin.asJava.finder.JavaElementFinder +import org.jetbrains.kotlin.codegen.ClassBuilderMode 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.DeclarationDescriptor 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.NoDescriptorForDeclarationException import org.jetbrains.kotlin.resolve.source.getPsi +import org.jetbrains.kotlin.types.KotlinType import java.util.concurrent.ConcurrentMap class IDELightClassGenerationSupport(private val project: Project) : LightClassGenerationSupport() { @@ -125,6 +127,17 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG override val deprecationResolver: DeprecationResolver by lazyPub { 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 + ) + } }) }