Move TypeMappingMode to :core:compiler.common.jvm
This commit is contained in:
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.codegen.state
|
|||||||
import com.intellij.openapi.util.text.StringUtil
|
import com.intellij.openapi.util.text.StringUtil
|
||||||
import org.jetbrains.kotlin.builtins.BuiltInsPackageFragment
|
import org.jetbrains.kotlin.builtins.BuiltInsPackageFragment
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
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.FunctionClassDescriptor
|
||||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
import org.jetbrains.kotlin.builtins.functions.FunctionClassKind
|
||||||
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||||
|
|||||||
+1
-4
@@ -37,10 +37,7 @@ import org.jetbrains.kotlin.ir.expressions.*
|
|||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.load.java.*
|
import org.jetbrains.kotlin.load.java.*
|
||||||
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
import org.jetbrains.kotlin.load.kotlin.*
|
||||||
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.metadata.deserialization.getExtensionOrNull
|
import org.jetbrains.kotlin.metadata.deserialization.getExtensionOrNull
|
||||||
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
||||||
|
|||||||
-2
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.asJava.classes
|
|||||||
|
|
||||||
import com.intellij.openapi.util.Comparing
|
import com.intellij.openapi.util.Comparing
|
||||||
import com.intellij.openapi.util.Key
|
import com.intellij.openapi.util.Key
|
||||||
import com.intellij.openapi.util.registry.Registry
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.impl.PsiSuperMethodImplUtil
|
import com.intellij.psi.impl.PsiSuperMethodImplUtil
|
||||||
import com.intellij.psi.impl.java.stubs.PsiJavaFileStub
|
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.asJava.elements.FakeFileForLightClass
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
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.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtCodeFragment
|
import org.jetbrains.kotlin.psi.KtCodeFragment
|
||||||
|
|||||||
@@ -9,8 +9,6 @@ import com.intellij.navigation.ItemPresentation
|
|||||||
import com.intellij.navigation.ItemPresentationProviders
|
import com.intellij.navigation.ItemPresentationProviders
|
||||||
import com.intellij.openapi.util.TextRange
|
import com.intellij.openapi.util.TextRange
|
||||||
import com.intellij.psi.*
|
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.LocalSearchScope
|
||||||
import com.intellij.psi.search.SearchScope
|
import com.intellij.psi.search.SearchScope
|
||||||
import com.intellij.psi.util.TypeConversionUtil
|
import com.intellij.psi.util.TypeConversionUtil
|
||||||
|
|||||||
+7
-47
@@ -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.
|
* 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
|
package org.jetbrains.kotlin.load.kotlin
|
||||||
|
|
||||||
import org.jetbrains.kotlin.resolve.isInlineClassType
|
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
|
||||||
import org.jetbrains.kotlin.types.Variance
|
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 needPrimitiveBoxing: Boolean = true,
|
||||||
val needInlineClassWrapping: Boolean = true,
|
val needInlineClassWrapping: Boolean = true,
|
||||||
val isForAnnotationParameter: Boolean = false,
|
val isForAnnotationParameter: Boolean = false,
|
||||||
@@ -106,48 +108,6 @@ class TypeMappingMode private constructor(
|
|||||||
isAnnotationMethod: Boolean
|
isAnnotationMethod: Boolean
|
||||||
) = if (isAnnotationMethod) VALUE_FOR_ANNOTATION else DEFAULT
|
) = 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
|
@JvmStatic
|
||||||
fun createWithConstantDeclarationSiteWildcardsMode(
|
fun createWithConstantDeclarationSiteWildcardsMode(
|
||||||
skipDeclarationSiteWildcards: Boolean,
|
skipDeclarationSiteWildcards: Boolean,
|
||||||
@@ -155,7 +115,7 @@ class TypeMappingMode private constructor(
|
|||||||
needInlineClassWrapping: Boolean,
|
needInlineClassWrapping: Boolean,
|
||||||
mapTypeAliases: Boolean,
|
mapTypeAliases: Boolean,
|
||||||
fallbackMode: TypeMappingMode? = null
|
fallbackMode: TypeMappingMode? = null
|
||||||
) = TypeMappingMode(
|
): TypeMappingMode = TypeMappingMode(
|
||||||
isForAnnotationParameter = isForAnnotationParameter,
|
isForAnnotationParameter = isForAnnotationParameter,
|
||||||
skipDeclarationSiteWildcards = skipDeclarationSiteWildcards,
|
skipDeclarationSiteWildcards = skipDeclarationSiteWildcards,
|
||||||
genericArgumentMode = fallbackMode,
|
genericArgumentMode = fallbackMode,
|
||||||
+55
@@ -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()
|
||||||
|
)
|
||||||
|
}
|
||||||
+2
@@ -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.RETURN_TYPE
|
||||||
import org.jetbrains.kotlin.kapt3.stubs.ErrorTypeCorrector.TypeKind.SUPER_TYPE
|
import org.jetbrains.kotlin.kapt3.stubs.ErrorTypeCorrector.TypeKind.SUPER_TYPE
|
||||||
import org.jetbrains.kotlin.load.kotlin.TypeMappingMode
|
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.psi.*
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.source.getPsi
|
import org.jetbrains.kotlin.resolve.source.getPsi
|
||||||
|
|||||||
Reference in New Issue
Block a user