diff --git a/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/ElementResolver.java b/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/ElementResolver.java index 558d0e19191..5269ed5f2db 100644 --- a/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/ElementResolver.java +++ b/idea/ide-common/src/org/jetbrains/jet/lang/resolve/lazy/ElementResolver.java @@ -238,7 +238,7 @@ public abstract class ElementResolver { if (!(contextElement instanceof JetExpression)) return; JetExpression contextExpression = (JetExpression) contextElement; - BindingContext contextForElement = resolveToElement((JetElement) contextElement); + BindingContext contextForElement = resolveToElement((JetElement) contextElement, true); scopeForContextElement = contextForElement.get(BindingContext.RESOLUTION_SCOPE, contextExpression); dataFlowInfoForContextElement = getDataFlowInfo(contextForElement, contextExpression); diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt index 75f582829f7..0ad4fcf9940 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt @@ -292,7 +292,7 @@ private object KotlinResolveDataProvider { else { if (contextElement !is JetExpression) return BindingContext.EMPTY - val contextForElement = contextElement.analyzeFully() + val contextForElement = contextElement.getResolutionFacade().analyzeWithPartialBodyResolve(contextElement) scopeForContextElement = contextForElement[BindingContext.RESOLUTION_SCOPE, contextElement] dataFlowInfo = contextForElement.getDataFlowInfo(contextElement) diff --git a/idea/testData/checker/codeFragments/localVariables.kt b/idea/testData/checker/codeFragments/localVariables.kt new file mode 100644 index 00000000000..d08cdf11a29 --- /dev/null +++ b/idea/testData/checker/codeFragments/localVariables.kt @@ -0,0 +1,5 @@ +fun foo() { + val aaa1 = 1 + val t = 2 + val aaa3 = 2 +} diff --git a/idea/testData/checker/codeFragments/localVariables.kt.fragment b/idea/testData/checker/codeFragments/localVariables.kt.fragment new file mode 100644 index 00000000000..548f17b8820 --- /dev/null +++ b/idea/testData/checker/codeFragments/localVariables.kt.fragment @@ -0,0 +1 @@ +aaa1 + aaa3 diff --git a/idea/testData/completion/basic/codeFragments/localVariables.kt b/idea/testData/completion/basic/codeFragments/localVariables.kt new file mode 100644 index 00000000000..ac5dc31fdcc --- /dev/null +++ b/idea/testData/completion/basic/codeFragments/localVariables.kt @@ -0,0 +1,9 @@ +fun foo() { + val aaa1 = 1 + val t = 2 + val aaa3 = 2 +} + +// INVOCATION_COUNT: 1 +// EXIST: aaa1 +// ABSENT: aaa3 diff --git a/idea/testData/completion/basic/codeFragments/localVariables.kt.fragment b/idea/testData/completion/basic/codeFragments/localVariables.kt.fragment new file mode 100644 index 00000000000..cf9a5086bb5 --- /dev/null +++ b/idea/testData/completion/basic/codeFragments/localVariables.kt.fragment @@ -0,0 +1 @@ +aaa diff --git a/idea/testData/debugger/tinyApp/outs/localVariables.out b/idea/testData/debugger/tinyApp/outs/localVariables.out new file mode 100644 index 00000000000..032735705dd --- /dev/null +++ b/idea/testData/debugger/tinyApp/outs/localVariables.out @@ -0,0 +1,8 @@ +LineBreakpoint created at localVariables.kt:6 +!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !APP_PATH!\classes;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! localVariables.LocalVariablesPackage +Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' +localVariables.kt:6 +Compile bytecode for aaa1 +Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' + +Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/localVariables.kt b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/localVariables.kt new file mode 100644 index 00000000000..fe96f75d472 --- /dev/null +++ b/idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/localVariables.kt @@ -0,0 +1,14 @@ +package localVariables + +fun main(args: Array) { + val aaa1 = 1 + //Breakpoint! + val t = 2 + val aaa3 = 2 +} + +// EXPRESSION: aaa1 +// RESULT: 1: I + +// EXPRESSION: aaa3 + aaa1 +// RESULT: Unresolved reference: aaa3 \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/CodeFragmentCompletionTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/CodeFragmentCompletionTestGenerated.java index 168c21b9f20..b51495a2ffb 100644 --- a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/CodeFragmentCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/CodeFragmentCompletionTestGenerated.java @@ -55,6 +55,12 @@ public class CodeFragmentCompletionTestGenerated extends AbstractCodeFragmentCom doTest(fileName); } + @TestMetadata("localVariables.kt") + public void testLocalVariables() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/codeFragments/localVariables.kt"); + doTest(fileName); + } + @TestMetadata("topLevel.kt") public void testTopLevel() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/codeFragments/topLevel.kt"); diff --git a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/CodeFragmentHighlightingTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/CodeFragmentHighlightingTestGenerated.java index 1af5fa5786d..451bf707a0f 100644 --- a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/CodeFragmentHighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/CodeFragmentHighlightingTestGenerated.java @@ -75,6 +75,12 @@ public class CodeFragmentHighlightingTestGenerated extends AbstractCodeFragmentH doTest(fileName); } + @TestMetadata("localVariables.kt") + public void testLocalVariables() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/checker/codeFragments/localVariables.kt"); + doTest(fileName); + } + @TestMetadata("privateFunArgumentsResolve.kt") public void testPrivateFunArgumentsResolve() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/checker/codeFragments/privateFunArgumentsResolve.kt"); diff --git a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java index 5ac1a4e0b45..0de3a3f633b 100644 --- a/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java +++ b/idea/tests/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluateExpressionTestGenerated.java @@ -148,6 +148,12 @@ public class KotlinEvaluateExpressionTestGenerated extends AbstractKotlinEvaluat doSingleBreakpointTest(fileName); } + @TestMetadata("localVariables.kt") + public void testLocalVariables() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/localVariables.kt"); + doSingleBreakpointTest(fileName); + } + @TestMetadata("methodWithBreakpoint.kt") public void testMethodWithBreakpoint() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/evaluate/singleBreakpoint/methodWithBreakpoint.kt");