Extract FE 1.0 dependent part from JavaToKotlinClassMap

Also move JavaToKotlinClassMap to :core:compiler.common.jvm
This commit is contained in:
Dmitriy Novozhilov
2020-08-31 16:20:01 +03:00
parent 136435bcc2
commit 10fd164b77
22 changed files with 156 additions and 143 deletions
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.resolve;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMap;
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMapper;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.psi.KtElement;
@@ -30,7 +30,7 @@ import static org.jetbrains.kotlin.diagnostics.Errors.PLATFORM_CLASS_MAPPED_TO_K
public class PlatformClassesMappedToKotlinChecker {
public static void checkPlatformClassesMappedToKotlin(
@NotNull PlatformToKotlinClassMap platformToKotlinMap,
@NotNull PlatformToKotlinClassMapper platformToKotlinMap,
@NotNull BindingTrace trace,
@NotNull KtImportDirective importDirective,
@NotNull Collection<? extends DeclarationDescriptor> descriptors
@@ -44,7 +44,7 @@ public class PlatformClassesMappedToKotlinChecker {
}
public static void reportPlatformClassMappedToKotlin(
@NotNull PlatformToKotlinClassMap platformToKotlinMap,
@NotNull PlatformToKotlinClassMapper platformToKotlinMap,
@NotNull BindingTrace trace,
@NotNull KtElement element,
@NotNull DeclarationDescriptor descriptor
@@ -5,7 +5,7 @@
package org.jetbrains.kotlin.resolve
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMap
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMapper
import org.jetbrains.kotlin.container.*
import org.jetbrains.kotlin.resolve.calls.checkers.*
import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
@@ -95,7 +95,7 @@ abstract class PlatformConfiguratorBase(
private val additionalClashResolvers: List<PlatformExtensionsClashResolver<*>> = emptyList(),
private val identifierChecker: IdentifierChecker? = null,
private val overloadFilter: OverloadFilter? = null,
private val platformToKotlinClassMap: PlatformToKotlinClassMap? = null,
private val platformToKotlinClassMapper: PlatformToKotlinClassMapper? = null,
private val delegationFilter: DelegationFilter? = null,
private val overridesBackwardCompatibilityHelper: OverridesBackwardCompatibilityHelper? = null,
private val declarationReturnTypeSanitizer: DeclarationReturnTypeSanitizer? = null
@@ -120,7 +120,7 @@ abstract class PlatformConfiguratorBase(
additionalClashResolvers.forEach { useClashResolver(it) }
useInstanceIfNotNull(identifierChecker)
useInstanceIfNotNull(overloadFilter)
useInstanceIfNotNull(platformToKotlinClassMap)
useInstanceIfNotNull(platformToKotlinClassMapper)
useInstanceIfNotNull(delegationFilter)
useInstanceIfNotNull(overridesBackwardCompatibilityHelper)
useInstanceIfNotNull(declarationReturnTypeSanitizer)
@@ -17,7 +17,7 @@
package org.jetbrains.kotlin.resolve
import com.intellij.util.SmartList
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMap
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMapper
import org.jetbrains.kotlin.builtins.createFunctionType
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.LanguageVersionSettings
@@ -53,7 +53,6 @@ import org.jetbrains.kotlin.resolve.scopes.utils.findFirstFromMeAndParent
import org.jetbrains.kotlin.resolve.source.KotlinSourceElement
import org.jetbrains.kotlin.resolve.source.getPsi
import org.jetbrains.kotlin.resolve.source.toSourceElement
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.Variance.*
import org.jetbrains.kotlin.types.typeUtil.containsTypeAliasParameters
@@ -70,7 +69,7 @@ class TypeResolver(
private val dynamicTypesSettings: DynamicTypesSettings,
private val dynamicCallableDescriptors: DynamicCallableDescriptors,
private val identifierChecker: IdentifierChecker,
private val platformToKotlinClassMap: PlatformToKotlinClassMap,
private val platformToKotlinClassMapper: PlatformToKotlinClassMapper,
private val languageVersionSettings: LanguageVersionSettings
) {
private val isNonParenthesizedAnnotationsOnFunctionalTypesEnabled =
@@ -932,7 +931,7 @@ class TypeResolver(
return qualifiedExpressionResolver.resolveDescriptorForType(userType, scope, trace, isDebuggerContext).apply {
if (classifierDescriptor != null) {
PlatformClassesMappedToKotlinChecker.reportPlatformClassMappedToKotlin(
platformToKotlinClassMap, trace, userType, classifierDescriptor
platformToKotlinClassMapper, trace, userType, classifierDescriptor
)
}
}
@@ -20,7 +20,7 @@ import com.google.common.collect.HashMultimap
import com.google.common.collect.ImmutableListMultimap
import com.google.common.collect.ListMultimap
import gnu.trove.THashSet
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMap
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMapper
import org.jetbrains.kotlin.config.LanguageVersionSettings
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.diagnostics.Errors
@@ -39,7 +39,6 @@ import org.jetbrains.kotlin.resolve.deprecation.DeprecationResolver
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameOrNull
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
import org.jetbrains.kotlin.resolve.scopes.ImportingScope
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.storage.NotNullLazyValue
import org.jetbrains.kotlin.storage.StorageManager
import org.jetbrains.kotlin.types.expressions.OperatorConventions
@@ -90,7 +89,7 @@ class ImportResolutionComponents(
val storageManager: StorageManager,
val qualifiedExpressionResolver: QualifiedExpressionResolver,
val moduleDescriptor: ModuleDescriptor,
val platformToKotlinClassMap: PlatformToKotlinClassMap,
val platformToKotlinClassMapper: PlatformToKotlinClassMapper,
val languageVersionSettings: LanguageVersionSettings,
val deprecationResolver: DeprecationResolver
)
@@ -157,7 +156,7 @@ class LazyImportResolverForKtImportDirective(
if (scope is LazyExplicitImportScope) {
val allDescriptors = scope.storeReferencesToDescriptors()
PlatformClassesMappedToKotlinChecker.checkPlatformClassesMappedToKotlin(
components.platformToKotlinClassMap, traceForImportResolve, directive, allDescriptors
components.platformToKotlinClassMapper, traceForImportResolve, directive, allDescriptors
)
}
@@ -19,7 +19,7 @@ package org.jetbrains.kotlin.types
import com.google.common.collect.Maps
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMap
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMapper
import org.jetbrains.kotlin.builtins.isExtensionFunctionType
import org.jetbrains.kotlin.builtins.isFunctionType
import org.jetbrains.kotlin.descriptors.ClassDescriptor
@@ -41,7 +41,7 @@ object CastDiagnosticsUtil {
fun isCastPossible(
lhsType: KotlinType,
rhsType: KotlinType,
platformToKotlinClassMap: PlatformToKotlinClassMap
platformToKotlinClassMapper: PlatformToKotlinClassMapper
): Boolean {
val rhsNullable = TypeUtils.isNullableType(rhsType)
val lhsNullable = TypeUtils.isNullableType(lhsType)
@@ -51,7 +51,7 @@ object CastDiagnosticsUtil {
if (KotlinBuiltIns.isNullableNothing(rhsType)) return lhsNullable
if (lhsNullable && rhsNullable) return true
if (lhsType.isError) return true
if (isRelated(lhsType, rhsType, platformToKotlinClassMap)) return true
if (isRelated(lhsType, rhsType, platformToKotlinClassMapper)) return true
// This is an oversimplification (which does not render the method incomplete):
// we consider any type parameter capable of taking any value, which may be made more precise if we considered bounds
if (TypeUtils.isTypeParameter(lhsType) || TypeUtils.isTypeParameter(rhsType)) return true
@@ -70,20 +70,20 @@ object CastDiagnosticsUtil {
* Due to limitations in PlatformToKotlinClassMap, we only consider mapping of platform classes to Kotlin classed
* (i.e. java.lang.String -> kotlin.String) and ignore mappings that go the other way.
*/
private fun isRelated(a: KotlinType, b: KotlinType, platformToKotlinClassMap: PlatformToKotlinClassMap): Boolean {
val aClasses = mapToPlatformIndependentClasses(a, platformToKotlinClassMap)
val bClasses = mapToPlatformIndependentClasses(b, platformToKotlinClassMap)
private fun isRelated(a: KotlinType, b: KotlinType, platformToKotlinClassMapper: PlatformToKotlinClassMapper): Boolean {
val aClasses = mapToPlatformIndependentClasses(a, platformToKotlinClassMapper)
val bClasses = mapToPlatformIndependentClasses(b, platformToKotlinClassMapper)
return aClasses.any { DescriptorUtils.isSubtypeOfClass(b, it) } || bClasses.any { DescriptorUtils.isSubtypeOfClass(a, it) }
}
private fun mapToPlatformIndependentClasses(
type: KotlinType,
platformToKotlinClassMap: PlatformToKotlinClassMap
platformToKotlinClassMapper: PlatformToKotlinClassMapper
): List<ClassDescriptor> {
val descriptor = type.constructor.declarationDescriptor as? ClassDescriptor ?: return listOf()
return platformToKotlinClassMap.mapPlatformClass(descriptor) + descriptor
return platformToKotlinClassMapper.mapPlatformClass(descriptor) + descriptor
}
private fun isFinal(type: KotlinType) = !TypeUtils.canHaveSubtypes(KotlinTypeChecker.DEFAULT, type)
@@ -280,4 +280,4 @@ object CastDiagnosticsUtil {
else -> false
}
}
}
}
@@ -360,7 +360,7 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor {
return;
}
if (!CastDiagnosticsUtil.isCastPossible(actualType, targetType, components.platformToKotlinClassMap)) {
if (!CastDiagnosticsUtil.isCastPossible(actualType, targetType, components.platformToKotlinClassMapper)) {
context.trace.report(CAST_NEVER_SUCCEEDS.on(expression.getOperationReference()));
return;
}
@@ -7,7 +7,7 @@ package org.jetbrains.kotlin.types.expressions;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.builtins.KotlinBuiltIns;
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMap;
import org.jetbrains.kotlin.builtins.PlatformToKotlinClassMapper;
import org.jetbrains.kotlin.config.LanguageVersionSettings;
import org.jetbrains.kotlin.context.GlobalContext;
import org.jetbrains.kotlin.contracts.EffectSystem;
@@ -33,7 +33,7 @@ public class ExpressionTypingComponents {
/*package*/ ModuleDescriptor moduleDescriptor;
/*package*/ ExpressionTypingServices expressionTypingServices;
/*package*/ CallResolver callResolver;
/*package*/ PlatformToKotlinClassMap platformToKotlinClassMap;
/*package*/ PlatformToKotlinClassMapper platformToKotlinClassMapper;
/*package*/ ControlStructureTypingUtils controlStructureTypingUtils;
/*package*/ ForLoopConventionsChecker forLoopConventionsChecker;
/*package*/ FakeCallResolver fakeCallResolver;
@@ -90,8 +90,8 @@ public class ExpressionTypingComponents {
}
@Inject
public void setPlatformToKotlinClassMap(@NotNull PlatformToKotlinClassMap platformToKotlinClassMap) {
this.platformToKotlinClassMap = platformToKotlinClassMap;
public void setPlatformToKotlinClassMap(@NotNull PlatformToKotlinClassMapper platformToKotlinClassMapper) {
this.platformToKotlinClassMapper = platformToKotlinClassMapper;
}
@Inject