From 1f17d7adcd423e7e87c5daf5015fd04e22d2942b Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Wed, 24 Dec 2014 20:05:15 +0300 Subject: [PATCH] Changed language sematics: imports with '*' do not import packages anymore --- .../jet/lang/resolve/ClassesInPackageScope.kt | 39 +++++++++++++++++++ .../jetbrains/jet/lang/resolve/Importer.java | 6 +-- .../diagnostics/tests/PackageQualified.kt | 5 ++- .../diagnostics/tests/PackageQualified.txt | 3 +- .../tests/ResolveOfJavaGenerics.kt | 2 +- .../diagnostics/tests/ResolveToJava.kt | 1 + .../testData/resolve/ResolveToJava.resolve | 1 + idea/testData/checker/ResolveToJava.kt | 1 + .../TopLevelFunctionInQualifiedExpr-1.kt | 2 +- .../TopLevelFunctionInQualifiedExpr.kt.after | 2 +- .../rename/renameKotlinClass/after/Second.kt | 2 +- .../rename/renameKotlinClass/before/Second.kt | 2 +- .../constructor/LeaveQualified1.kt.after | 4 +- .../constructor/LeaveQualified2.kt.after | 4 +- .../constructor/LeaveQualified3.kt.after | 4 +- .../constructor/LeaveQualified5.kt.after | 4 +- 16 files changed, 66 insertions(+), 16 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassesInPackageScope.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassesInPackageScope.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassesInPackageScope.kt new file mode 100644 index 00000000000..143d9a7841e --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ClassesInPackageScope.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve + +import org.jetbrains.jet.lang.resolve.scopes.JetScope +import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor +import org.jetbrains.jet.lang.resolve.name.Name +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor +import org.jetbrains.jet.lang.resolve.scopes.DescriptorKindFilter + +class ClassesInPackageScope(packageDescriptor: PackageViewDescriptor) : JetScope by packageDescriptor.getMemberScope() { + private val memberScope = packageDescriptor.getMemberScope() + + override fun getPackage(name: Name): PackageViewDescriptor? = null + + override fun getDescriptors(kindFilter: DescriptorKindFilter, nameFilter: (Name) -> Boolean): Collection { + val modifiedFilter = kindFilter.withoutKinds(DescriptorKindFilter.PACKAGES_MASK) + if (modifiedFilter.kindMask == 0) return listOf() + return memberScope.getDescriptors(modifiedFilter, nameFilter).filter { it !is PackageViewDescriptor } + } + + override fun getOwnDeclaredDescriptors(): Collection { + return memberScope.getOwnDeclaredDescriptors().filter { it !is PackageViewDescriptor } + } +} \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java index eb61abb0d21..48878825385 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java @@ -24,9 +24,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.resolve.scopes.FilteringScope; -import org.jetbrains.jet.lang.resolve.scopes.JetScope; -import org.jetbrains.jet.lang.resolve.scopes.WritableScope; +import org.jetbrains.jet.lang.resolve.scopes.*; import java.util.ArrayList; import java.util.Collection; @@ -88,7 +86,7 @@ public interface Importer { protected void importAllUnderDeclaration(@NotNull DeclarationDescriptor descriptor, @NotNull PlatformToKotlinClassMap platformToKotlinClassMap) { List scopesToImport = new ArrayList(3); if (descriptor instanceof PackageViewDescriptor) { - scopesToImport.add(((PackageViewDescriptor) descriptor).getMemberScope()); + scopesToImport.add(new ClassesInPackageScope((PackageViewDescriptor) descriptor)); } else if (descriptor instanceof ClassDescriptor && ((ClassDescriptor) descriptor).getKind() != ClassKind.OBJECT) { ClassDescriptor classDescriptor = (ClassDescriptor) descriptor; diff --git a/compiler/testData/diagnostics/tests/PackageQualified.kt b/compiler/testData/diagnostics/tests/PackageQualified.kt index 77229743413..16565f06fd6 100644 --- a/compiler/testData/diagnostics/tests/PackageQualified.kt +++ b/compiler/testData/diagnostics/tests/PackageQualified.kt @@ -4,8 +4,9 @@ package foobar.a import java.* - val a : util.List? = null - val a1 : ArrayList? = null + val a : java.util.List? = null + val a2 : util.List? = null + val a3 : ArrayList? = null // FILE: b.kt package foobar diff --git a/compiler/testData/diagnostics/tests/PackageQualified.txt b/compiler/testData/diagnostics/tests/PackageQualified.txt index feb962601ba..aeb4f04af0a 100644 --- a/compiler/testData/diagnostics/tests/PackageQualified.txt +++ b/compiler/testData/diagnostics/tests/PackageQualified.txt @@ -58,7 +58,8 @@ package foobar { package foobar.a { internal val a: java.util.List? = null - internal val a1: [ERROR : ArrayList]? + internal val a2: [ERROR : util.List]? + internal val a3: [ERROR : ArrayList]? internal val b: kotlin.List? = null internal val b1: [ERROR : util.List]? } diff --git a/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.kt b/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.kt index 80ab713f93f..52f218c07ec 100644 --- a/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.kt +++ b/compiler/testData/diagnostics/tests/ResolveOfJavaGenerics.kt @@ -1,5 +1,5 @@ // Fixpoint generic in Java: Enum> -fun test(a : annotation.RetentionPolicy) { +fun test(a : java.lang.annotation.RetentionPolicy) { } diff --git a/compiler/testData/diagnostics/tests/ResolveToJava.kt b/compiler/testData/diagnostics/tests/ResolveToJava.kt index a127e96b41c..52a62db2613 100644 --- a/compiler/testData/diagnostics/tests/ResolveToJava.kt +++ b/compiler/testData/diagnostics/tests/ResolveToJava.kt @@ -6,6 +6,7 @@ import utils.* import java.io.PrintStream import java.lang.Comparable as Com +import java.util val l : MutableList = ArrayList() diff --git a/compiler/testData/resolve/ResolveToJava.resolve b/compiler/testData/resolve/ResolveToJava.resolve index c1f9e0ad0d9..675db2bb291 100644 --- a/compiler/testData/resolve/ResolveToJava.resolve +++ b/compiler/testData/resolve/ResolveToJava.resolve @@ -1,5 +1,6 @@ import `java::java`java.* import java.`java::java.util`util.* +import java.util fun foo(~a~a : `kotlin::Array`Array<`kotlin::Int`Int>) : `java::java.util.ArrayList`ArrayList { `a`a.`kotlin::Array.get(Int)`get(1) diff --git a/idea/testData/checker/ResolveToJava.kt b/idea/testData/checker/ResolveToJava.kt index 12e68044a07..383532b0e39 100644 --- a/idea/testData/checker/ResolveToJava.kt +++ b/idea/testData/checker/ResolveToJava.kt @@ -1,5 +1,6 @@ import java.* import java.util.* +import java.util import utils.* import java.io.PrintStream diff --git a/idea/testData/completion/handlers/multifile/TopLevelFunctionInQualifiedExpr-1.kt b/idea/testData/completion/handlers/multifile/TopLevelFunctionInQualifiedExpr-1.kt index 62ef681718e..cdd7fd054a1 100644 --- a/idea/testData/completion/handlers/multifile/TopLevelFunctionInQualifiedExpr-1.kt +++ b/idea/testData/completion/handlers/multifile/TopLevelFunctionInQualifiedExpr-1.kt @@ -1,6 +1,6 @@ package some -import jettesting.* +import jettesting.data fun other() { data.topLevelFu diff --git a/idea/testData/completion/handlers/multifile/TopLevelFunctionInQualifiedExpr.kt.after b/idea/testData/completion/handlers/multifile/TopLevelFunctionInQualifiedExpr.kt.after index d3905ced711..d823bc4112b 100644 --- a/idea/testData/completion/handlers/multifile/TopLevelFunctionInQualifiedExpr.kt.after +++ b/idea/testData/completion/handlers/multifile/TopLevelFunctionInQualifiedExpr.kt.after @@ -1,6 +1,6 @@ package some -import jettesting.* +import jettesting.data fun other() { data.topLevelFunction() diff --git a/idea/testData/refactoring/rename/renameKotlinClass/after/Second.kt b/idea/testData/refactoring/rename/renameKotlinClass/after/Second.kt index f4fce31f8be..c925c15a2eb 100644 --- a/idea/testData/refactoring/rename/renameKotlinClass/after/Second.kt +++ b/idea/testData/refactoring/rename/renameKotlinClass/after/Second.kt @@ -1,7 +1,7 @@ package testing.rename2 import testing.rename.Third -import testing.* +import testing.rename import java.util.ArrayList // Extends testing.rename.Third diff --git a/idea/testData/refactoring/rename/renameKotlinClass/before/Second.kt b/idea/testData/refactoring/rename/renameKotlinClass/before/Second.kt index 67412fc6328..d706e5d2367 100644 --- a/idea/testData/refactoring/rename/renameKotlinClass/before/Second.kt +++ b/idea/testData/refactoring/rename/renameKotlinClass/before/Second.kt @@ -1,7 +1,7 @@ package testing.rename2 import testing.rename.First -import testing.* +import testing.rename import java.util.ArrayList // Extends testing.rename.First diff --git a/idea/testData/shortenRefs/constructor/LeaveQualified1.kt.after b/idea/testData/shortenRefs/constructor/LeaveQualified1.kt.after index 649e81a40d2..95b558b552b 100644 --- a/idea/testData/shortenRefs/constructor/LeaveQualified1.kt.after +++ b/idea/testData/shortenRefs/constructor/LeaveQualified1.kt.after @@ -1,5 +1,7 @@ +import java.io + fun File(): String = "" class A { - val x = java.io.File() + val x = io.File() } diff --git a/idea/testData/shortenRefs/constructor/LeaveQualified2.kt.after b/idea/testData/shortenRefs/constructor/LeaveQualified2.kt.after index fb504edad84..a3429f3587c 100644 --- a/idea/testData/shortenRefs/constructor/LeaveQualified2.kt.after +++ b/idea/testData/shortenRefs/constructor/LeaveQualified2.kt.after @@ -1,5 +1,7 @@ +import java.util + fun Random(): Int = 1 class A { - val x = java.util.Random() + val x = util.Random() } diff --git a/idea/testData/shortenRefs/constructor/LeaveQualified3.kt.after b/idea/testData/shortenRefs/constructor/LeaveQualified3.kt.after index 45ec568b883..e231a04e2b4 100644 --- a/idea/testData/shortenRefs/constructor/LeaveQualified3.kt.after +++ b/idea/testData/shortenRefs/constructor/LeaveQualified3.kt.after @@ -1,4 +1,6 @@ +import java.util + fun foo(){ val Random = {} - val x = java.util.Random() + val x = util.Random() } diff --git a/idea/testData/shortenRefs/constructor/LeaveQualified5.kt.after b/idea/testData/shortenRefs/constructor/LeaveQualified5.kt.after index 362cabe8006..78b3622f497 100644 --- a/idea/testData/shortenRefs/constructor/LeaveQualified5.kt.after +++ b/idea/testData/shortenRefs/constructor/LeaveQualified5.kt.after @@ -1,6 +1,8 @@ +import java.io + fun File(p: Int): String = "" fun File(p: String): String = "" class A { - val x = java.io.File() + val x = io.File() }