diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassMembersScope.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassMembersScope.java index 1cbdf128b01..95aa2f39494 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassMembersScope.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassMembersScope.java @@ -32,7 +32,7 @@ public abstract class JavaClassMembersScope extends JavaBaseScope { @NotNull protected final ClassPsiDeclarationProvider declarationProvider; - private Map classifiersMap = null; + private Map innerClassesMap = null; protected JavaClassMembersScope( @NotNull ClassOrNamespaceDescriptor descriptor, @@ -56,21 +56,16 @@ public abstract class JavaClassMembersScope extends JavaBaseScope { return getResolver().resolveFunctionGroup(name, declarationProvider, descriptor); } - @Override - public ClassifierDescriptor getClassifier(@NotNull Name name) { - return getClassifiersMap().get(name); - } - @NotNull - private Map getClassifiersMap() { - if (classifiersMap == null) { + private Map getInnerClassesMap() { + if (innerClassesMap == null) { Collection innerClasses = getInnerClasses(); - classifiersMap = new HashMap(); + innerClassesMap = new HashMap(); for (ClassDescriptor innerClass : innerClasses) { - classifiersMap.put(innerClass.getName(), innerClass); + innerClassesMap.put(innerClass.getName(), innerClass); } } - return classifiersMap; + return innerClassesMap; } @NotNull @@ -78,4 +73,22 @@ public abstract class JavaClassMembersScope extends JavaBaseScope { protected Collection computeInnerClasses() { return getResolver().resolveInnerClasses(descriptor, declarationProvider); } + + @Override + public ClassDescriptor getObjectDescriptor(@NotNull Name name) { + ClassDescriptor innerClass = getInnerClassesMap().get(name); + if (innerClass != null && innerClass.getKind().isObject()) { + return innerClass; + } + return null; + } + + @Override + public ClassifierDescriptor getClassifier(@NotNull Name name) { + ClassDescriptor innerClass = getInnerClassesMap().get(name); + if (innerClass == null || innerClass.getKind().isObject()) { + return null; + } + return innerClass; + } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java index 870a5ff3aea..051afb1afe6 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaClassStaticMembersScope.java @@ -39,12 +39,6 @@ public final class JavaClassStaticMembersScope extends JavaClassMembersScope { this.packageFQN = packageFQN; } - @Override - public ClassDescriptor getObjectDescriptor(@NotNull Name name) { - //TODO: check that class is an object - return getResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); - } - @Override public NamespaceDescriptor getNamespace(@NotNull Name name) { return getResolver().resolveNamespace(packageFQN.child(name), DescriptorSearchRule.INCLUDE_KOTLIN); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java index fde7afec85c..02147f9f92b 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java @@ -52,13 +52,22 @@ public abstract class JavaPackageScope extends JavaBaseScope { @Override public ClassifierDescriptor getClassifier(@NotNull Name name) { - return getResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); + ClassDescriptor classDescriptor = + getResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); + if (classDescriptor == null || classDescriptor.getKind().isObject()) { + return null; + } + return classDescriptor; } @Override public ClassDescriptor getObjectDescriptor(@NotNull Name name) { - //TODO: check that class is an object - return getResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); + ClassDescriptor classDescriptor = + getResolver().resolveClass(packageFQN.child(name), DescriptorSearchRule.IGNORE_IF_FOUND_IN_KOTLIN); + if (classDescriptor != null && classDescriptor.getKind().isObject()) { + return classDescriptor; + } + return null; } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.java index 013fcec7cd2..f489303bbc1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/JetScope.java @@ -39,6 +39,9 @@ public interface JetScope { } }; + /** + * Should not return object (class object or enum entry) class descriptors. + */ @Nullable ClassifierDescriptor getClassifier(@NotNull Name name); diff --git a/compiler/testData/compileKotlinAgainstKotlin/ImportObject.A.kt b/compiler/testData/compileKotlinAgainstKotlin/ImportObject.A.kt new file mode 100644 index 00000000000..63ef31c83eb --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/ImportObject.A.kt @@ -0,0 +1,6 @@ +//This a test for blinking bug from KT-3124 +package some + +public object SOME_OBJECT { + +} \ No newline at end of file diff --git a/compiler/testData/compileKotlinAgainstKotlin/ImportObject.B.kt b/compiler/testData/compileKotlinAgainstKotlin/ImportObject.B.kt new file mode 100644 index 00000000000..8d797c096da --- /dev/null +++ b/compiler/testData/compileKotlinAgainstKotlin/ImportObject.B.kt @@ -0,0 +1,7 @@ +//This a test for blinking bug from KT-3124 + +import some.SOME_OBJECT + +fun main(args: Array) { + val a = SOME_OBJECT +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java index 8b8284a32c2..9f8ac29e978 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/CompileKotlinAgainstKotlinTestGenerated.java @@ -43,6 +43,11 @@ public class CompileKotlinAgainstKotlinTestGenerated extends AbstractCompileKotl doTest("compiler/testData/compileKotlinAgainstKotlin/DefaultConstructor.A.kt"); } + @TestMetadata("ImportObject.A.kt") + public void testImportObject_A() throws Exception { + doTest("compiler/testData/compileKotlinAgainstKotlin/ImportObject.A.kt"); + } + @TestMetadata("Simple.A.kt") public void testSimple_A() throws Exception { doTest("compiler/testData/compileKotlinAgainstKotlin/Simple.A.kt");