diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java index dc620dd96de..ef4faaf1f69 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Importer.java @@ -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)); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/QualifiedExpressionResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/QualifiedExpressionResolver.java index 5ee455ea3ab..f742b9ba29f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/QualifiedExpressionResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/QualifiedExpressionResolver.java @@ -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; diff --git a/compiler/testData/diagnostics/tests/scopes/ImportObjectAndUseAsSupertype.kt b/compiler/testData/diagnostics/tests/scopes/ImportObjectAndUseAsSupertype.kt new file mode 100644 index 00000000000..d598e342664 --- /dev/null +++ b/compiler/testData/diagnostics/tests/scopes/ImportObjectAndUseAsSupertype.kt @@ -0,0 +1,19 @@ +// FILE: a.kt + +package foo + +object Bar { + fun bar() {} +} + +// FILE: b.kt + +package baz + +import foo.Bar + +class C: Bar + +fun test() { + Bar.bar() +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index e564d52e518..cea8f4b17bf 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -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"); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/WritableScopeWithImports.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/WritableScopeWithImports.java index a4893459e03..4ed33fa8e54 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/WritableScopeWithImports.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/scopes/WritableScopeWithImports.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import org.jetbrains.jet.lang.descriptors.*; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.utils.Printer; @@ -215,6 +216,10 @@ public abstract class WritableScopeWithImports extends JetScopeAdapter implement public void importClassifierAlias(@NotNull Name importedClassifierName, @NotNull ClassifierDescriptor classifierDescriptor) { checkMayWrite(); + if (DescriptorUtils.isObject(classifierDescriptor)) { + throw new IllegalStateException("must not be object: " + classifierDescriptor); + } + getCurrentIndividualImportScope().addClassifierAlias(importedClassifierName, classifierDescriptor); }