Importing root scope without members.

This commit is contained in:
Evgeny Gerashchenko
2014-01-15 21:05:37 +04:00
parent 78e7cbb7fb
commit ae4c68830d
61 changed files with 316 additions and 89 deletions
@@ -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<JetImportDirective> directives) {
processImportsInFile(lookupMode, scope, directives, moduleDescriptor, trace, qualifiedExpressionResolver, importsFactory);
private void processImportsInFile(@NotNull LookupMode lookupMode, WritableScope scope, List<JetImportDirective> 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<JetImportDirective, Collection<? extends DeclarationDescriptor>> resolvedDirectives = Maps.newHashMap();
JetScope rootScopeForFile = JetModuleUtil.getImportsResolutionScope(module, inRootPackage);
for (JetImportDirective importDirective : importDirectives) {
Collection<? extends DeclarationDescriptor> 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);
}
@@ -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);
}
}
@@ -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);
}
@@ -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<JetImportDirective> 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
@@ -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
@@ -4,8 +4,6 @@ public enum A {
}
// FILE: test.kt
package test
fun main() {
A.valueOf("ENTRY"): A
}
@@ -5,8 +5,6 @@ public enum A {
}
// FILE: test.kt
package vvv
fun main() {
A.values(): Array<A>
}
@@ -10,8 +10,6 @@ public enum A {
}
// FILE: test.kt
package test
fun main() {
A.ENTRY.s(): String?
}
@@ -10,8 +10,6 @@ public enum A {
// FILE: test.kt
package vvv
fun main() {
val c = A.ENTRY
c.s()
@@ -8,8 +8,6 @@ public enum A {
// FILE: test.kt
package vvv
fun main() {
val c: A = A.ENTRY
val <!UNUSED_VARIABLE!>c2<!>: String? = c.ENTRY
@@ -12,8 +12,6 @@ public enum A {
// FILE: test.kt
package vvv
fun main() {
val c = A.ENTRY
c.s
@@ -1,12 +1,12 @@
// FILE: checkAmbiguityBetweenRootAndPackage.kt
package test
val t = <!OVERLOAD_RESOLUTION_AMBIGUITY!>testFun<!>()
// FILE: checkAmbiguityBetweenRootAndPackageRoot.kt
// FILE: root.kt
fun testFun() = 12
// FILE: checkAmbiguityBetweenRootAndPackageTest.kt
// FILE: otherPackage.kt
package test
fun testFun() = 12
fun testFun() = 12
// FILE: using.kt
import test.*
val t = <!OVERLOAD_RESOLUTION_AMBIGUITY!>testFun<!>()
@@ -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()
@@ -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 <!UNRESOLVED_REFERENCE!>Klass<!>
import <!UNRESOLVED_REFERENCE!>function<!>
import <!UNRESOLVED_REFERENCE!>property<!>
fun foo() {
<!UNRESOLVED_REFERENCE!>Klass<!>()
<!UNRESOLVED_REFERENCE!>function<!>() <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> <!UNRESOLVED_REFERENCE!>property<!>
}
@@ -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
}
@@ -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
}
@@ -4,7 +4,7 @@ package test
import testing.*
val a1: `fromRoot`TestClass? = null
val a1: `fromOtherPackage`TestClass? = null
//FILE:fromRoot.kt
//----------------------------------------------------------------------------------
@@ -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");
@@ -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");
@@ -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;
@@ -387,7 +387,7 @@ fun main(args: Array<String>) {
}
testClass(javaClass<AbstractReferenceResolveTest>()) {
model("resolve/references")
model("resolve/references", pattern = """^([^\.]+)\.kt$""")
}
testClass(javaClass<AbstractReferenceResolveWithLibTest>()) {
@@ -1,5 +1,3 @@
package testing.kt
class KotlinImpl : <caret>JavaBase()
// REF: (testing.kt).KotlinImpl
// REF: (<root>).KotlinImpl
@@ -1,6 +1,4 @@
package testing.kt
class KotlinImpl : <caret>JavaBase()
// REF: (testing.kt).KotlinImpl
// REF: (<root>).KotlinImpl
// REF: JavaBase
@@ -1,8 +1,6 @@
package testing.kt
trait KotlinTrait: <caret>JavaBase
class KotlinClass : JavaBase
// REF: (testing.kt).KotlinClass
// REF: (testing.kt).KotlinTrait
// REF: (<root>).KotlinClass
// REF: (<root>).KotlinTrait
@@ -1,5 +1,3 @@
package testing.kt
class TestFromJava() : BaseJava() {
override fun testMethod() {
}
@@ -9,5 +7,5 @@ fun test() {
BaseJava().testMethod<caret>()
}
// REF: (in testing.kt.TestFromJava).testMethod()
// REF: (in TestFromJava).testMethod()
// REF: (in BaseJava).testMethod()
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: Unresolved reference: /
package h
import util.div
trait H
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: Unresolved reference: /
package h
trait H
fun f(h: H) {
@@ -1,3 +1,3 @@
package util
fun H.div(i: Int) = 3
fun h.H.div(i: Int) = 3
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: Unresolved reference: foo
package h
import util.foo
trait H
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: Unresolved reference: foo
package h
trait H
fun f(h: H) {
@@ -1,3 +1,3 @@
package util
fun H.foo(other: H) = ""
fun h.H.foo(other: h.H) = ""
@@ -1,5 +1,7 @@
// "Import" "true"
// ERROR: <html>Unresolved reference. <br/> None of the following candidates is applicable because of receiver type mismatch: <ul><li><b>internal</b> <b>fun</b> jet.String.minus(str: jet.String): jet.String <i>defined in</i> root package</li><li><b>internal</b> <b>fun</b> jet.String.minus(i: java.lang.Integer): jet.String <i>defined in</i> root package</li></ul></html>
// ERROR: <html>Unresolved reference. <br/> None of the following candidates is applicable because of receiver type mismatch: <ul><li><b>internal</b> <b>fun</b> jet.String.minus(str: jet.String): jet.String <i>defined in</i> h</li><li><b>internal</b> <b>fun</b> jet.String.minus(i: java.lang.Integer): jet.String <i>defined in</i> h</li></ul></html>
package h
import util.minus
@@ -1,5 +1,7 @@
// "Import" "true"
// ERROR: <html>Unresolved reference. <br/> None of the following candidates is applicable because of receiver type mismatch: <ul><li><b>internal</b> <b>fun</b> jet.String.minus(str: jet.String): jet.String <i>defined in</i> root package</li><li><b>internal</b> <b>fun</b> jet.String.minus(i: java.lang.Integer): jet.String <i>defined in</i> root package</li></ul></html>
// ERROR: <html>Unresolved reference. <br/> None of the following candidates is applicable because of receiver type mismatch: <ul><li><b>internal</b> <b>fun</b> jet.String.minus(str: jet.String): jet.String <i>defined in</i> h</li><li><b>internal</b> <b>fun</b> jet.String.minus(i: java.lang.Integer): jet.String <i>defined in</i> h</li></ul></html>
package h
trait H
@@ -1,3 +1,3 @@
package util
fun H?.minus(s: String) = ""
fun h.H?.minus(s: String) = ""
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: <html>Unresolved reference. <br/> None of the following candidates is applicable because of receiver type mismatch: <ul><li><b>public</b> <b>fun</b> jet.String?.plus(other: jet.Any?): jet.String <i>defined in</i> jet</li></ul></html>
package h
import util.plus
trait H
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: <html>Unresolved reference. <br/> None of the following candidates is applicable because of receiver type mismatch: <ul><li><b>public</b> <b>fun</b> jet.String?.plus(other: jet.Any?): jet.String <i>defined in</i> jet</li></ul></html>
package h
trait H
fun f(h: H?) {
@@ -1,3 +1,3 @@
package util
fun H?.plus(s: String) = ""
fun h.H?.plus(s: String) = ""
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: Unresolved reference: ++
package h
import util.inc
trait H
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: Unresolved reference: ++
package h
trait H
fun f(h: H?) {
@@ -1,4 +1,4 @@
package util
fun H.inc(): H {
fun h.H.inc(): h.H {
}
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: Unresolved reference: *=
package h
import util.timesAssign
trait H
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: Unresolved reference: *=
package h
trait H
fun f(h: H) {
@@ -1,4 +1,4 @@
package util
fun H.div(i: Int) = 3
fun H.timesAssign(i: Int) {}
fun h.H.div(i: Int) = 3
fun h.H.timesAssign(i: Int) {}
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: Unresolved reference: -
package h
import util.minus
trait H
@@ -1,6 +1,8 @@
// "Import" "true"
// ERROR: Unresolved reference: -
package h
trait H
fun f(h: H?) {
@@ -1,3 +1,3 @@
package util
fun H?.minus() = ""
fun h.H?.minus() = ""
@@ -1,5 +1,7 @@
// "Import" "true"
// ERROR: <html>Unresolved reference. <br/> None of the following candidates is applicable because of receiver type mismatch: <ul><li><b>internal</b> <b>fun</b> A.plus(): jet.Int <i>defined in</i> root package</li><li><b>public</b> <b>fun</b> jet.String?.plus(other: jet.Any?): jet.String <i>defined in</i> jet</li></ul></html>
// ERROR: <html>Unresolved reference. <br/> None of the following candidates is applicable because of receiver type mismatch: <ul><li><b>internal</b> <b>fun</b> h.A.plus(): jet.Int <i>defined in</i> h</li><li><b>public</b> <b>fun</b> jet.String?.plus(other: jet.Any?): jet.String <i>defined in</i> jet</li></ul></html>
package h
import util.plus
@@ -1,5 +1,7 @@
// "Import" "true"
// ERROR: <html>Unresolved reference. <br/> None of the following candidates is applicable because of receiver type mismatch: <ul><li><b>internal</b> <b>fun</b> A.plus(): jet.Int <i>defined in</i> root package</li><li><b>public</b> <b>fun</b> jet.String?.plus(other: jet.Any?): jet.String <i>defined in</i> jet</li></ul></html>
// ERROR: <html>Unresolved reference. <br/> None of the following candidates is applicable because of receiver type mismatch: <ul><li><b>internal</b> <b>fun</b> h.A.plus(): jet.Int <i>defined in</i> h</li><li><b>public</b> <b>fun</b> jet.String?.plus(other: jet.Any?): jet.String <i>defined in</i> jet</li></ul></html>
package h
trait H
@@ -1,3 +1,3 @@
package util
fun H.plus() = ""
fun h.H.plus() = ""
@@ -0,0 +1,2 @@
class Klass {
}
@@ -0,0 +1,5 @@
package test
import <caret>Klass
//REF_EMPTY
@@ -0,0 +1,5 @@
class java {
class lang {
class Fake()
}
}
@@ -0,0 +1,7 @@
import java.lang.* // will import Fake
fun foo() {
<caret>Fake()
}
//REF: (java.lang).Fake
@@ -0,0 +1,5 @@
class java {
class lang {
class Fake()
}
}
@@ -0,0 +1,5 @@
fun foo() {
<caret>Fake() // not imported within "java.lang.*" default import
}
//REF_EMPTY
@@ -0,0 +1,5 @@
class java {
class lang {
class Fake()
}
}
@@ -0,0 +1,8 @@
package nonRoot
import java.lang.* // will not import Fake
fun foo() {
<caret>Fake()
}
//REF_EMPTY
@@ -0,0 +1,5 @@
class java {
class lang {
class Fake()
}
}
@@ -0,0 +1,7 @@
package nonRoot
fun foo() {
java.lang.<caret>Fake() // qualification doesn't help, because we are in other package
}
//REF_EMPTY
@@ -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();
@@ -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")