From ae4c68830d9c7fa3e116d5894f5a3fd03c329136 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 15 Jan 2014 21:05:37 +0400 Subject: [PATCH] Importing root scope without members. --- .../jet/lang/resolve/ImportsResolver.java | 20 +++++---- .../jet/lang/resolve/JetModuleUtil.java | 20 +++++++++ .../jet/lang/resolve/TopDownAnalyzer.java | 7 +-- .../lang/resolve/lazy/LazyImportScope.java | 14 +++--- .../jet/lang/resolve/lazy/ScopeProvider.java | 14 +++--- .../tests/enum/javaEnumValueOfMethod.kt | 2 - .../tests/enum/javaEnumValuesMethod.kt | 2 - .../tests/enum/javaEnumWithAbstractFun.kt | 2 - .../tests/enum/javaEnumWithFuns.kt | 2 - .../tests/enum/javaEnumWithNameClashing.kt | 2 - .../tests/enum/javaEnumWithProperty.kt | 2 - .../scopes/AmbiguityBetweenRootAndPackage.kt | 16 +++---- .../NoAmbiguityBetweenRootAndPackage.kt | 12 ++++++ .../tests/scopes/dontImportRootScope.kt | 25 +++++++++++ .../resolve/DontImportRootScope.resolve | 28 ++++++++++++ ...tingRootScopeWhenProcessingImports.resolve | 29 +++++++++++++ ...flictBetweenImportedAndRootPackage.resolve | 2 +- .../checkers/JetDiagnosticsTestGenerated.java | 10 +++++ .../jet/resolve/ResolveTestGenerated.java | 10 +++++ .../lang/descriptors/ModuleDescriptor.java | 1 + .../jet/generators/tests/GenerateTests.kt | 2 +- .../ImplementJavaAbstractClassInKotlin.kt | 4 +- .../ImplementJavaClassInKotlin.kt | 4 +- .../ImplementJavaInterfaceInKotlin.kt | 6 +-- .../ImplementMethodInKotlin.kt | 4 +- .../quickfix/autoImports/divOperator.after.kt | 2 + .../autoImports/divOperator.before.Main.kt | 2 + .../divOperator.before.data.Sample.kt | 2 +- .../quickfix/autoImports/infixCall.after.kt | 2 + .../autoImports/infixCall.before.Main.kt | 2 + .../infixCall.before.data.Sample.kt | 2 +- .../autoImports/minusOperator.after.kt | 4 +- .../autoImports/minusOperator.before.Main.kt | 4 +- .../minusOperator.before.data.Sample.kt | 2 +- .../autoImports/plusOperator.after.kt | 2 + .../autoImports/plusOperator.before.Main.kt | 2 + .../plusOperator.before.data.Sample.kt | 2 +- .../autoImports/postfixOperator.after.kt | 2 + .../postfixOperator.before.Main.kt | 2 + .../postfixOperator.before.data.Sample.kt | 2 +- .../quickfix/autoImports/timesAssign.after.kt | 2 + .../autoImports/timesAssign.before.Main.kt | 2 + .../timesAssign.before.data.Sample.kt | 4 +- .../autoImports/unaryMinusOperator.after.kt | 2 + .../unaryMinusOperator.before.Main.kt | 2 + .../unaryMinusOperator.before.data.Sample.kt | 2 +- .../autoImports/unaryPlusOperator.after.kt | 4 +- .../unaryPlusOperator.before.Main.kt | 4 +- .../unaryPlusOperator.before.data.Sample.kt | 2 +- .../references/DontImportRootScope.Data.kt | 2 + .../resolve/references/DontImportRootScope.kt | 5 +++ .../resolve/references/FakeJavaLang1.Data.kt | 5 +++ .../resolve/references/FakeJavaLang1.kt | 7 +++ .../resolve/references/FakeJavaLang2.Data.kt | 5 +++ .../resolve/references/FakeJavaLang2.kt | 5 +++ .../resolve/references/FakeJavaLang3.Data.kt | 5 +++ .../resolve/references/FakeJavaLang3.kt | 8 ++++ .../resolve/references/FakeJavaLang4.Data.kt | 5 +++ .../resolve/references/FakeJavaLang4.kt | 7 +++ .../resolve/AbstractReferenceResolveTest.java | 10 ++++- .../ReferenceResolveTestGenerated.java | 43 +++++++++++++++---- 61 files changed, 316 insertions(+), 89 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/scopes/NoAmbiguityBetweenRootAndPackage.kt create mode 100644 compiler/testData/diagnostics/tests/scopes/dontImportRootScope.kt create mode 100644 compiler/testData/resolve/DontImportRootScope.resolve create mode 100644 compiler/testData/resolve/ImportingRootScopeWhenProcessingImports.resolve create mode 100644 idea/testData/resolve/references/DontImportRootScope.Data.kt create mode 100644 idea/testData/resolve/references/DontImportRootScope.kt create mode 100644 idea/testData/resolve/references/FakeJavaLang1.Data.kt create mode 100644 idea/testData/resolve/references/FakeJavaLang1.kt create mode 100644 idea/testData/resolve/references/FakeJavaLang2.Data.kt create mode 100644 idea/testData/resolve/references/FakeJavaLang2.kt create mode 100644 idea/testData/resolve/references/FakeJavaLang3.Data.kt create mode 100644 idea/testData/resolve/references/FakeJavaLang3.kt create mode 100644 idea/testData/resolve/references/FakeJavaLang4.Data.kt create mode 100644 idea/testData/resolve/references/FakeJavaLang4.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java index 22590033045..f2d6a40e021 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ImportsResolver.java @@ -22,7 +22,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; -import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; @@ -83,16 +82,16 @@ public class ImportsResolver { private void processImports(@NotNull LookupMode lookupMode) { for (JetFile file : context.getPackageFragments().keySet()) { WritableScope fileScope = context.getFileScopes().get(file); - processImportsInFile(lookupMode, fileScope, Lists.newArrayList(file.getImportDirectives())); + processImportsInFile(lookupMode, fileScope, Lists.newArrayList(file.getImportDirectives()), JetPsiUtil.getFQName(file).isRoot()); } for (JetScript script : context.getScripts().keySet()) { WritableScope scriptScope = context.getScriptScopes().get(script); - processImportsInFile(lookupMode, scriptScope, script.getImportDirectives()); + processImportsInFile(lookupMode, scriptScope, script.getImportDirectives(), true); } } - private void processImportsInFile(@NotNull LookupMode lookupMode, WritableScope scope, List directives) { - processImportsInFile(lookupMode, scope, directives, moduleDescriptor, trace, qualifiedExpressionResolver, importsFactory); + private void processImportsInFile(@NotNull LookupMode lookupMode, WritableScope scope, List directives, boolean inRootPackage) { + processImportsInFile(lookupMode, scope, directives, moduleDescriptor, trace, qualifiedExpressionResolver, importsFactory, inRootPackage); } private static void processImportsInFile( @@ -102,9 +101,10 @@ public class ImportsResolver { @NotNull ModuleDescriptor module, @NotNull BindingTrace trace, @NotNull QualifiedExpressionResolver qualifiedExpressionResolver, - @NotNull JetImportsFactory importsFactory + @NotNull JetImportsFactory importsFactory, + boolean inRootPackage ) { - @NotNull JetScope rootScope = module.getPackage(FqName.ROOT).getMemberScope(); + @NotNull JetScope rootScope = JetModuleUtil.getSubpackagesOfRootScope(module); Importer.DelayedImporter delayedImporter = new Importer.DelayedImporter(fileScope); if (lookupMode == LookupMode.EVERYTHING) { @@ -122,10 +122,12 @@ public class ImportsResolver { Map> resolvedDirectives = Maps.newHashMap(); + JetScope rootScopeForFile = JetModuleUtil.getImportsResolutionScope(module, inRootPackage); + for (JetImportDirective importDirective : importDirectives) { Collection descriptors = - qualifiedExpressionResolver.processImportReference(importDirective, rootScope, fileScope, delayedImporter, - trace, module, lookupMode); + qualifiedExpressionResolver.processImportReference(importDirective, rootScopeForFile, fileScope, delayedImporter, + trace, module, lookupMode); if (!descriptors.isEmpty()) { resolvedDirectives.put(importDirective, descriptors); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/JetModuleUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/JetModuleUtil.java index 22d6ecea5ad..a12782b0646 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/JetModuleUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/JetModuleUtil.java @@ -16,7 +16,12 @@ package org.jetbrains.jet.lang.resolve; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; +import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor; +import org.jetbrains.jet.lang.descriptors.impl.SubpackagesScope; import org.jetbrains.jet.lang.psi.JetElement; +import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.SpecialNames; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; @@ -27,4 +32,19 @@ public class JetModuleUtil { // TODO: this is a stub: at least the modules' root packages must be indexed here return new PackageType(SpecialNames.ROOT_PACKAGE, JetScope.EMPTY, ReceiverValue.NO_RECEIVER); } + + public static JetScope getSubpackagesOfRootScope(@NotNull ModuleDescriptor module) { + return getRootPackageScope(module, /* scopeIncludingMembers = */ false); + } + + public static JetScope getImportsResolutionScope(ModuleDescriptor module, boolean inRootPackage) { + return getRootPackageScope(module, /* scopeIncludingMembers = */ inRootPackage); + } + + private static JetScope getRootPackageScope(ModuleDescriptor module, boolean scopeIncludingMembers) { + PackageViewDescriptor rootPackage = module.getPackage(FqName.ROOT); + assert rootPackage != null : "Couldn't find root package for " + module; + + return scopeIncludingMembers ? rootPackage.getMemberScope() : new SubpackagesScope(rootPackage); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java index a6b3a4b17d9..6dbe79362d7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TopDownAnalyzer.java @@ -217,14 +217,9 @@ public class TopDownAnalyzer { // "depend on" builtins module ((ModuleDescriptorImpl) moduleDescriptor).addFragmentProvider(DependencyKind.BUILT_INS, KotlinBuiltIns.getInstance().getBuiltInsModule().getPackageFragmentProvider()); - // Import a scope that contains all top-level packages that come from dependencies - // This makes the package visible at all, does not import themselves - PackageViewDescriptor rootPackage = moduleDescriptor.getPackage(FqName.ROOT); - assert rootPackage != null : "Coulnd't find root package for " + moduleDescriptor; - // dummy builder is used because "root" is module descriptor, // packages added to module explicitly in - doProcess(rootPackage.getMemberScope(), new PackageLikeBuilderDummy(), files); + doProcess(JetModuleUtil.getSubpackagesOfRootScope(moduleDescriptor), new PackageLikeBuilderDummy(), files); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.java index a5bcc6ae95a..314257caa7f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/LazyImportScope.java @@ -28,7 +28,7 @@ import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetImportDirective; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.Importer; -import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.JetModuleUtil; import org.jetbrains.jet.lang.resolve.name.LabelName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.*; @@ -123,7 +123,8 @@ public class LazyImportScope implements JetScope { @NotNull PackageViewDescriptor packageDescriptor, @NotNull List imports, @NotNull BindingTrace traceForImportResolve, - @NotNull String debugName + @NotNull String debugName, + boolean inRootPackage ) { this.resolveSession = resolveSession; this.packageDescriptor = packageDescriptor; @@ -138,11 +139,7 @@ public class LazyImportScope implements JetScope { } }); - PackageViewDescriptor rootPackage = resolveSession.getModuleDescriptor().getPackage(FqName.ROOT); - if (rootPackage == null) { - throw new IllegalStateException("Root package not found"); - } - rootScope = rootPackage.getMemberScope(); + this.rootScope = JetModuleUtil.getImportsResolutionScope(resolveSession.getModuleDescriptor(), inRootPackage); } public static LazyImportScope createImportScopeForFile( @@ -157,7 +154,8 @@ public class LazyImportScope implements JetScope { packageDescriptor, Lists.reverse(jetFile.getImportDirectives()), traceForImportResolve, - debugName); + debugName, + packageDescriptor.getFqName().isRoot()); } @Nullable diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java index 9139027f21d..fbcddbf0f39 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ScopeProvider.java @@ -25,6 +25,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.ImportPath; +import org.jetbrains.jet.lang.resolve.JetModuleUtil; import org.jetbrains.jet.lang.resolve.TemporaryBindingTrace; import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -66,12 +67,8 @@ public class ScopeProvider { return fileScopes.invoke(file); } - private JetScope createFileScope(JetFile file) { - PackageViewDescriptor rootPackageDescriptor = resolveSession.getModuleDescriptor().getPackage(FqName.ROOT); - if (rootPackageDescriptor == null) { - throw new IllegalStateException("Root package not found"); - } - + @NotNull + private JetScope createFileScope(@NotNull JetFile file) { PackageViewDescriptor packageDescriptor = getFilePackageDescriptor(file); JetScope importsScope = LazyImportScope.createImportScopeForFile( @@ -84,7 +81,7 @@ public class ScopeProvider { return new ChainedScope(resolveSession.getPackageFragment(JetPsiUtil.getFQName(file)), "File scope: " + file.getName(), packageDescriptor.getMemberScope(), - rootPackageDescriptor.getMemberScope(), + JetModuleUtil.getSubpackagesOfRootScope(resolveSession.getModuleDescriptor()), importsScope, defaultImportsScope.invoke()); } @@ -105,7 +102,8 @@ public class ScopeProvider { rootPackage, Lists.reverse(Lists.newArrayList(defaultImportDirectives)), TemporaryBindingTrace.create(resolveSession.getTrace(), "Transient trace for default imports lazy resolve"), - "Lazy default imports scope"); + "Lazy default imports scope", + false); } @NotNull diff --git a/compiler/testData/diagnostics/tests/enum/javaEnumValueOfMethod.kt b/compiler/testData/diagnostics/tests/enum/javaEnumValueOfMethod.kt index cf408feb21d..aef7c30e4e6 100644 --- a/compiler/testData/diagnostics/tests/enum/javaEnumValueOfMethod.kt +++ b/compiler/testData/diagnostics/tests/enum/javaEnumValueOfMethod.kt @@ -4,8 +4,6 @@ public enum A { } // FILE: test.kt -package test - fun main() { A.valueOf("ENTRY"): A } diff --git a/compiler/testData/diagnostics/tests/enum/javaEnumValuesMethod.kt b/compiler/testData/diagnostics/tests/enum/javaEnumValuesMethod.kt index d644c41921f..57ea1b043bd 100644 --- a/compiler/testData/diagnostics/tests/enum/javaEnumValuesMethod.kt +++ b/compiler/testData/diagnostics/tests/enum/javaEnumValuesMethod.kt @@ -5,8 +5,6 @@ public enum A { } // FILE: test.kt -package vvv - fun main() { A.values(): Array } diff --git a/compiler/testData/diagnostics/tests/enum/javaEnumWithAbstractFun.kt b/compiler/testData/diagnostics/tests/enum/javaEnumWithAbstractFun.kt index 9a4d8b7c23f..4eba037009e 100644 --- a/compiler/testData/diagnostics/tests/enum/javaEnumWithAbstractFun.kt +++ b/compiler/testData/diagnostics/tests/enum/javaEnumWithAbstractFun.kt @@ -10,8 +10,6 @@ public enum A { } // FILE: test.kt -package test - fun main() { A.ENTRY.s(): String? } diff --git a/compiler/testData/diagnostics/tests/enum/javaEnumWithFuns.kt b/compiler/testData/diagnostics/tests/enum/javaEnumWithFuns.kt index c89a80686d5..7d6399171d5 100644 --- a/compiler/testData/diagnostics/tests/enum/javaEnumWithFuns.kt +++ b/compiler/testData/diagnostics/tests/enum/javaEnumWithFuns.kt @@ -10,8 +10,6 @@ public enum A { // FILE: test.kt -package vvv - fun main() { val c = A.ENTRY c.s() diff --git a/compiler/testData/diagnostics/tests/enum/javaEnumWithNameClashing.kt b/compiler/testData/diagnostics/tests/enum/javaEnumWithNameClashing.kt index 986f9004b5f..6ed6d35855d 100644 --- a/compiler/testData/diagnostics/tests/enum/javaEnumWithNameClashing.kt +++ b/compiler/testData/diagnostics/tests/enum/javaEnumWithNameClashing.kt @@ -8,8 +8,6 @@ public enum A { // FILE: test.kt -package vvv - fun main() { val c: A = A.ENTRY val c2: String? = c.ENTRY diff --git a/compiler/testData/diagnostics/tests/enum/javaEnumWithProperty.kt b/compiler/testData/diagnostics/tests/enum/javaEnumWithProperty.kt index 220a7f6801d..5ab0ebf77dc 100644 --- a/compiler/testData/diagnostics/tests/enum/javaEnumWithProperty.kt +++ b/compiler/testData/diagnostics/tests/enum/javaEnumWithProperty.kt @@ -12,8 +12,6 @@ public enum A { // FILE: test.kt -package vvv - fun main() { val c = A.ENTRY c.s diff --git a/compiler/testData/diagnostics/tests/scopes/AmbiguityBetweenRootAndPackage.kt b/compiler/testData/diagnostics/tests/scopes/AmbiguityBetweenRootAndPackage.kt index a51b23f8822..2b9ed42b787 100644 --- a/compiler/testData/diagnostics/tests/scopes/AmbiguityBetweenRootAndPackage.kt +++ b/compiler/testData/diagnostics/tests/scopes/AmbiguityBetweenRootAndPackage.kt @@ -1,12 +1,12 @@ -// FILE: checkAmbiguityBetweenRootAndPackage.kt -package test - -val t = testFun() - -// FILE: checkAmbiguityBetweenRootAndPackageRoot.kt +// FILE: root.kt fun testFun() = 12 -// FILE: checkAmbiguityBetweenRootAndPackageTest.kt +// FILE: otherPackage.kt package test -fun testFun() = 12 \ No newline at end of file +fun testFun() = 12 + +// FILE: using.kt +import test.* + +val t = testFun() diff --git a/compiler/testData/diagnostics/tests/scopes/NoAmbiguityBetweenRootAndPackage.kt b/compiler/testData/diagnostics/tests/scopes/NoAmbiguityBetweenRootAndPackage.kt new file mode 100644 index 00000000000..da8f87f823a --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/NoAmbiguityBetweenRootAndPackage.kt @@ -0,0 +1,12 @@ +// FILE: root.kt +fun testFun() = 12 + +// FILE: otherPackage.kt +package test + +fun testFun() = 12 + +// FILE: using.kt +package test + +val t = testFun() diff --git a/compiler/testData/diagnostics/tests/scopes/dontImportRootScope.kt b/compiler/testData/diagnostics/tests/scopes/dontImportRootScope.kt new file mode 100644 index 00000000000..4db5e6a0df6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/dontImportRootScope.kt @@ -0,0 +1,25 @@ +// FILE: rootPackage.kt +class Klass { +} + +fun function() = "" + +val property = "" + +// FILE: anotherFromRootPackage.kt +fun foo() { + Klass() + function() + property +} + +// FILE: anotherFromRootPackage.kt +package pkg + +import Klass +import function +import property + +fun foo() { + Klass() + function() + property +} diff --git a/compiler/testData/resolve/DontImportRootScope.resolve b/compiler/testData/resolve/DontImportRootScope.resolve new file mode 100644 index 00000000000..f78e2b18e4f --- /dev/null +++ b/compiler/testData/resolve/DontImportRootScope.resolve @@ -0,0 +1,28 @@ +// FILE: rootPackage.kt +class ~k~Klass { +} + +fun ~f~function() = "" + +val ~p~property = "" + +// FILE: anotherFromRootPackage.kt +fun foo() { + `k`Klass() + `f`function() + `p`property +} + +// FILE: otherPackage.kt +package test + +import `!`Klass +import `!`function +import `!`property + +fun foo() { + `!`Klass() + `!`function() + `!`property +} + diff --git a/compiler/testData/resolve/ImportingRootScopeWhenProcessingImports.resolve b/compiler/testData/resolve/ImportingRootScopeWhenProcessingImports.resolve new file mode 100644 index 00000000000..e5b2f8aa34a --- /dev/null +++ b/compiler/testData/resolve/ImportingRootScopeWhenProcessingImports.resolve @@ -0,0 +1,29 @@ +// FILE: base.kt +class java { + class lang { + class ~Fake~Fake() + } +} + +// FILE: root1.kt +import java.lang.* // will import Fake + +fun foo() { + `Fake`Fake() +} + +// FILE: root2.kt +fun foo() { + `!`Fake() // not imported within "java.lang.*" default import + java.lang.`Fake`Fake() // we all are in same (root) package, so it works +} + + +// FILE: nonRoot.kt +package nonRoot +import java.lang.* // will not import Fake + +fun foo() { + `!`Fake() + java.lang.`!`Fake() // qualification doesn't help, because we are in other package +} diff --git a/compiler/testData/resolve/imports/ImportConflictBetweenImportedAndRootPackage.resolve b/compiler/testData/resolve/imports/ImportConflictBetweenImportedAndRootPackage.resolve index 8b4bb52f967..a42b51f7350 100644 --- a/compiler/testData/resolve/imports/ImportConflictBetweenImportedAndRootPackage.resolve +++ b/compiler/testData/resolve/imports/ImportConflictBetweenImportedAndRootPackage.resolve @@ -4,7 +4,7 @@ package test import testing.* -val a1: `fromRoot`TestClass? = null +val a1: `fromOtherPackage`TestClass? = null //FILE:fromRoot.kt //---------------------------------------------------------------------------------- diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index d730d78770e..c4dfb276c31 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -5968,6 +5968,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest("compiler/testData/diagnostics/tests/scopes/AmbiguousNonExtensions.kt"); } + @TestMetadata("DontImportRootScope.kt") + public void testDontImportRootScope() throws Exception { + doTest("compiler/testData/diagnostics/tests/scopes/DontImportRootScope.kt"); + } + @TestMetadata("ImportFromCurrentWithDifferentName.kt") public void testImportFromCurrentWithDifferentName() throws Exception { doTest("compiler/testData/diagnostics/tests/scopes/ImportFromCurrentWithDifferentName.kt"); @@ -6148,6 +6153,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest("compiler/testData/diagnostics/tests/scopes/kt955.kt"); } + @TestMetadata("NoAmbiguityBetweenRootAndPackage.kt") + public void testNoAmbiguityBetweenRootAndPackage() throws Exception { + doTest("compiler/testData/diagnostics/tests/scopes/NoAmbiguityBetweenRootAndPackage.kt"); + } + @TestMetadata("stopResolutionOnAmbiguity.kt") public void testStopResolutionOnAmbiguity() throws Exception { doTest("compiler/testData/diagnostics/tests/scopes/stopResolutionOnAmbiguity.kt"); diff --git a/compiler/tests/org/jetbrains/jet/resolve/ResolveTestGenerated.java b/compiler/tests/org/jetbrains/jet/resolve/ResolveTestGenerated.java index 65abb5cb5ca..d010415ff67 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/ResolveTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/resolve/ResolveTestGenerated.java @@ -57,6 +57,11 @@ public class ResolveTestGenerated extends AbstractResolveTest { doTest("compiler/testData/resolve/DefaultParamsOfLocalFunctions.resolve"); } + @TestMetadata("DontImportRootScope.resolve") + public void testDontImportRootScope() throws Exception { + doTest("compiler/testData/resolve/DontImportRootScope.resolve"); + } + @TestMetadata("ErrorSupertype.resolve") public void testErrorSupertype() throws Exception { doTest("compiler/testData/resolve/ErrorSupertype.resolve"); @@ -72,6 +77,11 @@ public class ResolveTestGenerated extends AbstractResolveTest { doTest("compiler/testData/resolve/FunctionVariable.resolve"); } + @TestMetadata("ImportingRootScopeWhenProcessingImports.resolve") + public void testImportingRootScopeWhenProcessingImports() throws Exception { + doTest("compiler/testData/resolve/ImportingRootScopeWhenProcessingImports.resolve"); + } + @TestMetadata("kt304.resolve") public void testKt304() throws Exception { doTest("compiler/testData/resolve/kt304.resolve"); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptor.java index 53645a88cf2..d0291d5889b 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/ModuleDescriptor.java @@ -21,6 +21,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.PlatformToKotlinClassMap; import org.jetbrains.jet.lang.resolve.ImportPath; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.TypeSubstitutor; import java.util.List; diff --git a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt index b0759939e00..030dc54d3cf 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt @@ -387,7 +387,7 @@ fun main(args: Array) { } testClass(javaClass()) { - model("resolve/references") + model("resolve/references", pattern = """^([^\.]+)\.kt$""") } testClass(javaClass()) { diff --git a/idea/testData/navigation/implementations/multifile/ImplementJavaAbstractClassInKotlin/ImplementJavaAbstractClassInKotlin.kt b/idea/testData/navigation/implementations/multifile/ImplementJavaAbstractClassInKotlin/ImplementJavaAbstractClassInKotlin.kt index 21d907963bd..d3fdeedd687 100644 --- a/idea/testData/navigation/implementations/multifile/ImplementJavaAbstractClassInKotlin/ImplementJavaAbstractClassInKotlin.kt +++ b/idea/testData/navigation/implementations/multifile/ImplementJavaAbstractClassInKotlin/ImplementJavaAbstractClassInKotlin.kt @@ -1,5 +1,3 @@ -package testing.kt - class KotlinImpl : JavaBase() -// REF: (testing.kt).KotlinImpl \ No newline at end of file +// REF: ().KotlinImpl \ No newline at end of file diff --git a/idea/testData/navigation/implementations/multifile/ImplementJavaClassInKotlin/ImplementJavaClassInKotlin.kt b/idea/testData/navigation/implementations/multifile/ImplementJavaClassInKotlin/ImplementJavaClassInKotlin.kt index 7116ff654fa..2cd806aaf0c 100644 --- a/idea/testData/navigation/implementations/multifile/ImplementJavaClassInKotlin/ImplementJavaClassInKotlin.kt +++ b/idea/testData/navigation/implementations/multifile/ImplementJavaClassInKotlin/ImplementJavaClassInKotlin.kt @@ -1,6 +1,4 @@ -package testing.kt - class KotlinImpl : JavaBase() -// REF: (testing.kt).KotlinImpl +// REF: ().KotlinImpl // REF: JavaBase diff --git a/idea/testData/navigation/implementations/multifile/ImplementJavaInterfaceInKotlin/ImplementJavaInterfaceInKotlin.kt b/idea/testData/navigation/implementations/multifile/ImplementJavaInterfaceInKotlin/ImplementJavaInterfaceInKotlin.kt index 23ba8de3799..f838bd56236 100644 --- a/idea/testData/navigation/implementations/multifile/ImplementJavaInterfaceInKotlin/ImplementJavaInterfaceInKotlin.kt +++ b/idea/testData/navigation/implementations/multifile/ImplementJavaInterfaceInKotlin/ImplementJavaInterfaceInKotlin.kt @@ -1,8 +1,6 @@ -package testing.kt - trait KotlinTrait: JavaBase class KotlinClass : JavaBase -// REF: (testing.kt).KotlinClass -// REF: (testing.kt).KotlinTrait \ No newline at end of file +// REF: ().KotlinClass +// REF: ().KotlinTrait \ No newline at end of file diff --git a/idea/testData/navigation/implementations/multifile/ImplementMethodInKotlin/ImplementMethodInKotlin.kt b/idea/testData/navigation/implementations/multifile/ImplementMethodInKotlin/ImplementMethodInKotlin.kt index d965c46c475..93fc1c179c5 100644 --- a/idea/testData/navigation/implementations/multifile/ImplementMethodInKotlin/ImplementMethodInKotlin.kt +++ b/idea/testData/navigation/implementations/multifile/ImplementMethodInKotlin/ImplementMethodInKotlin.kt @@ -1,5 +1,3 @@ -package testing.kt - class TestFromJava() : BaseJava() { override fun testMethod() { } @@ -9,5 +7,5 @@ fun test() { BaseJava().testMethod() } -// REF: (in testing.kt.TestFromJava).testMethod() +// REF: (in TestFromJava).testMethod() // REF: (in BaseJava).testMethod() diff --git a/idea/testData/quickfix/autoImports/divOperator.after.kt b/idea/testData/quickfix/autoImports/divOperator.after.kt index 2f89d418e44..2143938a0b4 100644 --- a/idea/testData/quickfix/autoImports/divOperator.after.kt +++ b/idea/testData/quickfix/autoImports/divOperator.after.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference: / +package h + import util.div trait H diff --git a/idea/testData/quickfix/autoImports/divOperator.before.Main.kt b/idea/testData/quickfix/autoImports/divOperator.before.Main.kt index 66c033fcf11..4c1866501ef 100644 --- a/idea/testData/quickfix/autoImports/divOperator.before.Main.kt +++ b/idea/testData/quickfix/autoImports/divOperator.before.Main.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference: / +package h + trait H fun f(h: H) { diff --git a/idea/testData/quickfix/autoImports/divOperator.before.data.Sample.kt b/idea/testData/quickfix/autoImports/divOperator.before.data.Sample.kt index dad0485091e..1f432510050 100644 --- a/idea/testData/quickfix/autoImports/divOperator.before.data.Sample.kt +++ b/idea/testData/quickfix/autoImports/divOperator.before.data.Sample.kt @@ -1,3 +1,3 @@ package util -fun H.div(i: Int) = 3 \ No newline at end of file +fun h.H.div(i: Int) = 3 \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/infixCall.after.kt b/idea/testData/quickfix/autoImports/infixCall.after.kt index 90bfb4bdaf0..878c6d59211 100644 --- a/idea/testData/quickfix/autoImports/infixCall.after.kt +++ b/idea/testData/quickfix/autoImports/infixCall.after.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference: foo +package h + import util.foo trait H diff --git a/idea/testData/quickfix/autoImports/infixCall.before.Main.kt b/idea/testData/quickfix/autoImports/infixCall.before.Main.kt index 02a99243605..10edb71f9f9 100644 --- a/idea/testData/quickfix/autoImports/infixCall.before.Main.kt +++ b/idea/testData/quickfix/autoImports/infixCall.before.Main.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference: foo +package h + trait H fun f(h: H) { diff --git a/idea/testData/quickfix/autoImports/infixCall.before.data.Sample.kt b/idea/testData/quickfix/autoImports/infixCall.before.data.Sample.kt index a07e13b8e7a..f315b6e2c1f 100644 --- a/idea/testData/quickfix/autoImports/infixCall.before.data.Sample.kt +++ b/idea/testData/quickfix/autoImports/infixCall.before.data.Sample.kt @@ -1,3 +1,3 @@ package util -fun H.foo(other: H) = "" \ No newline at end of file +fun h.H.foo(other: h.H) = "" \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/minusOperator.after.kt b/idea/testData/quickfix/autoImports/minusOperator.after.kt index 55f647f430e..06644b267f0 100644 --- a/idea/testData/quickfix/autoImports/minusOperator.after.kt +++ b/idea/testData/quickfix/autoImports/minusOperator.after.kt @@ -1,5 +1,7 @@ // "Import" "true" -// ERROR: Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch:
  • internal fun jet.String.minus(str: jet.String): jet.String defined in root package
  • internal fun jet.String.minus(i: java.lang.Integer): jet.String defined in root package
+// ERROR: Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch:
  • internal fun jet.String.minus(str: jet.String): jet.String defined in h
  • internal fun jet.String.minus(i: java.lang.Integer): jet.String defined in h
+ +package h import util.minus diff --git a/idea/testData/quickfix/autoImports/minusOperator.before.Main.kt b/idea/testData/quickfix/autoImports/minusOperator.before.Main.kt index bc69cfe76aa..1801014d50c 100644 --- a/idea/testData/quickfix/autoImports/minusOperator.before.Main.kt +++ b/idea/testData/quickfix/autoImports/minusOperator.before.Main.kt @@ -1,5 +1,7 @@ // "Import" "true" -// ERROR: Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch:
  • internal fun jet.String.minus(str: jet.String): jet.String defined in root package
  • internal fun jet.String.minus(i: java.lang.Integer): jet.String defined in root package
+// ERROR: Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch:
  • internal fun jet.String.minus(str: jet.String): jet.String defined in h
  • internal fun jet.String.minus(i: java.lang.Integer): jet.String defined in h
+ +package h trait H diff --git a/idea/testData/quickfix/autoImports/minusOperator.before.data.Sample.kt b/idea/testData/quickfix/autoImports/minusOperator.before.data.Sample.kt index a885949583e..d52b85c02d5 100644 --- a/idea/testData/quickfix/autoImports/minusOperator.before.data.Sample.kt +++ b/idea/testData/quickfix/autoImports/minusOperator.before.data.Sample.kt @@ -1,3 +1,3 @@ package util -fun H?.minus(s: String) = "" \ No newline at end of file +fun h.H?.minus(s: String) = "" \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/plusOperator.after.kt b/idea/testData/quickfix/autoImports/plusOperator.after.kt index 010b6e9720e..f586caaf65c 100644 --- a/idea/testData/quickfix/autoImports/plusOperator.after.kt +++ b/idea/testData/quickfix/autoImports/plusOperator.after.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch:
  • public fun jet.String?.plus(other: jet.Any?): jet.String defined in jet
+package h + import util.plus trait H diff --git a/idea/testData/quickfix/autoImports/plusOperator.before.Main.kt b/idea/testData/quickfix/autoImports/plusOperator.before.Main.kt index d2812f53956..e7b2ac25212 100644 --- a/idea/testData/quickfix/autoImports/plusOperator.before.Main.kt +++ b/idea/testData/quickfix/autoImports/plusOperator.before.Main.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch:
  • public fun jet.String?.plus(other: jet.Any?): jet.String defined in jet
+package h + trait H fun f(h: H?) { diff --git a/idea/testData/quickfix/autoImports/plusOperator.before.data.Sample.kt b/idea/testData/quickfix/autoImports/plusOperator.before.data.Sample.kt index 4c575cdd8e2..df27b906194 100644 --- a/idea/testData/quickfix/autoImports/plusOperator.before.data.Sample.kt +++ b/idea/testData/quickfix/autoImports/plusOperator.before.data.Sample.kt @@ -1,3 +1,3 @@ package util -fun H?.plus(s: String) = "" \ No newline at end of file +fun h.H?.plus(s: String) = "" \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/postfixOperator.after.kt b/idea/testData/quickfix/autoImports/postfixOperator.after.kt index 6aff9e317dd..4cd807644ab 100644 --- a/idea/testData/quickfix/autoImports/postfixOperator.after.kt +++ b/idea/testData/quickfix/autoImports/postfixOperator.after.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference: ++ +package h + import util.inc trait H diff --git a/idea/testData/quickfix/autoImports/postfixOperator.before.Main.kt b/idea/testData/quickfix/autoImports/postfixOperator.before.Main.kt index 0b31c90d0d6..9e5696144a2 100644 --- a/idea/testData/quickfix/autoImports/postfixOperator.before.Main.kt +++ b/idea/testData/quickfix/autoImports/postfixOperator.before.Main.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference: ++ +package h + trait H fun f(h: H?) { diff --git a/idea/testData/quickfix/autoImports/postfixOperator.before.data.Sample.kt b/idea/testData/quickfix/autoImports/postfixOperator.before.data.Sample.kt index 71f7baaccb4..a57f74ac91e 100644 --- a/idea/testData/quickfix/autoImports/postfixOperator.before.data.Sample.kt +++ b/idea/testData/quickfix/autoImports/postfixOperator.before.data.Sample.kt @@ -1,4 +1,4 @@ package util -fun H.inc(): H { +fun h.H.inc(): h.H { } \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/timesAssign.after.kt b/idea/testData/quickfix/autoImports/timesAssign.after.kt index 982cd4ad81c..065592f1a64 100644 --- a/idea/testData/quickfix/autoImports/timesAssign.after.kt +++ b/idea/testData/quickfix/autoImports/timesAssign.after.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference: *= +package h + import util.timesAssign trait H diff --git a/idea/testData/quickfix/autoImports/timesAssign.before.Main.kt b/idea/testData/quickfix/autoImports/timesAssign.before.Main.kt index ce9d24e23fa..e58dc0399ed 100644 --- a/idea/testData/quickfix/autoImports/timesAssign.before.Main.kt +++ b/idea/testData/quickfix/autoImports/timesAssign.before.Main.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference: *= +package h + trait H fun f(h: H) { diff --git a/idea/testData/quickfix/autoImports/timesAssign.before.data.Sample.kt b/idea/testData/quickfix/autoImports/timesAssign.before.data.Sample.kt index 601c7802d9b..31a360111a3 100644 --- a/idea/testData/quickfix/autoImports/timesAssign.before.data.Sample.kt +++ b/idea/testData/quickfix/autoImports/timesAssign.before.data.Sample.kt @@ -1,4 +1,4 @@ package util -fun H.div(i: Int) = 3 -fun H.timesAssign(i: Int) {} \ No newline at end of file +fun h.H.div(i: Int) = 3 +fun h.H.timesAssign(i: Int) {} \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/unaryMinusOperator.after.kt b/idea/testData/quickfix/autoImports/unaryMinusOperator.after.kt index 195999026d0..5d4fccc55fd 100644 --- a/idea/testData/quickfix/autoImports/unaryMinusOperator.after.kt +++ b/idea/testData/quickfix/autoImports/unaryMinusOperator.after.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference: - +package h + import util.minus trait H diff --git a/idea/testData/quickfix/autoImports/unaryMinusOperator.before.Main.kt b/idea/testData/quickfix/autoImports/unaryMinusOperator.before.Main.kt index 74b574ae1dc..f8ea7f7a7a2 100644 --- a/idea/testData/quickfix/autoImports/unaryMinusOperator.before.Main.kt +++ b/idea/testData/quickfix/autoImports/unaryMinusOperator.before.Main.kt @@ -1,6 +1,8 @@ // "Import" "true" // ERROR: Unresolved reference: - +package h + trait H fun f(h: H?) { diff --git a/idea/testData/quickfix/autoImports/unaryMinusOperator.before.data.Sample.kt b/idea/testData/quickfix/autoImports/unaryMinusOperator.before.data.Sample.kt index 818830a1541..55b6c6746b6 100644 --- a/idea/testData/quickfix/autoImports/unaryMinusOperator.before.data.Sample.kt +++ b/idea/testData/quickfix/autoImports/unaryMinusOperator.before.data.Sample.kt @@ -1,3 +1,3 @@ package util -fun H?.minus() = "" \ No newline at end of file +fun h.H?.minus() = "" \ No newline at end of file diff --git a/idea/testData/quickfix/autoImports/unaryPlusOperator.after.kt b/idea/testData/quickfix/autoImports/unaryPlusOperator.after.kt index d7e09f592d7..253edac50ab 100644 --- a/idea/testData/quickfix/autoImports/unaryPlusOperator.after.kt +++ b/idea/testData/quickfix/autoImports/unaryPlusOperator.after.kt @@ -1,5 +1,7 @@ // "Import" "true" -// ERROR: Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch:
  • internal fun A.plus(): jet.Int defined in root package
  • public fun jet.String?.plus(other: jet.Any?): jet.String defined in jet
+// ERROR: Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch:
  • internal fun h.A.plus(): jet.Int defined in h
  • public fun jet.String?.plus(other: jet.Any?): jet.String defined in jet
+ +package h import util.plus diff --git a/idea/testData/quickfix/autoImports/unaryPlusOperator.before.Main.kt b/idea/testData/quickfix/autoImports/unaryPlusOperator.before.Main.kt index 67f41c87e1b..b4336cf348d 100644 --- a/idea/testData/quickfix/autoImports/unaryPlusOperator.before.Main.kt +++ b/idea/testData/quickfix/autoImports/unaryPlusOperator.before.Main.kt @@ -1,5 +1,7 @@ // "Import" "true" -// ERROR: Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch:
  • internal fun A.plus(): jet.Int defined in root package
  • public fun jet.String?.plus(other: jet.Any?): jet.String defined in jet
+// ERROR: Unresolved reference.
None of the following candidates is applicable because of receiver type mismatch:
  • internal fun h.A.plus(): jet.Int defined in h
  • public fun jet.String?.plus(other: jet.Any?): jet.String defined in jet
+ +package h trait H diff --git a/idea/testData/quickfix/autoImports/unaryPlusOperator.before.data.Sample.kt b/idea/testData/quickfix/autoImports/unaryPlusOperator.before.data.Sample.kt index fdc33392a43..336a1ff68bd 100644 --- a/idea/testData/quickfix/autoImports/unaryPlusOperator.before.data.Sample.kt +++ b/idea/testData/quickfix/autoImports/unaryPlusOperator.before.data.Sample.kt @@ -1,3 +1,3 @@ package util -fun H.plus() = "" \ No newline at end of file +fun h.H.plus() = "" \ No newline at end of file diff --git a/idea/testData/resolve/references/DontImportRootScope.Data.kt b/idea/testData/resolve/references/DontImportRootScope.Data.kt new file mode 100644 index 00000000000..1d21fb6f232 --- /dev/null +++ b/idea/testData/resolve/references/DontImportRootScope.Data.kt @@ -0,0 +1,2 @@ +class Klass { +} diff --git a/idea/testData/resolve/references/DontImportRootScope.kt b/idea/testData/resolve/references/DontImportRootScope.kt new file mode 100644 index 00000000000..734699a9d8d --- /dev/null +++ b/idea/testData/resolve/references/DontImportRootScope.kt @@ -0,0 +1,5 @@ +package test + +import Klass + +//REF_EMPTY \ No newline at end of file diff --git a/idea/testData/resolve/references/FakeJavaLang1.Data.kt b/idea/testData/resolve/references/FakeJavaLang1.Data.kt new file mode 100644 index 00000000000..bbebec4ce56 --- /dev/null +++ b/idea/testData/resolve/references/FakeJavaLang1.Data.kt @@ -0,0 +1,5 @@ +class java { + class lang { + class Fake() + } +} diff --git a/idea/testData/resolve/references/FakeJavaLang1.kt b/idea/testData/resolve/references/FakeJavaLang1.kt new file mode 100644 index 00000000000..233d4462a0d --- /dev/null +++ b/idea/testData/resolve/references/FakeJavaLang1.kt @@ -0,0 +1,7 @@ +import java.lang.* // will import Fake + +fun foo() { + Fake() +} + +//REF: (java.lang).Fake \ No newline at end of file diff --git a/idea/testData/resolve/references/FakeJavaLang2.Data.kt b/idea/testData/resolve/references/FakeJavaLang2.Data.kt new file mode 100644 index 00000000000..bbebec4ce56 --- /dev/null +++ b/idea/testData/resolve/references/FakeJavaLang2.Data.kt @@ -0,0 +1,5 @@ +class java { + class lang { + class Fake() + } +} diff --git a/idea/testData/resolve/references/FakeJavaLang2.kt b/idea/testData/resolve/references/FakeJavaLang2.kt new file mode 100644 index 00000000000..4e08c47d6c2 --- /dev/null +++ b/idea/testData/resolve/references/FakeJavaLang2.kt @@ -0,0 +1,5 @@ +fun foo() { + Fake() // not imported within "java.lang.*" default import +} + +//REF_EMPTY \ No newline at end of file diff --git a/idea/testData/resolve/references/FakeJavaLang3.Data.kt b/idea/testData/resolve/references/FakeJavaLang3.Data.kt new file mode 100644 index 00000000000..bbebec4ce56 --- /dev/null +++ b/idea/testData/resolve/references/FakeJavaLang3.Data.kt @@ -0,0 +1,5 @@ +class java { + class lang { + class Fake() + } +} diff --git a/idea/testData/resolve/references/FakeJavaLang3.kt b/idea/testData/resolve/references/FakeJavaLang3.kt new file mode 100644 index 00000000000..a395295197e --- /dev/null +++ b/idea/testData/resolve/references/FakeJavaLang3.kt @@ -0,0 +1,8 @@ +package nonRoot +import java.lang.* // will not import Fake + +fun foo() { + Fake() +} + +//REF_EMPTY \ No newline at end of file diff --git a/idea/testData/resolve/references/FakeJavaLang4.Data.kt b/idea/testData/resolve/references/FakeJavaLang4.Data.kt new file mode 100644 index 00000000000..bbebec4ce56 --- /dev/null +++ b/idea/testData/resolve/references/FakeJavaLang4.Data.kt @@ -0,0 +1,5 @@ +class java { + class lang { + class Fake() + } +} diff --git a/idea/testData/resolve/references/FakeJavaLang4.kt b/idea/testData/resolve/references/FakeJavaLang4.kt new file mode 100644 index 00000000000..8a564901dd2 --- /dev/null +++ b/idea/testData/resolve/references/FakeJavaLang4.kt @@ -0,0 +1,7 @@ +package nonRoot + +fun foo() { + java.lang.Fake() // qualification doesn't help, because we are in other package +} + +//REF_EMPTY \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceResolveTest.java b/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceResolveTest.java index e9561d50ea5..fbb3de969f0 100644 --- a/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceResolveTest.java +++ b/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceResolveTest.java @@ -32,6 +32,7 @@ import org.jetbrains.jet.InTextDirectivesUtils; import org.jetbrains.jet.plugin.JetWithJdkAndRuntimeLightProjectDescriptor; import org.jetbrains.jet.testing.ReferenceUtils; +import java.io.File; import java.util.List; public abstract class AbstractReferenceResolveTest extends LightPlatformCodeInsightFixtureTestCase { @@ -63,7 +64,14 @@ public abstract class AbstractReferenceResolveTest extends LightPlatformCodeInsi } protected void doTest(String path) { - myFixture.configureByFile(path); + assert path.endsWith(".kt") : path; + String extraFile = path.replace(".kt", ".Data.kt"); + if (new File(extraFile).exists()) { + myFixture.configureByFiles(path, extraFile); + } + else { + myFixture.configureByFile(path); + } if (InTextDirectivesUtils.isDirectiveDefined(myFixture.getFile().getText(), MULTIRESOLVE)) { doMultiResolveTest(); diff --git a/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java b/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java index d44f1adb069..aff6279f2c7 100644 --- a/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java @@ -34,7 +34,7 @@ import org.jetbrains.jet.resolve.AbstractReferenceResolveTest; @InnerTestClasses({ReferenceResolveTestGenerated.DelegatedPropertyAccessors.class, ReferenceResolveTestGenerated.ForLoopIn.class, ReferenceResolveTestGenerated.Invoke.class}) public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest { public void testAllFilesPresentInReferences() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } @TestMetadata("AnnotationForClass.kt") @@ -72,6 +72,31 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest doTest("idea/testData/resolve/references/CtrlClickResolve.kt"); } + @TestMetadata("DontImportRootScope.kt") + public void testDontImportRootScope() throws Exception { + doTest("idea/testData/resolve/references/DontImportRootScope.kt"); + } + + @TestMetadata("FakeJavaLang1.kt") + public void testFakeJavaLang1() throws Exception { + doTest("idea/testData/resolve/references/FakeJavaLang1.kt"); + } + + @TestMetadata("FakeJavaLang2.kt") + public void testFakeJavaLang2() throws Exception { + doTest("idea/testData/resolve/references/FakeJavaLang2.kt"); + } + + @TestMetadata("FakeJavaLang3.kt") + public void testFakeJavaLang3() throws Exception { + doTest("idea/testData/resolve/references/FakeJavaLang3.kt"); + } + + @TestMetadata("FakeJavaLang4.kt") + public void testFakeJavaLang4() throws Exception { + doTest("idea/testData/resolve/references/FakeJavaLang4.kt"); + } + @TestMetadata("GenericFunctionParameter.kt") public void testGenericFunctionParameter() throws Exception { doTest("idea/testData/resolve/references/GenericFunctionParameter.kt"); @@ -176,7 +201,7 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest @InnerTestClasses({DelegatedPropertyAccessors.InSource.class, DelegatedPropertyAccessors.InStandardLibrary.class}) public static class DelegatedPropertyAccessors extends AbstractReferenceResolveTest { public void testAllFilesPresentInDelegatedPropertyAccessors() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/delegatedPropertyAccessors"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/delegatedPropertyAccessors"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } @TestMetadata("unresolved.kt") @@ -187,7 +212,7 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest @TestMetadata("idea/testData/resolve/references/delegatedPropertyAccessors/inSource") public static class InSource extends AbstractReferenceResolveTest { public void testAllFilesPresentInInSource() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/delegatedPropertyAccessors/inSource"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/delegatedPropertyAccessors/inSource"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } @TestMetadata("getExtension.kt") @@ -225,7 +250,7 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest @TestMetadata("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary") public static class InStandardLibrary extends AbstractReferenceResolveTest { public void testAllFilesPresentInInStandardLibrary() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/delegatedPropertyAccessors/inStandardLibrary"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } @TestMetadata("lazy.kt") @@ -253,7 +278,7 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest @InnerTestClasses({ForLoopIn.InBuiltIns.class, ForLoopIn.InLibrary.class, ForLoopIn.InSource.class}) public static class ForLoopIn extends AbstractReferenceResolveTest { public void testAllFilesPresentInForLoopIn() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/forLoopIn"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/forLoopIn"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } @TestMetadata("unresolvedIterator.kt") @@ -264,7 +289,7 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest @TestMetadata("idea/testData/resolve/references/forLoopIn/inBuiltIns") public static class InBuiltIns extends AbstractReferenceResolveTest { public void testAllFilesPresentInInBuiltIns() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/forLoopIn/inBuiltIns"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/forLoopIn/inBuiltIns"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } @TestMetadata("extension.kt") @@ -282,7 +307,7 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest @TestMetadata("idea/testData/resolve/references/forLoopIn/inLibrary") public static class InLibrary extends AbstractReferenceResolveTest { public void testAllFilesPresentInInLibrary() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/forLoopIn/inLibrary"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/forLoopIn/inLibrary"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } @TestMetadata("extension.kt") @@ -300,7 +325,7 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest } public void testAllFilesPresentInInSource() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/forLoopIn/inSource"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/forLoopIn/inSource"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } @TestMetadata("allMembers.kt") @@ -328,7 +353,7 @@ public class ReferenceResolveTestGenerated extends AbstractReferenceResolveTest @TestMetadata("idea/testData/resolve/references/invoke") public static class Invoke extends AbstractReferenceResolveTest { public void testAllFilesPresentInInvoke() throws Exception { - JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/invoke"), Pattern.compile("^(.+)\\.kt$"), true); + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/references/invoke"), Pattern.compile("^([^\\.]+)\\.kt$"), true); } @TestMetadata("lambdaAndParens.kt")