Pass PlatformToKotlinClassMap instance to PlatformTypesMappedToKotlinChecker
The purpose of this change is to allow PlatformToKotlinClassMap to be removed from ModuleDescriptor
This commit is contained in:
+4
-2
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.resolve.jvm.platform
|
||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||
import org.jetbrains.kotlin.container.useImpl
|
||||
import org.jetbrains.kotlin.container.useInstance
|
||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
||||
import org.jetbrains.kotlin.resolve.PlatformConfigurator
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmOverloadFilter
|
||||
import org.jetbrains.kotlin.resolve.jvm.JvmTypeSpecificityComparator
|
||||
@@ -73,9 +74,10 @@ object JvmPlatformConfigurator : PlatformConfigurator(
|
||||
|
||||
identifierChecker = JvmSimpleNameBacktickChecker,
|
||||
|
||||
overloadFilter = JvmOverloadFilter
|
||||
) {
|
||||
overloadFilter = JvmOverloadFilter,
|
||||
|
||||
platformToKotlinClassMap = JavaToKotlinClassMap.INSTANCE
|
||||
) {
|
||||
override fun configureModuleComponents(container: StorageComponentContainer) {
|
||||
container.useImpl<ReflectionAPICallChecker>()
|
||||
container.useImpl<JavaSyntheticScopes>()
|
||||
|
||||
+3
-6
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.resolve;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor;
|
||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap;
|
||||
import org.jetbrains.kotlin.psi.KtElement;
|
||||
import org.jetbrains.kotlin.psi.KtExpression;
|
||||
@@ -30,9 +29,8 @@ import java.util.Collection;
|
||||
import static org.jetbrains.kotlin.diagnostics.Errors.PLATFORM_CLASS_MAPPED_TO_KOTLIN;
|
||||
|
||||
public class PlatformTypesMappedToKotlinChecker {
|
||||
|
||||
public static void checkPlatformTypesMappedToKotlin(
|
||||
@NotNull ModuleDescriptor module,
|
||||
@NotNull PlatformToKotlinClassMap platformToKotlinMap,
|
||||
@NotNull BindingTrace trace,
|
||||
@NotNull KtImportDirective importDirective,
|
||||
@NotNull Collection<? extends DeclarationDescriptor> descriptors
|
||||
@@ -40,20 +38,19 @@ public class PlatformTypesMappedToKotlinChecker {
|
||||
KtExpression importedReference = importDirective.getImportedReference();
|
||||
if (importedReference != null) {
|
||||
for (DeclarationDescriptor descriptor : descriptors) {
|
||||
reportPlatformClassMappedToKotlin(module, trace, importedReference, descriptor);
|
||||
reportPlatformClassMappedToKotlin(platformToKotlinMap, trace, importedReference, descriptor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void reportPlatformClassMappedToKotlin(
|
||||
@NotNull ModuleDescriptor module,
|
||||
@NotNull PlatformToKotlinClassMap platformToKotlinMap,
|
||||
@NotNull BindingTrace trace,
|
||||
@NotNull KtElement element,
|
||||
@NotNull DeclarationDescriptor descriptor
|
||||
) {
|
||||
if (!(descriptor instanceof ClassDescriptor)) return;
|
||||
|
||||
PlatformToKotlinClassMap platformToKotlinMap = module.getPlatformToKotlinClassMap();
|
||||
Collection<ClassDescriptor> kotlinAnalogsForClass = platformToKotlinMap.mapPlatformClass((ClassDescriptor) descriptor);
|
||||
if (!kotlinAnalogsForClass.isEmpty()) {
|
||||
trace.report(PLATFORM_CLASS_MAPPED_TO_KOTLIN.on(element, kotlinAnalogsForClass));
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ModuleParameters
|
||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap
|
||||
import org.jetbrains.kotlin.resolve.calls.checkers.*
|
||||
import org.jetbrains.kotlin.resolve.calls.results.TypeSpecificityComparator
|
||||
import org.jetbrains.kotlin.resolve.scopes.SyntheticConstructorsProvider
|
||||
@@ -45,7 +46,7 @@ abstract class TargetPlatform(
|
||||
override val defaultModuleParameters = ModuleParameters.Empty
|
||||
override val platformConfigurator =
|
||||
object : PlatformConfigurator(DynamicTypesSettings(), listOf(), listOf(), listOf(), listOf(), listOf(),
|
||||
IdentifierChecker.DEFAULT, OverloadFilter.DEFAULT) {
|
||||
IdentifierChecker.DEFAULT, OverloadFilter.DEFAULT, PlatformToKotlinClassMap.EMPTY) {
|
||||
override fun configureModuleComponents(container: StorageComponentContainer) {
|
||||
container.useInstance(SyntheticScopes.Empty)
|
||||
container.useInstance(SyntheticConstructorsProvider.Empty)
|
||||
@@ -82,7 +83,8 @@ abstract class PlatformConfigurator(
|
||||
additionalClassifierUsageCheckers: List<ClassifierUsageChecker>,
|
||||
private val additionalAnnotationCheckers: List<AdditionalAnnotationChecker>,
|
||||
private val identifierChecker: IdentifierChecker,
|
||||
private val overloadFilter: OverloadFilter
|
||||
private val overloadFilter: OverloadFilter,
|
||||
private val platformToKotlinClassMap: PlatformToKotlinClassMap
|
||||
) {
|
||||
private val declarationCheckers: List<DeclarationChecker> = DEFAULT_DECLARATION_CHECKERS + additionalDeclarationCheckers
|
||||
private val callCheckers: List<CallChecker> = DEFAULT_CALL_CHECKERS + additionalCallCheckers
|
||||
@@ -100,6 +102,7 @@ abstract class PlatformConfigurator(
|
||||
additionalAnnotationCheckers.forEach { useInstance(it) }
|
||||
useInstance(identifierChecker)
|
||||
useInstance(overloadFilter)
|
||||
useInstance(platformToKotlinClassMap)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.diagnostics.Errors
|
||||
import org.jetbrains.kotlin.diagnostics.Errors.*
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
import org.jetbrains.kotlin.psi.codeFragmentUtil.debugTypeInfo
|
||||
import org.jetbrains.kotlin.psi.codeFragmentUtil.suppressDiagnosticsInDebugMode
|
||||
@@ -60,9 +61,9 @@ class TypeResolver(
|
||||
private val dynamicTypesSettings: DynamicTypesSettings,
|
||||
private val dynamicCallableDescriptors: DynamicCallableDescriptors,
|
||||
private val identifierChecker: IdentifierChecker,
|
||||
private val platformToKotlinClassMap: PlatformToKotlinClassMap,
|
||||
private val languageVersionSettings: LanguageVersionSettings
|
||||
) {
|
||||
|
||||
open class TypeTransformerForTests {
|
||||
open fun transformType(kotlinType: KotlinType): KotlinType? = null
|
||||
}
|
||||
@@ -762,16 +763,18 @@ class TypeResolver(
|
||||
}
|
||||
}
|
||||
|
||||
val result = qualifiedExpressionResolver.resolveDescriptorForType(userType, scope, trace, isDebuggerContext)
|
||||
if (result.classifierDescriptor != null) {
|
||||
PlatformTypesMappedToKotlinChecker.reportPlatformClassMappedToKotlin(
|
||||
moduleDescriptor, trace, userType, result.classifierDescriptor)
|
||||
return qualifiedExpressionResolver.resolveDescriptorForType(userType, scope, trace, isDebuggerContext).apply {
|
||||
if (classifierDescriptor != null) {
|
||||
PlatformTypesMappedToKotlinChecker.reportPlatformClassMappedToKotlin(
|
||||
platformToKotlinClassMap, trace, userType, classifierDescriptor
|
||||
)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic fun resolveProjectionKind(projectionKind: KtProjectionKind): Variance {
|
||||
@JvmStatic
|
||||
fun resolveProjectionKind(projectionKind: KtProjectionKind): Variance {
|
||||
return when (projectionKind) {
|
||||
KtProjectionKind.IN -> IN_VARIANCE
|
||||
KtProjectionKind.OUT -> OUT_VARIANCE
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtImportDirective
|
||||
import org.jetbrains.kotlin.psi.KtImportsFactory
|
||||
@@ -48,7 +49,8 @@ class FileScopeFactory(
|
||||
private val moduleDescriptor: ModuleDescriptor,
|
||||
private val qualifiedExpressionResolver: QualifiedExpressionResolver,
|
||||
private val bindingTrace: BindingTrace,
|
||||
private val ktImportsFactory: KtImportsFactory
|
||||
private val ktImportsFactory: KtImportsFactory,
|
||||
private val platformToKotlinClassMap: PlatformToKotlinClassMap
|
||||
) {
|
||||
private val defaultImports by storageManager.createLazyValue {
|
||||
ktImportsFactory.createImportDirectives(moduleDescriptor.defaultImports)
|
||||
@@ -83,8 +85,11 @@ class FileScopeFactory(
|
||||
val packageFragment = topLevelDescriptorProvider.getPackageFragment(file.packageFqName)
|
||||
?: error("Could not find fragment ${file.packageFqName} for file ${file.name}")
|
||||
|
||||
fun createImportResolver(indexedImports: IndexedImports, trace: BindingTrace, excludedImports: List<FqName>? = null)
|
||||
= LazyImportResolver(storageManager, qualifiedExpressionResolver, moduleDescriptor, indexedImports, aliasImportNames concat excludedImports, trace, packageFragment)
|
||||
fun createImportResolver(indexedImports: IndexedImports, trace: BindingTrace, excludedImports: List<FqName>? = null) =
|
||||
LazyImportResolver(
|
||||
storageManager, qualifiedExpressionResolver, moduleDescriptor, platformToKotlinClassMap,
|
||||
indexedImports, aliasImportNames concat excludedImports, trace, packageFragment
|
||||
)
|
||||
|
||||
val explicitImportResolver = createImportResolver(ExplicitImportsIndexed(imports), bindingTrace)
|
||||
val allUnderImportResolver = createImportResolver(AllUnderImportsIndexed(imports), bindingTrace) // TODO: should we count excludedImports here also?
|
||||
|
||||
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.incremental.KotlinLookupLocation
|
||||
import org.jetbrains.kotlin.incremental.components.LookupLocation
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap
|
||||
import org.jetbrains.kotlin.psi.KtImportDirective
|
||||
import org.jetbrains.kotlin.psi.KtPsiUtil
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
@@ -72,8 +73,9 @@ interface ImportResolver {
|
||||
|
||||
class LazyImportResolver(
|
||||
val storageManager: StorageManager,
|
||||
val qualifiedExpressionResolver: QualifiedExpressionResolver,
|
||||
private val qualifiedExpressionResolver: QualifiedExpressionResolver,
|
||||
val moduleDescriptor: ModuleDescriptor,
|
||||
private val platformToKotlinClassMap: PlatformToKotlinClassMap,
|
||||
val indexedImports: IndexedImports,
|
||||
excludedImportNames: Collection<FqName>,
|
||||
private val traceForImportResolve: BindingTrace,
|
||||
@@ -81,15 +83,16 @@ class LazyImportResolver(
|
||||
) : ImportResolver {
|
||||
private val importedScopesProvider = storageManager.createMemoizedFunctionWithNullableValues {
|
||||
directive: KtImportDirective ->
|
||||
val directiveImportScope = qualifiedExpressionResolver.processImportReference(
|
||||
directive, moduleDescriptor, traceForImportResolve, excludedImportNames, packageFragment) ?: return@createMemoizedFunctionWithNullableValues null
|
||||
|
||||
qualifiedExpressionResolver.processImportReference(
|
||||
directive, moduleDescriptor, traceForImportResolve, excludedImportNames, packageFragment
|
||||
)?.apply {
|
||||
if (!directive.isAllUnder) {
|
||||
PlatformTypesMappedToKotlinChecker.checkPlatformTypesMappedToKotlin(
|
||||
moduleDescriptor, traceForImportResolve, directive, directiveImportScope.getContributedDescriptors())
|
||||
platformToKotlinClassMap, traceForImportResolve, directive, getContributedDescriptors()
|
||||
)
|
||||
}
|
||||
|
||||
directiveImportScope
|
||||
}
|
||||
}
|
||||
|
||||
override fun forceResolveAllImports() {
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.container.useImpl
|
||||
import org.jetbrains.kotlin.container.useInstance
|
||||
import org.jetbrains.kotlin.js.resolve.diagnostics.JsCallChecker
|
||||
import org.jetbrains.kotlin.js.resolve.diagnostics.NativeInnerClassChecker
|
||||
import org.jetbrains.kotlin.platform.PlatformToKotlinClassMap
|
||||
import org.jetbrains.kotlin.resolve.IdentifierChecker
|
||||
import org.jetbrains.kotlin.resolve.OverloadFilter
|
||||
import org.jetbrains.kotlin.resolve.PlatformConfigurator
|
||||
@@ -37,7 +38,8 @@ object JsPlatformConfigurator : PlatformConfigurator(
|
||||
additionalClassifierUsageCheckers = listOf(),
|
||||
additionalAnnotationCheckers = listOf(),
|
||||
identifierChecker = IdentifierChecker.DEFAULT,
|
||||
overloadFilter = OverloadFilter.DEFAULT
|
||||
overloadFilter = OverloadFilter.DEFAULT,
|
||||
platformToKotlinClassMap = PlatformToKotlinClassMap.EMPTY
|
||||
) {
|
||||
override fun configureModuleComponents(container: StorageComponentContainer) {
|
||||
container.useImpl<JsCallChecker>()
|
||||
|
||||
Reference in New Issue
Block a user