Importing root scope without members.
This commit is contained in:
@@ -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
|
||||
}
|
||||
+1
-1
@@ -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
-3
@@ -1,5 +1,3 @@
|
||||
package testing.kt
|
||||
|
||||
class KotlinImpl : <caret>JavaBase()
|
||||
|
||||
// REF: (testing.kt).KotlinImpl
|
||||
// REF: (<root>).KotlinImpl
|
||||
+1
-3
@@ -1,6 +1,4 @@
|
||||
package testing.kt
|
||||
|
||||
class KotlinImpl : <caret>JavaBase()
|
||||
|
||||
// REF: (testing.kt).KotlinImpl
|
||||
// REF: (<root>).KotlinImpl
|
||||
// REF: JavaBase
|
||||
|
||||
+2
-4
@@ -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
-3
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user