Extract FE 1.0 dependent part from JavaToKotlinClassMap
Also move JavaToKotlinClassMap to :core:compiler.common.jvm
This commit is contained in:
+3
-3
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -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;
|
||||
}
|
||||
|
||||
+4
-4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user