diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt index 7b66554147b..a8da62aabb3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/lazy/DefaultImportProvider.kt @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.resolve.lazy import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.name.FqName @@ -24,6 +25,7 @@ import org.jetbrains.kotlin.name.isChildOf import org.jetbrains.kotlin.name.isSubpackageOf import org.jetbrains.kotlin.resolve.ImportPath import org.jetbrains.kotlin.resolve.TargetPlatform +import org.jetbrains.kotlin.resolve.checkSinceKotlinVersionAccessibility import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter import org.jetbrains.kotlin.storage.StorageManager @@ -33,18 +35,22 @@ import org.jetbrains.kotlin.utils.addToStdlib.check class DefaultImportProvider( storageManager: StorageManager, moduleDescriptor: ModuleDescriptor, - private val targetPlatform: TargetPlatform + private val targetPlatform: TargetPlatform, + private val languageVersionSettings: LanguageVersionSettings ) { val defaultImports: List get() = targetPlatform.defaultImports val excludedImports: List by storageManager.createLazyValue { val packagesWithAliases = listOf(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME, KotlinBuiltIns.TEXT_PACKAGE_FQ_NAME) - val builtinTypeAliases = moduleDescriptor.allDependentModules.flatMap { dependentModule -> - packagesWithAliases.map(dependentModule::getPackage).flatMap { - it.memberScope.getContributedDescriptors(DescriptorKindFilter.TYPE_ALIASES).filterIsInstance() - } - } + val builtinTypeAliases = moduleDescriptor.allDependentModules + .flatMap { dependentModule -> + packagesWithAliases.map(dependentModule::getPackage).flatMap { + it.memberScope.getContributedDescriptors(DescriptorKindFilter.TYPE_ALIASES).filterIsInstance() + } + } + .filter { it.checkSinceKotlinVersionAccessibility(languageVersionSettings) } + val nonKotlinDefaultImportedPackages = defaultImports diff --git a/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliases.kt b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliases.kt new file mode 100644 index 00000000000..7639d72c72f --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliases.kt @@ -0,0 +1,3 @@ +// FILE: test.kt +val fooException = Exception("foo") +val barException = kotlin.Exception("bar") diff --git a/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliases.txt b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliases.txt new file mode 100644 index 00000000000..e68a8e2d396 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliases.txt @@ -0,0 +1,4 @@ +package + +public val barException: java.lang.Exception +public val fooException: java.lang.Exception diff --git a/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithApiVersion1_0.kt b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithApiVersion1_0.kt new file mode 100644 index 00000000000..80cc7440061 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithApiVersion1_0.kt @@ -0,0 +1,5 @@ +// !LANGUAGE: +TypeAliases +// !API_VERSION: 1.0 +// FILE: test.kt +val fooException = Exception("foo") +val barException = kotlin.Exception("bar") diff --git a/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithApiVersion1_0.txt b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithApiVersion1_0.txt new file mode 100644 index 00000000000..2f65e9970c7 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithApiVersion1_0.txt @@ -0,0 +1,4 @@ +package + +public val barException: [ERROR : Type for kotlin.Exception("bar")] +public val fooException: java.lang.Exception diff --git a/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithoutFeature.kt b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithoutFeature.kt new file mode 100644 index 00000000000..66b41670c8e --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithoutFeature.kt @@ -0,0 +1,4 @@ +// !LANGUAGE: -TypeAliases +// FILE: test.kt +val fooException = Exception("foo") +val barException = kotlin.Exception("bar") diff --git a/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithoutFeature.txt b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithoutFeature.txt new file mode 100644 index 00000000000..2f65e9970c7 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithoutFeature.txt @@ -0,0 +1,4 @@ +package + +public val barException: [ERROR : Type for kotlin.Exception("bar")] +public val fooException: java.lang.Exception diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java index b0929f3be95..12ccf2c41fc 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestWithStdLibGenerated.java @@ -1270,6 +1270,24 @@ public class DiagnosticsTestWithStdLibGenerated extends AbstractDiagnosticsTestW KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/testsWithStdLib/typealias"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("exceptionTypeAliases.kt") + public void testExceptionTypeAliases() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliases.kt"); + doTest(fileName); + } + + @TestMetadata("exceptionTypeAliasesInvisibleWithApiVersion1_0.kt") + public void testExceptionTypeAliasesInvisibleWithApiVersion1_0() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithApiVersion1_0.kt"); + doTest(fileName); + } + + @TestMetadata("exceptionTypeAliasesInvisibleWithoutFeature.kt") + public void testExceptionTypeAliasesInvisibleWithoutFeature() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/typealias/exceptionTypeAliasesInvisibleWithoutFeature.kt"); + doTest(fileName); + } + @TestMetadata("typeAliasSamAdapterConstructors.kt") public void testTypeAliasSamAdapterConstructors() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/testsWithStdLib/typealias/typeAliasSamAdapterConstructors.kt");