Never import object descriptors, for they may overwrite corresponding vals

This commit is contained in:
Andrey Breslav
2013-11-16 15:00:33 +04:00
parent 0fa70b7e47
commit 345ecbf4c0
5 changed files with 33 additions and 1 deletions
@@ -148,6 +148,7 @@ public interface Importer {
@Override
public void addAliasImport(@NotNull DeclarationDescriptor descriptor, @NotNull Name aliasName) {
assert !DescriptorUtils.isObject(descriptor) : "Never import objects: " + descriptor;
imports.add(new AliasImportEntry(descriptor, aliasName));
}
@@ -104,7 +104,9 @@ public class QualifiedExpressionResolver {
}
for (DeclarationDescriptor descriptor : descriptors) {
importer.addAliasImport(descriptor, aliasName);
if (!DescriptorUtils.isObject(descriptor)) {
importer.addAliasImport(descriptor, aliasName);
}
}
return descriptors;
@@ -0,0 +1,19 @@
// FILE: a.kt
package foo
object Bar {
fun bar() {}
}
// FILE: b.kt
package baz
import foo.Bar
class C: <!UNRESOLVED_REFERENCE!>Bar<!>
fun test() {
Bar.bar()
}
@@ -5419,6 +5419,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage
doTest("compiler/testData/diagnostics/tests/scopes/ImportFromCurrentWithDifferentName.kt");
}
@TestMetadata("ImportObjectAndUseAsSupertype.kt")
public void testImportObjectAndUseAsSupertype() throws Exception {
doTest("compiler/testData/diagnostics/tests/scopes/ImportObjectAndUseAsSupertype.kt");
}
@TestMetadata("ImportObjectHidesCurrentPackage.kt")
public void testImportObjectHidesCurrentPackage() throws Exception {
doTest("compiler/testData/diagnostics/tests/scopes/ImportObjectHidesCurrentPackage.kt");