diff --git a/idea/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java b/idea/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java index 713376b0116..359bd58c5f3 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java +++ b/idea/src/org/jetbrains/jet/plugin/project/ResolveSessionForBodies.java @@ -1,5 +1,5 @@ /* - * Copyright 2010-2013 JetBrains s.r.o. + * Copyright 2010-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,6 +27,7 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.ScriptDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.lazy.KotlinCodeAnalyzer; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.lazy.ScopeProvider; @@ -78,7 +79,14 @@ public class ResolveSessionForBodies implements KotlinCodeAnalyzer, Modification @NotNull @Override public DeclarationDescriptor resolveToDescriptor(JetDeclaration declaration) { - return resolveSession.resolveToDescriptor(declaration); + if (!JetPsiUtil.isLocal(declaration)) { + return resolveSession.resolveToDescriptor(declaration); + } + + BindingContext context = resolveElementCache.resolveToElement(declaration); + return BindingContextUtils.getNotNull(context, BindingContext.DECLARATION_TO_DESCRIPTOR, declaration, + "Descriptor wasn't found for declaration " + declaration.toString() + "\n" + + JetPsiUtil.getElementTextWithContext(declaration)); } @Override diff --git a/idea/testData/quickfix/override/afterOverridingFinalMethodInLocal.kt b/idea/testData/quickfix/override/afterOverridingFinalMethodInLocal.kt new file mode 100644 index 00000000000..5ec80b38846 --- /dev/null +++ b/idea/testData/quickfix/override/afterOverridingFinalMethodInLocal.kt @@ -0,0 +1,10 @@ +// "Make A.foo open" "true" +open class A { + open fun foo() {} +} + +fun test() { + val some = object : A() { + override fun foo() {} + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/override/beforeOverridingFinalMethodInLocal.kt b/idea/testData/quickfix/override/beforeOverridingFinalMethodInLocal.kt new file mode 100644 index 00000000000..b30fed9b3d2 --- /dev/null +++ b/idea/testData/quickfix/override/beforeOverridingFinalMethodInLocal.kt @@ -0,0 +1,10 @@ +// "Make A.foo open" "true" +open class A { + fun foo() {} +} + +fun test() { + val some = object : A() { + override fun foo() {} + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/override/nothingToOverride/afterAddFunctionInLocalDeclaration.kt b/idea/testData/quickfix/override/nothingToOverride/afterAddFunctionInLocalDeclaration.kt new file mode 100644 index 00000000000..6cd67f1f3cb --- /dev/null +++ b/idea/testData/quickfix/override/nothingToOverride/afterAddFunctionInLocalDeclaration.kt @@ -0,0 +1,11 @@ +// "Add 'open fun f()' to 'A'" "true" +open class A { + open fun f() { + } +} + +fun test() { + val some = object : A() { + override fun f() {} + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/override/nothingToOverride/beforeAddFunctionInLocalDeclaration.kt b/idea/testData/quickfix/override/nothingToOverride/beforeAddFunctionInLocalDeclaration.kt new file mode 100644 index 00000000000..0ce58adf4bf --- /dev/null +++ b/idea/testData/quickfix/override/nothingToOverride/beforeAddFunctionInLocalDeclaration.kt @@ -0,0 +1,9 @@ +// "Add 'open fun f()' to 'A'" "true" +open class A { +} + +fun test() { + val some = object : A() { + override fun f() {} + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java index 60b2ca17c1b..7f93f8f37ed 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixTestGenerated.java @@ -1092,6 +1092,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest("idea/testData/quickfix/override/beforeOverridingFinalMethod.kt"); } + @TestMetadata("beforeOverridingFinalMethodInLocal.kt") + public void testOverridingFinalMethodInLocal() throws Exception { + doTest("idea/testData/quickfix/override/beforeOverridingFinalMethodInLocal.kt"); + } + @TestMetadata("beforeOverridingFinalProperty.kt") public void testOverridingFinalProperty() throws Exception { doTest("idea/testData/quickfix/override/beforeOverridingFinalProperty.kt"); @@ -1134,6 +1139,11 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest { doTest("idea/testData/quickfix/override/nothingToOverride/beforeAddFunctionAbstractClass.kt"); } + @TestMetadata("beforeAddFunctionInLocalDeclaration.kt") + public void testAddFunctionInLocalDeclaration() throws Exception { + doTest("idea/testData/quickfix/override/nothingToOverride/beforeAddFunctionInLocalDeclaration.kt"); + } + @TestMetadata("beforeAddFunctionNoBody.kt") public void testAddFunctionNoBody() throws Exception { doTest("idea/testData/quickfix/override/nothingToOverride/beforeAddFunctionNoBody.kt");