From 0132f3eea727946182aa4c9a7f5a5a74238bd9fb Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Wed, 14 Dec 2016 14:50:48 +0300 Subject: [PATCH] Remove kotlin.coroutine package from default imports. --- .../common/commonCoroutineCodegenUtil.kt | 8 ++---- .../resolve/jvm/platform/JvmPlatform.kt | 2 +- .../kotlin/resolve/TargetPlatform.kt | 1 - .../coroutines/noDefaultCoroutineImports.kt | 8 ++++++ .../coroutines/noDefaultCoroutineImports.txt | 4 +++ .../checkers/DiagnosticsTestGenerated.java | 6 ++++ .../kotlin/builtins/KotlinBuiltIns.java | 28 ++++++++++++------- .../src/kotlin/jvm/internal/CoroutineImpl.kt | 2 ++ .../idea/completion/AllClassesCompletion.kt | 2 +- 9 files changed, 43 insertions(+), 18 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/coroutines/noDefaultCoroutineImports.kt create mode 100644 compiler/testData/diagnostics/tests/coroutines/noDefaultCoroutineImports.txt diff --git a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/commonCoroutineCodegenUtil.kt b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/commonCoroutineCodegenUtil.kt index bdedbb359b8..a82160a8788 100644 --- a/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/commonCoroutineCodegenUtil.kt +++ b/compiler/backend-common/src/org/jetbrains/kotlin/backend/common/commonCoroutineCodegenUtil.kt @@ -16,7 +16,6 @@ package org.jetbrains.kotlin.backend.common -import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.name.Name @@ -25,7 +24,6 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns val SUSPEND_WITH_CURRENT_CONTINUATION_NAME = Name.identifier("suspendWithCurrentContinuation") fun FunctionDescriptor.getBuiltInSuspendWithCurrentContinuation() = - builtIns.builtInsPackageFragments.singleOrNull { it.fqName == KotlinBuiltIns.COROUTINES_PACKAGE_FQ_NAME } - ?.getMemberScope() - ?.getContributedFunctions(SUSPEND_WITH_CURRENT_CONTINUATION_NAME, NoLookupLocation.FROM_BACKEND) - ?.singleOrNull() + builtIns.builtInsCoroutinePackageFragment.getMemberScope() + .getContributedFunctions(SUSPEND_WITH_CURRENT_CONTINUATION_NAME, NoLookupLocation.FROM_BACKEND) + .singleOrNull() diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt index 0e0745f3aec..76bfa42a2f7 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/platform/JvmPlatform.kt @@ -42,7 +42,7 @@ object JvmPlatform : TargetPlatform("JVM") { } val builtIns = JvmBuiltIns(LockBasedStorageManager.NO_LOCKS) - for (builtinPackageFragment in builtIns.builtInsPackageFragments) { + for (builtinPackageFragment in builtIns.builtInsPackageFragmentsImportedByDefault) { addAllClassifiersFromScope(builtinPackageFragment.getMemberScope()) } } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt index 321962c29dc..ad1ccb40cbb 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/TargetPlatform.kt @@ -43,7 +43,6 @@ abstract class TargetPlatform(val platformName: String) { add(ImportPath("kotlin.*")) add(ImportPath("kotlin.annotation.*")) add(ImportPath("kotlin.collections.*")) - add(ImportPath("kotlin.coroutines.*")) add(ImportPath("kotlin.ranges.*")) add(ImportPath("kotlin.sequences.*")) add(ImportPath("kotlin.text.*")) diff --git a/compiler/testData/diagnostics/tests/coroutines/noDefaultCoroutineImports.kt b/compiler/testData/diagnostics/tests/coroutines/noDefaultCoroutineImports.kt new file mode 100644 index 00000000000..7472bcd6967 --- /dev/null +++ b/compiler/testData/diagnostics/tests/coroutines/noDefaultCoroutineImports.kt @@ -0,0 +1,8 @@ +// FILE: 1.kt + +fun test(c: Continuation) {} + +// FILE: 2.kt +import kotlin.coroutines.* + +fun test2(c: Continuation) {} diff --git a/compiler/testData/diagnostics/tests/coroutines/noDefaultCoroutineImports.txt b/compiler/testData/diagnostics/tests/coroutines/noDefaultCoroutineImports.txt new file mode 100644 index 00000000000..ecd5c30af16 --- /dev/null +++ b/compiler/testData/diagnostics/tests/coroutines/noDefaultCoroutineImports.txt @@ -0,0 +1,4 @@ +package + +public fun test(/*0*/ c: [ERROR : Continuation]): kotlin.Unit +public fun test2(/*0*/ c: kotlin.coroutines.Continuation): kotlin.Unit diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 1b686be5bb1..95945d94ef3 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -4276,6 +4276,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("noDefaultCoroutineImports.kt") + public void testNoDefaultCoroutineImports() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/coroutines/noDefaultCoroutineImports.kt"); + doTest(fileName); + } + @TestMetadata("nonLocalSuspension.kt") public void testNonLocalSuspension() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/coroutines/nonLocalSuspension.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java index 8e50d1a5592..bffd1820eba 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java +++ b/core/descriptors/src/org/jetbrains/kotlin/builtins/KotlinBuiltIns.java @@ -92,11 +92,11 @@ public abstract class KotlinBuiltIns { PackageFragmentDescriptor kotlinCollections = createPackage(provider, nameToFragment, COLLECTIONS_PACKAGE_FQ_NAME); createPackage(provider, nameToFragment, RANGES_PACKAGE_FQ_NAME); PackageFragmentDescriptor kotlinAnnotation = createPackage(provider, nameToFragment, ANNOTATION_PACKAGE_FQ_NAME); - createPackage(provider, nameToFragment, COROUTINES_PACKAGE_FQ_NAME); + PackageFragmentDescriptor coroutinePackage = createPackage(provider, null, COROUTINES_PACKAGE_FQ_NAME); - Set all = new LinkedHashSet(nameToFragment.values()); + Set allImportedByDefault = new LinkedHashSet(nameToFragment.values()); - return new PackageFragments(kotlin, kotlinCollections, kotlinAnnotation, all); + return new PackageFragments(kotlin, kotlinCollections, kotlinAnnotation, coroutinePackage, allImportedByDefault); } }); @@ -174,7 +174,7 @@ public abstract class KotlinBuiltIns { @NotNull private PackageFragmentDescriptor createPackage( @NotNull PackageFragmentProvider fragmentProvider, - @NotNull Map packageNameToPackageFragment, + @Nullable Map packageNameToPackageFragment, @NotNull final FqName packageFqName ) { final List packageFragments = fragmentProvider.getPackageFragments(packageFqName); @@ -203,7 +203,7 @@ public abstract class KotlinBuiltIns { } }; - packageNameToPackageFragment.put(packageFqName, result); + if (packageNameToPackageFragment != null) packageNameToPackageFragment.put(packageFqName, result); return result; } @@ -232,18 +232,21 @@ public abstract class KotlinBuiltIns { public final PackageFragmentDescriptor builtInsPackageFragment; public final PackageFragmentDescriptor collectionsPackageFragment; public final PackageFragmentDescriptor annotationPackageFragment; - public final Set builtInsPackageFragments; + public final PackageFragmentDescriptor coroutinePackageFragment; + public final Set allImportedByDefaultBuiltInsPackageFragments; private PackageFragments( @NotNull PackageFragmentDescriptor builtInsPackageFragment, @NotNull PackageFragmentDescriptor collectionsPackageFragment, @NotNull PackageFragmentDescriptor annotationPackageFragment, - @NotNull Set builtInsPackageFragments + @NotNull PackageFragmentDescriptor coroutinePackageFragment, + @NotNull Set allImportedByDefaultBuiltInsPackageFragments ) { this.builtInsPackageFragment = builtInsPackageFragment; this.collectionsPackageFragment = collectionsPackageFragment; this.annotationPackageFragment = annotationPackageFragment; - this.builtInsPackageFragments = builtInsPackageFragments; + this.coroutinePackageFragment = coroutinePackageFragment; + this.allImportedByDefaultBuiltInsPackageFragments = allImportedByDefaultBuiltInsPackageFragments; } } @@ -368,8 +371,13 @@ public abstract class KotlinBuiltIns { } @NotNull - public Set getBuiltInsPackageFragments() { - return packageFragments.invoke().builtInsPackageFragments; + public Set getBuiltInsPackageFragmentsImportedByDefault() { + return packageFragments.invoke().allImportedByDefaultBuiltInsPackageFragments; + } + + @NotNull + public PackageFragmentDescriptor getBuiltInsCoroutinePackageFragment() { + return packageFragments.invoke().coroutinePackageFragment; } @NotNull diff --git a/core/runtime.jvm/src/kotlin/jvm/internal/CoroutineImpl.kt b/core/runtime.jvm/src/kotlin/jvm/internal/CoroutineImpl.kt index 6a0fbbb8279..2885486885f 100644 --- a/core/runtime.jvm/src/kotlin/jvm/internal/CoroutineImpl.kt +++ b/core/runtime.jvm/src/kotlin/jvm/internal/CoroutineImpl.kt @@ -16,6 +16,8 @@ package kotlin.jvm.internal +import kotlin.coroutines.* + private const val INTERCEPT_BIT_SET = 1 shl 31 private const val INTERCEPT_BIT_CLEAR = INTERCEPT_BIT_SET.inv() diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt index 432cc85a236..fe7d6345796 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/AllClassesCompletion.kt @@ -50,7 +50,7 @@ class AllClassesCompletion(private val parameters: CompletionParameters, //TODO: this is a temporary solution until we have built-ins in indices // we need only nested classes because top-level built-ins are all added through default imports - for (builtinPackage in resolutionFacade.moduleDescriptor.builtIns.builtInsPackageFragments) { + for (builtinPackage in resolutionFacade.moduleDescriptor.builtIns.builtInsPackageFragmentsImportedByDefault) { collectClassesFromScope(builtinPackage.getMemberScope()) { if (it.containingDeclaration is ClassDescriptor) { classifierDescriptorCollector(it)