Debugger: add ability to evaluate expressions on closing bracket
This commit is contained in:
@@ -22,6 +22,7 @@ import com.google.common.base.Predicates;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import kotlin.KotlinPackage;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.analyzer.AnalyzerPackage;
|
||||
import org.jetbrains.jet.di.InjectorForBodyResolve;
|
||||
@@ -245,6 +246,16 @@ public abstract class ElementResolver {
|
||||
scopeForContextElement = descriptor.getScopeForMemberDeclarationResolution();
|
||||
dataFlowInfoForContextElement = DataFlowInfo.EMPTY;
|
||||
}
|
||||
else if (contextElement instanceof JetBlockExpression) {
|
||||
JetElement newContextElement = KotlinPackage.lastOrNull(((JetBlockExpression) contextElement).getStatements());
|
||||
|
||||
if (!(newContextElement instanceof JetExpression)) return;
|
||||
|
||||
BindingContext contextForElement = resolveToElement((JetElement) contextElement, BodyResolveMode.FULL);
|
||||
|
||||
scopeForContextElement = contextForElement.get(BindingContext.RESOLUTION_SCOPE, ((JetExpression) newContextElement));
|
||||
dataFlowInfoForContextElement = getDataFlowInfo(contextForElement, (JetExpression) newContextElement);
|
||||
}
|
||||
else {
|
||||
if (!(contextElement instanceof JetExpression)) return;
|
||||
|
||||
|
||||
@@ -66,6 +66,7 @@ import org.jetbrains.jet.lang.resolve.lazy.descriptors.LazyClassDescriptor
|
||||
import org.jetbrains.jet.lang.resolve.calls.smartcasts.DataFlowInfo
|
||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope
|
||||
import org.jetbrains.jet.lang.resolve.lazy.BodyResolveMode
|
||||
import org.jetbrains.jet.lang.psi.JetBlockExpression
|
||||
|
||||
public trait CacheExtension<T> {
|
||||
public val platform: TargetPlatform
|
||||
@@ -290,6 +291,15 @@ private object KotlinResolveDataProvider {
|
||||
scopeForContextElement = descriptor.getScopeForMemberDeclarationResolution()
|
||||
dataFlowInfo = DataFlowInfo.EMPTY
|
||||
}
|
||||
else if (contextElement is JetBlockExpression) {
|
||||
val newContextElement = contextElement.getStatements().lastOrNull()
|
||||
if (newContextElement !is JetExpression) return BindingContext.EMPTY
|
||||
|
||||
val contextForElement = newContextElement.getResolutionFacade().analyze(newContextElement, BodyResolveMode.FULL)
|
||||
|
||||
scopeForContextElement = contextForElement[BindingContext.RESOLUTION_SCOPE, newContextElement]
|
||||
dataFlowInfo = contextForElement.getDataFlowInfo(newContextElement)
|
||||
}
|
||||
else {
|
||||
if (contextElement !is JetExpression) return BindingContext.EMPTY
|
||||
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
fun foo() {
|
||||
val aaa1 = 1
|
||||
val aaa2 = 2
|
||||
<caret>}
|
||||
@@ -0,0 +1 @@
|
||||
aaa1 + aaa2
|
||||
@@ -0,0 +1,7 @@
|
||||
fun foo() {
|
||||
val aaa1 = 1
|
||||
val aaa2 = 2
|
||||
<caret>}
|
||||
|
||||
// INVOCATION_COUNT: 1
|
||||
// EXIST: aaa1, aaa2
|
||||
@@ -0,0 +1 @@
|
||||
aa<caret>
|
||||
+6
@@ -61,6 +61,12 @@ public class CodeFragmentCompletionTestGenerated extends AbstractCodeFragmentCom
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("localVariablesOnReturn.kt")
|
||||
public void testLocalVariablesOnReturn() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/codeFragments/localVariablesOnReturn.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("topLevel.kt")
|
||||
public void testTopLevel() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/codeFragments/topLevel.kt");
|
||||
|
||||
+6
@@ -81,6 +81,12 @@ public class CodeFragmentHighlightingTestGenerated extends AbstractCodeFragmentH
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("localVariablesOnReturn.kt")
|
||||
public void testLocalVariablesOnReturn() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/checker/codeFragments/localVariablesOnReturn.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("privateFunArgumentsResolve.kt")
|
||||
public void testPrivateFunArgumentsResolve() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("idea/testData/checker/codeFragments/privateFunArgumentsResolve.kt");
|
||||
|
||||
Reference in New Issue
Block a user