From 04d4b8d53ddcc0f2bd63d7679038d0d938c69f49 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 28 Oct 2011 22:30:17 +0400 Subject: [PATCH] A stupid implementation of resolve for multiple files in the IDE --- .../jet/lang/resolve/AnalyzingUtils.java | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java index 007c0c8340a..9a4e22e6374 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/AnalyzingUtils.java @@ -1,11 +1,13 @@ package org.jetbrains.jet.lang.resolve; +import com.google.common.collect.Lists; +import com.intellij.openapi.compiler.ex.CompilerPathsEx; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; +import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Key; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiElementVisitor; -import com.intellij.psi.PsiErrorElement; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.*; import com.intellij.psi.util.CachedValue; import com.intellij.psi.util.CachedValueProvider; import com.intellij.psi.util.CachedValuesManager; @@ -14,7 +16,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.JetSemanticServices; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.diagnostics.*; +import org.jetbrains.jet.lang.diagnostics.Diagnostic; +import org.jetbrains.jet.lang.diagnostics.DiagnosticHolder; +import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils; +import org.jetbrains.jet.lang.diagnostics.Errors; import org.jetbrains.jet.lang.psi.JetDeclaration; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetNamespace; @@ -123,9 +128,24 @@ public class AnalyzingUtils { @Override public Result compute() { synchronized (lock) { + final Project project = file.getProject(); + final List namespaces = Lists.newArrayList(); + ProjectRootManager rootManager = ProjectRootManager.getInstance(project); + VirtualFile[] contentRoots = rootManager.getContentRoots(); + + CompilerPathsEx.visitFiles(contentRoots, new CompilerPathsEx.FileVisitor() { + @Override + protected void acceptFile(VirtualFile file, String fileRoot, String filePath) { + if (!(file.getName().endsWith(".kt") || file.getName().endsWith(".kts"))) return; + PsiFile psiFile = PsiManager.getInstance(project).findFile(file); + if (psiFile instanceof JetFile) { + namespaces.add(((JetFile) psiFile).getRootNamespace()); + } + } + }); try { - JetNamespace rootNamespace = file.getRootNamespace(); - BindingContext bindingContext = analyzeNamespace(rootNamespace, JetControlFlowDataTraceFactory.EMPTY); +// JetNamespace rootNamespace = file.getRootNamespace(); + BindingContext bindingContext = analyzeNamespaces(project, namespaces, JetControlFlowDataTraceFactory.EMPTY); return new Result(bindingContext, PsiModificationTracker.MODIFICATION_COUNT); } catch (ProcessCanceledException e) {