From 7433859a51a95e33e3e87c51003fa3ec2148adcf Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 1 Apr 2011 16:10:48 +0400 Subject: [PATCH] Blocks denoted in the BindingContext --- .../jetbrains/jet/lang/resolve/BindingContext.java | 2 ++ .../jet/lang/resolve/BindingTraceContext.java | 13 +++++++++++++ .../org/jetbrains/jet/lang/types/BindingTrace.java | 4 ++++ .../jetbrains/jet/lang/types/JetTypeInferrer.java | 1 + 4 files changed, 20 insertions(+) diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java index 9e227e372ed..2293ab8221e 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java @@ -25,4 +25,6 @@ public interface BindingContext { JetType resolveTypeReference(JetTypeReference typeReference); PsiElement resolveToDeclarationPsiElement(JetReferenceExpression referenceExpression); PsiElement getDeclarationPsiElement(DeclarationDescriptor descriptor); + + boolean isBlock(JetFunctionLiteralExpression expression); } diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java index 417d9dca55f..acbe4bd62d6 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java @@ -6,7 +6,9 @@ import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.types.*; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; +import java.util.Set; /** * @author abreslav @@ -18,6 +20,7 @@ public class BindingTraceContext extends BindingTrace implements BindingContext private final Map types = new HashMap(); private final Map descriptorToDeclarations = new HashMap(); private final Map declarationsToDescriptors = new HashMap(); + private final Set blocks = new HashSet(); private JetScope toplevelScope; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -53,6 +56,11 @@ public class BindingTraceContext extends BindingTrace implements BindingContext declarationsToDescriptors.put(declaration, descriptor.getOriginal()); } + @Override + public void recordBlock(JetFunctionLiteralExpression expression) { + blocks.add(expression); + } + public void setToplevelScope(JetScope toplevelScope) { this.toplevelScope = toplevelScope; } @@ -122,4 +130,9 @@ public class BindingTraceContext extends BindingTrace implements BindingContext public PsiElement getDeclarationPsiElement(DeclarationDescriptor descriptor) { return descriptorToDeclarations.get(descriptor.getOriginal()); } + + @Override + public boolean isBlock(JetFunctionLiteralExpression expression) { + return expression.hasParameterSpecification() || blocks.contains(expression); + } } diff --git a/idea/src/org/jetbrains/jet/lang/types/BindingTrace.java b/idea/src/org/jetbrains/jet/lang/types/BindingTrace.java index 171cd9f3f9b..35ef7460a79 100644 --- a/idea/src/org/jetbrains/jet/lang/types/BindingTrace.java +++ b/idea/src/org/jetbrains/jet/lang/types/BindingTrace.java @@ -34,6 +34,10 @@ public class BindingTrace { } + public void recordBlock(JetFunctionLiteralExpression expression) { + + } + public void removeReferenceResolution(@NotNull JetReferenceExpression referenceExpression) { } diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index e992cb10c30..62378b9d10e 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -378,6 +378,7 @@ public class JetTypeInferrer { @Override public void visitFunctionLiteralExpression(JetFunctionLiteralExpression expression) { if (preferBlock && !expression.hasParameterSpecification()) { + trace.recordBlock(expression); result = getBlockReturnedType(scope, expression.getBody(), LabeledJumpDomain.ERROR); return; }