From 2b0232307c7e3e987f4609dcae721c83236431a8 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Fri, 26 Jul 2013 21:08:46 +0400 Subject: [PATCH] Fix error on getting descriptor for class object --- .../jet/lang/resolve/lazy/ResolveSession.java | 4 +--- .../PropertyPlaceInClassObjectInObject.kt | 10 ++++++++++ .../jet/resolve/AbstractResolveBaseTest.java | 18 ++++++++++++++---- .../resolve/ReferenceResolveTestGenerated.java | 5 +++++ 4 files changed, 30 insertions(+), 7 deletions(-) create mode 100644 idea/testData/resolve/references/PropertyPlaceInClassObjectInObject.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java index f5d3c49a941..c8596e57455 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java @@ -259,9 +259,7 @@ public class ResolveSession implements KotlinCodeAnalyzer { @Override public DeclarationDescriptor visitClassObject(JetClassObject classObject, Void data) { - DeclarationDescriptor containingDeclaration = - getInjector().getScopeProvider().getResolutionScopeForDeclaration(classObject).getContainingDeclaration(); - return ((ClassDescriptor) containingDeclaration).getClassObjectDescriptor(); + return getClassObjectDescriptor(classObject); } @Override diff --git a/idea/testData/resolve/references/PropertyPlaceInClassObjectInObject.kt b/idea/testData/resolve/references/PropertyPlaceInClassObjectInObject.kt new file mode 100644 index 00000000000..e3752159b43 --- /dev/null +++ b/idea/testData/resolve/references/PropertyPlaceInClassObjectInObject.kt @@ -0,0 +1,10 @@ +package testing + +object Testing { + class object { + va + } +} + +/// Should not fall on temp references in invalid code +// REF_EMPTY \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/resolve/AbstractResolveBaseTest.java b/idea/tests/org/jetbrains/jet/resolve/AbstractResolveBaseTest.java index c46bc807788..def3a9a5c96 100644 --- a/idea/tests/org/jetbrains/jet/resolve/AbstractResolveBaseTest.java +++ b/idea/tests/org/jetbrains/jet/resolve/AbstractResolveBaseTest.java @@ -53,8 +53,16 @@ public abstract class AbstractResolveBaseTest extends LightCodeInsightTestCase { } protected static void doSingleResolveTest() { + boolean shouldBeUnresolved = InTextDirectivesUtils.isDirectiveDefined(getFile().getText(), "REF_EMPTY"); String referenceToString = InTextDirectivesUtils.findStringWithPrefixes(getFile().getText(), "REF:"); - Assert.assertNotNull("Test data wasn't found, use \"// REF: \" directive", referenceToString); + + if (shouldBeUnresolved) { + Assert.assertNull("REF: directives will be ignored for REF_EMPTY test", referenceToString); + referenceToString = ""; + } + else { + Assert.assertNotNull("Test data wasn't found, use \"// REF: \" directive", referenceToString); + } int offset = getEditor().getCaretModel().getOffset(); PsiReference psiReference = getFile().findReferenceAt(offset); @@ -67,9 +75,11 @@ public abstract class AbstractResolveBaseTest extends LightCodeInsightTestCase { assertEquals(notEqualMessage, referenceToString, resolvedToElementStr); } else { - Assert.assertNull( - String.format("Element %s wasn't resolved to anything, but %s was expected", psiReference, referenceToString), - referenceToString); + if (!shouldBeUnresolved) { + Assert.assertNull( + String.format("Element %s wasn't resolved to anything, but %s was expected", psiReference, referenceToString), + referenceToString); + } } } else { diff --git a/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java b/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java index 05a810537ee..570e48939f3 100644 --- a/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/resolve/ReferenceResolveTestGenerated.java @@ -106,6 +106,11 @@ public class ReferenceResolveTestGenerated extends AbstractResolveBaseTest { doTest("idea/testData/resolve/references/PackageReferenceInImport.kt"); } + @TestMetadata("PropertyPlaceInClassObjectInObject.kt") + public void testPropertyPlaceInClassObjectInObject() throws Exception { + doTest("idea/testData/resolve/references/PropertyPlaceInClassObjectInObject.kt"); + } + @TestMetadata("ReferenceInClassWhereConstraint.kt") public void testReferenceInClassWhereConstraint() throws Exception { doTest("idea/testData/resolve/references/ReferenceInClassWhereConstraint.kt");