Basic implementation of partial body resolve

This commit is contained in:
Valentin Kipyatkov
2014-11-17 20:20:16 +03:00
parent 9809e4fd0a
commit a675b5ba38
56 changed files with 852 additions and 32 deletions
@@ -75,6 +75,11 @@ public class BodyResolver {
this.expressionTypingServices = expressionTypingServices;
}
@NotNull
public ExpressionTypingServices getExpressionTypingServices() {
return expressionTypingServices;
}
@Inject
public void setCallResolver(@NotNull CallResolver callResolver) {
this.callResolver = callResolver;
@@ -19,6 +19,8 @@ package org.jetbrains.jet.lang.types.expressions;
import com.google.common.base.Function;
import com.intellij.openapi.project.Project;
import com.intellij.psi.tree.IElementType;
import kotlin.Function1;
import kotlin.KotlinPackage;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.analyzer.AnalyzerPackage;
@@ -73,6 +75,8 @@ public class ExpressionTypingServices {
private AnnotationResolver annotationResolver;
@NotNull
private CallResolverExtensionProvider extensionProvider;
@Nullable
private Function1<JetElement, Boolean> filter;
@NotNull
public Project getProject() {
@@ -139,6 +143,15 @@ public class ExpressionTypingServices {
this.extensionProvider = extensionProvider;
}
@Nullable
public Function1<JetElement, Boolean> getFilter() {
return filter;
}
public void setFilter(@Nullable Function1<JetElement, Boolean> filter) {
this.filter = filter;
}
public ExpressionTypingServices(@NotNull ExpressionTypingComponents components) {
this.expressionTypingComponents = components;
this.expressionTypingFacade = ExpressionTypingVisitorDispatcher.create(components);
@@ -206,6 +219,10 @@ public class ExpressionTypingServices {
) {
List<JetElement> block = expression.getStatements();
if (filter != null && !(expression instanceof JetPsiUtil.JetExpressionWrapper)) {
block = KotlinPackage.filter(block, filter);
}
// SCRIPT: get code descriptor for script declaration
DeclarationDescriptor containingDescriptor = context.scope.getContainingDeclaration();
if (containingDescriptor instanceof ScriptDescriptor) {