diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockCodeFragment.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockCodeFragment.kt index e2cdc8ece38..02ef27e2900 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockCodeFragment.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockCodeFragment.kt @@ -27,5 +27,6 @@ public class JetBlockCodeFragment( context: PsiElement? ) : JetCodeFragment(project, name, text, JetNodeTypes.BLOCK_CODE_FRAGMENT, context) { - fun getBlock() = findChildByClass(javaClass()) ?: throw IllegalStateException("Block expression should be parsed for BlockCodeFragment") + override fun getSignificantElement() = findChildByClass(javaClass()) + ?: throw IllegalStateException("Block expression should be parsed for BlockCodeFragment") } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCodeFragment.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCodeFragment.kt index 38d8a37e51e..09e06a58f33 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCodeFragment.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCodeFragment.kt @@ -50,6 +50,8 @@ public abstract class JetCodeFragment( private var _superType: PsiType? = null private var _exceptionHandler: JavaCodeFragment.ExceptionHandler? = null + public abstract fun getSignificantElement(): JetElement? + override fun forceResolveScope(scope: GlobalSearchScope?) { _resolveScope = scope } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpressionCodeFragment.kt b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpressionCodeFragment.kt index 76798edc95c..d3dabdfd2b0 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpressionCodeFragment.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpressionCodeFragment.kt @@ -30,5 +30,5 @@ public class JetExpressionCodeFragment( context: PsiElement? ) : JetCodeFragment(project, name, text, JetNodeTypes.EXPRESSION_CODE_FRAGMENT, context) { - fun getExpression() = findChildByClass(javaClass()) + override fun getSignificantElement() = findChildByClass(javaClass()) } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeCodeFragment.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeCodeFragment.java index 65ae8256d15..07f406ee9c1 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeCodeFragment.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetTypeCodeFragment.java @@ -30,11 +30,17 @@ public class JetTypeCodeFragment extends JetCodeFragment { @Nullable public JetType getType() { - JetTypeReference typeReference = findChildByClass(JetTypeReference.class); - if (typeReference != null) { + JetElement typeReference = getSignificantElement(); + if (typeReference instanceof JetTypeReference) { //TODO return the actual type return KotlinBuiltIns.getInstance().getAnyType(); } return null; } + + @Nullable + @Override + public JetElement getSignificantElement() { + return findChildByClass(JetTypeReference.class); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt b/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt index 0933b064f7c..811ce6064d1 100644 --- a/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt +++ b/idea/src/org/jetbrains/jet/plugin/debugger/evaluate/KotlinEvaluationBuilder.kt @@ -254,11 +254,7 @@ fun addDebugExpressionBeforeContextElement(codeFragment: JetCodeFragment, contex parent.addBefore(JetPsiFactory.createNewLine(contextElement.getProject()), contextElement) - val debugExpression = when(codeFragment) { - is JetExpressionCodeFragment -> codeFragment.getExpression() - is JetBlockCodeFragment -> codeFragment.getBlock() - else -> null - } + val debugExpression = codeFragment.getSignificantElement() if (debugExpression == null) return null val newDebugExpression = parent.addBefore(debugExpression, contextElement) diff --git a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java index 2b017188799..e346fd9d455 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java +++ b/idea/src/org/jetbrains/jet/plugin/project/ResolveElementCache.java @@ -218,14 +218,8 @@ public class ResolveElementCache { JetCodeFragment codeFragment, BindingTrace trace ) { - JetExpression codeFragmentExpression = null; - if (codeFragment instanceof JetExpressionCodeFragment) { - codeFragmentExpression = ((JetExpressionCodeFragment) codeFragment).getExpression(); - } - else if (codeFragment instanceof JetBlockCodeFragment) { - codeFragmentExpression = ((JetBlockCodeFragment) codeFragment).getBlock(); - } - if (codeFragmentExpression == null) return; + JetElement codeFragmentExpression = codeFragment.getSignificantElement(); + if (!(codeFragmentExpression instanceof JetExpression)) return; PsiElement contextElement = codeFragment.getContext(); if (!(contextElement instanceof JetExpression)) return; @@ -245,7 +239,7 @@ public class ResolveElementCache { DataFlowInfo dataFlowInfoForContextElement = contextForElement.get(BindingContext.EXPRESSION_DATA_FLOW_INFO, contextExpression); AnalyzerPackage.computeTypeInContext( - codeFragmentExpression, + (JetExpression) codeFragmentExpression, chainedScope, trace, dataFlowInfoForContextElement == null ? DataFlowInfo.EMPTY : dataFlowInfoForContextElement,