From 792bc0f5d2046043be3fcd453235e61528341d57 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 6 May 2011 19:56:58 +0400 Subject: [PATCH] AnalyzingUtils refactored --- .../jet/codegen/NamespaceCodegen.java | 5 ++- .../annotations/JetLineMarkerProvider.java | 2 +- .../jet/lang/annotations/JetPsiChecker.java | 2 +- .../jet/lang/psi/JetReferenceExpression.java | 3 +- .../jet/lang/resolve/AnalyzingUtils.java | 31 +++++-------------- .../plugin/JetQuickDocumentationProvider.java | 5 ++- .../jet/resolve/ExpectedResolveData.java | 15 ++++----- 7 files changed, 24 insertions(+), 39 deletions(-) diff --git a/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java b/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java index 8e9f45afcbb..d2d0539ff04 100644 --- a/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/NamespaceCodegen.java @@ -2,6 +2,7 @@ package org.jetbrains.jet.codegen; import com.intellij.openapi.project.Project; import org.jetbrains.jet.lang.ErrorHandler; +import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.AnalyzingUtils; import org.jetbrains.jet.lang.resolve.BindingContext; @@ -38,7 +39,9 @@ public class NamespaceCodegen { } public void generate(JetNamespace namespace) { - BindingContext bindingContext = AnalyzingUtils.analyzeNamespace(namespace, ErrorHandler.THROW_EXCEPTION); + BindingContext bindingContext1 = AnalyzingUtils.analyzeNamespace(namespace, JetControlFlowDataTraceFactory.EMPTY); + AnalyzingUtils.applyHandler(ErrorHandler.THROW_EXCEPTION, bindingContext1); + BindingContext bindingContext = bindingContext1; final JetStandardLibrary standardLibrary = JetStandardLibrary.getJetStandardLibrary(project); final FunctionCodegen functionCodegen = new FunctionCodegen(namespace, v, standardLibrary, bindingContext); diff --git a/idea/src/org/jetbrains/jet/lang/annotations/JetLineMarkerProvider.java b/idea/src/org/jetbrains/jet/lang/annotations/JetLineMarkerProvider.java index c900e8298d0..c7d17d9feea 100644 --- a/idea/src/org/jetbrains/jet/lang/annotations/JetLineMarkerProvider.java +++ b/idea/src/org/jetbrains/jet/lang/annotations/JetLineMarkerProvider.java @@ -43,7 +43,7 @@ public class JetLineMarkerProvider implements LineMarkerProvider { JetFile file = PsiTreeUtil.getParentOfType(element, JetFile.class); assert file != null; - final BindingContext bindingContext = AnalyzingUtils.analyzeFile(file); + final BindingContext bindingContext = AnalyzingUtils.analyzeFileWithCache(file); FunctionDescriptor functionDescriptor = bindingContext.getFunctionDescriptor(jetFunction); final Set overriddenFunctions = functionDescriptor.getOverriddenFunctions(); if (!overriddenFunctions.isEmpty()) { diff --git a/idea/src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java b/idea/src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java index ee6544d6e0b..f316399090d 100644 --- a/idea/src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java +++ b/idea/src/org/jetbrains/jet/lang/annotations/JetPsiChecker.java @@ -37,7 +37,7 @@ public class JetPsiChecker implements Annotator { JetFile file = (JetFile) element; try { - final BindingContext bindingContext = AnalyzingUtils.analyzeFile(file); + final BindingContext bindingContext = AnalyzingUtils.analyzeFileWithCache(file); ErrorHandler errorHandler = new ErrorHandler() { private final Set redeclarations = new HashSet(); diff --git a/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java b/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java index cc844e507bf..9699f0628ad 100644 --- a/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java +++ b/idea/src/org/jetbrains/jet/lang/psi/JetReferenceExpression.java @@ -5,7 +5,6 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.ErrorHandler; import org.jetbrains.jet.lang.resolve.AnalyzingUtils; import org.jetbrains.jet.lang.resolve.BindingContext; @@ -19,7 +18,7 @@ public abstract class JetReferenceExpression extends JetExpression { protected PsiElement doResolve() { JetFile file = (JetFile) getContainingFile(); - BindingContext bindingContext = AnalyzingUtils.analyzeFile(file, ErrorHandler.DO_NOTHING); + BindingContext bindingContext = AnalyzingUtils.analyzeFileWithCache(file); PsiElement psiElement = bindingContext.resolveToDeclarationPsiElement(this); return psiElement == null ? file diff --git a/idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java b/idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java index 206f03b4d87..c7a4872d9bc 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java @@ -26,9 +26,8 @@ import org.jetbrains.jet.lang.types.ModuleDescriptor; public class AnalyzingUtils { private final static Key> BINDING_CONTEXT = Key.create("BINDING_CONTEXT"); - public static BindingContext analyzeFile(@NotNull final JetFile file) { + public static BindingContext analyzeFileWithCache(@NotNull final JetFile file) { // TODO : Synchronization? - // TODO : Error handler may be ignored CachedValue bindingContextCachedValue = file.getUserData(BINDING_CONTEXT); if (bindingContextCachedValue == null) { bindingContextCachedValue = CachedValuesManager.getManager(file.getProject()).createCachedValue(new CachedValueProvider() { @@ -44,10 +43,6 @@ public class AnalyzingUtils { return bindingContextCachedValue.getValue(); } - public static BindingContext analyzeNamespace(@NotNull JetNamespace namespace) { - return analyzeNamespace(namespace, JetControlFlowDataTraceFactory.EMPTY); - } - public static BindingContext analyzeNamespace(@NotNull JetNamespace namespace, @NotNull JetControlFlowDataTraceFactory flowDataTraceFactory) { Project project = namespace.getProject(); @@ -66,6 +61,12 @@ public class AnalyzingUtils { return bindingTraceContext; } + public static void applyHandler(@NotNull ErrorHandler errorHandler, @NotNull BindingContext bindingContext) { + for (JetDiagnostic jetDiagnostic : bindingContext.getDiagnostics()) { + jetDiagnostic.acceptHandler(errorHandler); + } + } + public static void checkForSyntacticErrors(@NotNull PsiElement root) { root.acceptChildren(new PsiElementVisitor() { @Override @@ -79,22 +80,4 @@ public class AnalyzingUtils { } }); } - - public static BindingContext analyzeNamespace(@NotNull JetNamespace namespace, @NotNull ErrorHandler errorHandler) { - BindingContext bindingContext = analyzeNamespace(namespace); - applyHandler(errorHandler, bindingContext); - return bindingContext; - } - - private static void applyHandler(@NotNull ErrorHandler errorHandler, @NotNull BindingContext bindingContext) { - for (JetDiagnostic jetDiagnostic : bindingContext.getDiagnostics()) { - jetDiagnostic.acceptHandler(errorHandler); - } - } - - public static BindingContext analyzeFile(@NotNull JetFile file, @NotNull ErrorHandler errorHandler) { - BindingContext bindingContext = analyzeFile(file); - applyHandler(errorHandler, bindingContext); - return bindingContext; - } } diff --git a/idea/src/org/jetbrains/jet/plugin/JetQuickDocumentationProvider.java b/idea/src/org/jetbrains/jet/plugin/JetQuickDocumentationProvider.java index e11ce4d1012..e2eaf29626b 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetQuickDocumentationProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/JetQuickDocumentationProvider.java @@ -4,7 +4,6 @@ import com.intellij.lang.documentation.DocumentationProvider; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; import com.intellij.psi.util.PsiTreeUtil; -import org.jetbrains.jet.lang.ErrorHandler; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetReferenceExpression; import org.jetbrains.jet.lang.resolve.AnalyzingUtils; @@ -30,7 +29,7 @@ public class JetQuickDocumentationProvider implements DocumentationProvider { ref = PsiTreeUtil.getParentOfType(originalElement, JetReferenceExpression.class); } if (ref != null) { - BindingContext bindingContext = AnalyzingUtils.analyzeFile((JetFile) element.getContainingFile(), ErrorHandler.DO_NOTHING); + BindingContext bindingContext = AnalyzingUtils.analyzeFileWithCache((JetFile) element.getContainingFile()); DeclarationDescriptor declarationDescriptor = bindingContext.resolveReferenceExpression(ref); if (declarationDescriptor != null) { return render(declarationDescriptor); @@ -40,7 +39,7 @@ public class JetQuickDocumentationProvider implements DocumentationProvider { // if (originalElement.getNode().getElementType() == JetTokens.IDENTIFIER) { // JetDeclaration declaration = PsiTreeUtil.getParentOfType(originalElement, JetDeclaration.class); -// BindingContext bindingContext = AnalyzingUtils.analyzeFile((JetFile) element.getContainingFile(), ErrorHandler.DO_NOTHING); +// BindingContext bindingContext = AnalyzingUtils.analyzeFileWithCache((JetFile) element.getContainingFile(), ErrorHandler.DO_NOTHING); // DeclarationDescriptor declarationDescriptor = bindingContext.getDeclarationDescriptor(declaration); // if (declarationDescriptor != null) { // return render(declarationDescriptor); diff --git a/idea/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java b/idea/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java index 41b624d6ab2..82ea651ee4f 100644 --- a/idea/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java +++ b/idea/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java @@ -7,6 +7,7 @@ import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.ErrorHandler; import org.jetbrains.jet.lang.JetSemanticServices; +import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.AnalyzingUtils; import org.jetbrains.jet.lang.resolve.BindingContext; @@ -81,16 +82,16 @@ public class ExpectedResolveData { public void checkResult(JetFile file) { final Set unresolvedReferences = new HashSet(); - ErrorHandler errorHandler = new ErrorHandler() { - @Override - public void unresolvedReference(@NotNull JetReferenceExpression referenceExpression) { - unresolvedReferences.add(referenceExpression); - } - }; JetSemanticServices semanticServices = JetSemanticServices.createSemanticServices(file.getProject()); JetStandardLibrary lib = semanticServices.getStandardLibrary(); - BindingContext bindingContext = AnalyzingUtils.analyzeFile(file, errorHandler); + BindingContext bindingContext = AnalyzingUtils.analyzeNamespace(file.getRootNamespace(), JetControlFlowDataTraceFactory.EMPTY); + AnalyzingUtils.applyHandler(new ErrorHandler() { + @Override + public void unresolvedReference(@NotNull JetReferenceExpression referenceExpression) { + unresolvedReferences.add(referenceExpression); + } + }, bindingContext); Map nameToDeclaration = new HashMap();