From d215c413cc0b85755937e871a646454ea552a00a Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 22 Sep 2020 11:27:23 +0300 Subject: [PATCH] Move TypeMappingMode to :core:compiler.common.jvm --- .../kotlin/codegen/state/KotlinTypeMapper.kt | 1 - .../jvm/codegen/MethodSignatureMapper.kt | 5 +- .../asJava/classes/KtLightClassForScript.kt | 2 - .../asJava/classes/ultraLightParameters.kt | 2 - .../kotlin/load/kotlin/TypeMappingMode.kt | 54 +++--------------- .../load/kotlin/TypeMappingModeExtensions.kt | 55 +++++++++++++++++++ .../kotlin/kapt3/stubs/ErrorTypeCorrector.kt | 2 + 7 files changed, 65 insertions(+), 56 deletions(-) rename core/{descriptors.jvm => compiler.common.jvm}/src/org/jetbrains/kotlin/load/kotlin/TypeMappingMode.kt (72%) create mode 100644 core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/TypeMappingModeExtensions.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt index 0ad89f852b5..dc60ff41eab 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/KotlinTypeMapper.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.codegen.state import com.intellij.openapi.util.text.StringUtil import org.jetbrains.kotlin.builtins.BuiltInsPackageFragment import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.builtins.StandardNames.RESULT_FQ_NAME import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor import org.jetbrains.kotlin.builtins.functions.FunctionClassKind import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt index 1fd565e47e1..21b94d9b032 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/MethodSignatureMapper.kt @@ -37,10 +37,7 @@ import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.load.java.* -import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource -import org.jetbrains.kotlin.load.kotlin.TypeMappingMode -import org.jetbrains.kotlin.load.kotlin.forceSingleValueParameterBoxing -import org.jetbrains.kotlin.load.kotlin.signatures +import org.jetbrains.kotlin.load.kotlin.* import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForScript.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForScript.kt index 66c994f07cd..9892fbc5cfa 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForScript.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForScript.kt @@ -7,7 +7,6 @@ package org.jetbrains.kotlin.asJava.classes import com.intellij.openapi.util.Comparing import com.intellij.openapi.util.Key -import com.intellij.openapi.util.registry.Registry import com.intellij.psi.* import com.intellij.psi.impl.PsiSuperMethodImplUtil import com.intellij.psi.impl.java.stubs.PsiJavaFileStub @@ -26,7 +25,6 @@ import org.jetbrains.kotlin.asJava.builder.LightClassDataProviderForScript import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind -import org.jetbrains.kotlin.load.kotlin.TypeMappingMode import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtCodeFragment diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt index 5ee20edd346..6165cdb8408 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/classes/ultraLightParameters.kt @@ -9,8 +9,6 @@ import com.intellij.navigation.ItemPresentation import com.intellij.navigation.ItemPresentationProviders import com.intellij.openapi.util.TextRange import com.intellij.psi.* -import com.intellij.psi.impl.compiled.ClsTypeElementImpl -import com.intellij.psi.impl.source.PsiClassReferenceType import com.intellij.psi.search.LocalSearchScope import com.intellij.psi.search.SearchScope import com.intellij.psi.util.TypeConversionUtil diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/TypeMappingMode.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/TypeMappingMode.kt similarity index 72% rename from core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/TypeMappingMode.kt rename to core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/TypeMappingMode.kt index c76a575bfb7..f9eeed54d80 100644 --- a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/TypeMappingMode.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/load/kotlin/TypeMappingMode.kt @@ -1,15 +1,17 @@ /* - * Copyright 2000-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ package org.jetbrains.kotlin.load.kotlin -import org.jetbrains.kotlin.resolve.isInlineClassType -import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.Variance -class TypeMappingMode private constructor( +@RequiresOptIn +annotation class TypeMappingModeInternals + +@OptIn(TypeMappingModeInternals::class) +class TypeMappingMode @TypeMappingModeInternals constructor( val needPrimitiveBoxing: Boolean = true, val needInlineClassWrapping: Boolean = true, val isForAnnotationParameter: Boolean = false, @@ -106,48 +108,6 @@ class TypeMappingMode private constructor( isAnnotationMethod: Boolean ) = if (isAnnotationMethod) VALUE_FOR_ANNOTATION else DEFAULT - @JvmStatic - fun getOptimalModeForValueParameter( - type: KotlinType - ) = getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = true) - - @JvmStatic - fun getOptimalModeForReturnType( - type: KotlinType, - isAnnotationMethod: Boolean - ) = if (isAnnotationMethod) VALUE_FOR_ANNOTATION else getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = false) - - private fun getOptimalModeForSignaturePart(type: KotlinType, canBeUsedInSupertypePosition: Boolean): TypeMappingMode { - if (type.arguments.isEmpty()) return DEFAULT - - if (type.isInlineClassType() && shouldUseUnderlyingType(type)) { - val underlyingType = computeUnderlyingType(type) - if (underlyingType != null) { - return getOptimalModeForSignaturePart(underlyingType, canBeUsedInSupertypePosition).dontWrapInlineClassesMode() - } - } - - val contravariantArgumentMode = - if (!canBeUsedInSupertypePosition) - TypeMappingMode(skipDeclarationSiteWildcards = false, skipDeclarationSiteWildcardsIfPossible = true) - else - null - - val invariantArgumentMode = - if (canBeUsedInSupertypePosition) - getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = false) - else - null - - return TypeMappingMode( - skipDeclarationSiteWildcards = !canBeUsedInSupertypePosition, - skipDeclarationSiteWildcardsIfPossible = true, - genericContravariantArgumentMode = contravariantArgumentMode, - genericInvariantArgumentMode = invariantArgumentMode, - needInlineClassWrapping = !type.isInlineClassType() - ) - } - @JvmStatic fun createWithConstantDeclarationSiteWildcardsMode( skipDeclarationSiteWildcards: Boolean, @@ -155,7 +115,7 @@ class TypeMappingMode private constructor( needInlineClassWrapping: Boolean, mapTypeAliases: Boolean, fallbackMode: TypeMappingMode? = null - ) = TypeMappingMode( + ): TypeMappingMode = TypeMappingMode( isForAnnotationParameter = isForAnnotationParameter, skipDeclarationSiteWildcards = skipDeclarationSiteWildcards, genericArgumentMode = fallbackMode, diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/TypeMappingModeExtensions.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/TypeMappingModeExtensions.kt new file mode 100644 index 00000000000..7ae951e94de --- /dev/null +++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/load/kotlin/TypeMappingModeExtensions.kt @@ -0,0 +1,55 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.load.kotlin + +import org.jetbrains.kotlin.resolve.isInlineClassType +import org.jetbrains.kotlin.types.KotlinType + +fun TypeMappingMode.Companion.getOptimalModeForValueParameter( + type: KotlinType +): TypeMappingMode = getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = true) + +fun TypeMappingMode.Companion.getOptimalModeForReturnType( + type: KotlinType, + isAnnotationMethod: Boolean +): TypeMappingMode { + return if (isAnnotationMethod) + VALUE_FOR_ANNOTATION + else + getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = false) +} + +@OptIn(TypeMappingModeInternals::class) +private fun getOptimalModeForSignaturePart(type: KotlinType, canBeUsedInSupertypePosition: Boolean): TypeMappingMode { + if (type.arguments.isEmpty()) return TypeMappingMode.DEFAULT + + if (type.isInlineClassType() && shouldUseUnderlyingType(type)) { + val underlyingType = computeUnderlyingType(type) + if (underlyingType != null) { + return getOptimalModeForSignaturePart(underlyingType, canBeUsedInSupertypePosition).dontWrapInlineClassesMode() + } + } + + val contravariantArgumentMode = + if (!canBeUsedInSupertypePosition) + TypeMappingMode(skipDeclarationSiteWildcards = false, skipDeclarationSiteWildcardsIfPossible = true) + else + null + + val invariantArgumentMode = + if (canBeUsedInSupertypePosition) + getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = false) + else + null + + return TypeMappingMode( + skipDeclarationSiteWildcards = !canBeUsedInSupertypePosition, + skipDeclarationSiteWildcardsIfPossible = true, + genericContravariantArgumentMode = contravariantArgumentMode, + genericInvariantArgumentMode = invariantArgumentMode, + needInlineClassWrapping = !type.isInlineClassType() + ) +} diff --git a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ErrorTypeCorrector.kt b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ErrorTypeCorrector.kt index 124c9371d1e..390abb04542 100644 --- a/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ErrorTypeCorrector.kt +++ b/plugins/kapt3/kapt3-compiler/src/org/jetbrains/kotlin/kapt3/stubs/ErrorTypeCorrector.kt @@ -29,6 +29,8 @@ import org.jetbrains.kotlin.kapt3.stubs.ErrorTypeCorrector.TypeKind.METHOD_PARAM import org.jetbrains.kotlin.kapt3.stubs.ErrorTypeCorrector.TypeKind.RETURN_TYPE import org.jetbrains.kotlin.kapt3.stubs.ErrorTypeCorrector.TypeKind.SUPER_TYPE import org.jetbrains.kotlin.load.kotlin.TypeMappingMode +import org.jetbrains.kotlin.load.kotlin.getOptimalModeForReturnType +import org.jetbrains.kotlin.load.kotlin.getOptimalModeForValueParameter import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.source.getPsi