el variables from including files: JspFileIndex refactored to use BaseJspFile

This commit is contained in:
Dmitry Avdeev
2010-08-02 14:06:36 +04:00
parent 0340b76b81
commit 93eb8cf2b7
3 changed files with 16 additions and 12 deletions
@@ -27,6 +27,7 @@ import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
import com.intellij.psi.impl.source.jsp.JspContextManager;
import com.intellij.psi.impl.source.jsp.jspJava.JspCodeBlock;
import com.intellij.psi.impl.source.tree.*;
import com.intellij.psi.jsp.BaseJspFile;
import com.intellij.psi.jsp.JspElementType;
import com.intellij.psi.jsp.JspFile;
import com.intellij.psi.jsp.JspSpiUtil;
@@ -289,10 +290,10 @@ public class PsiLocalVariableImpl extends CompositePsiElement implements PsiLoca
}
final Set<PsiFile> allIncluded = new THashSet<PsiFile>(10);
final JspFile rootContext = contextManager.getRootContextFile(jspFile);
final BaseJspFile rootContext = contextManager.getRootContextFile(jspFile);
allIncluded.add(rootContext);
JspSpiUtil.visitAllIncludedFilesRecursively(rootContext, new Processor<JspFile>() {
public boolean process(final JspFile file) {
JspSpiUtil.visitAllIncludedFilesRecursively(rootContext, new Processor<BaseJspFile>() {
public boolean process(final BaseJspFile file) {
allIncluded.add(file);
return true;
}
@@ -18,6 +18,7 @@ package com.intellij.psi.impl.source.jsp;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import com.intellij.psi.jsp.BaseJspFile;
import com.intellij.psi.jsp.JspFile;
import com.intellij.util.containers.HashSet;
import org.jetbrains.annotations.NotNull;
@@ -32,20 +33,22 @@ public abstract class JspContextManager {
return project.getComponent(JspContextManager.class);
}
public abstract JspFile[] getSuitableContextFiles(@NotNull PsiFile file);
public abstract BaseJspFile[] getSuitableContextFiles(@NotNull PsiFile file);
public abstract void setContextFile(@NotNull PsiFile file, @Nullable JspFile contextFile, final boolean userDefined);
public abstract void setContextFile(@NotNull PsiFile file, @Nullable BaseJspFile contextFile, final boolean userDefined);
public abstract @Nullable JspFile getContextFile(@NotNull PsiFile file);
public abstract @Nullable
BaseJspFile getContextFile(@NotNull PsiFile file);
public abstract @Nullable JspFile getConfiguredContextFile(@NotNull PsiFile file);
public @NotNull JspFile getRootContextFile(@NotNull JspFile file) {
JspFile rootContext = file;
HashSet<JspFile> recursionPreventer = new HashSet<JspFile>();
public @NotNull
BaseJspFile getRootContextFile(@NotNull BaseJspFile file) {
BaseJspFile rootContext = file;
HashSet<BaseJspFile> recursionPreventer = new HashSet<BaseJspFile>();
do {
recursionPreventer.add(rootContext);
JspFile context = getContextFile(rootContext);
BaseJspFile context = getContextFile(rootContext);
if (context == null || recursionPreventer.contains(context)) break;
rootContext = context;
}
@@ -62,14 +62,14 @@ public abstract class JspSpiUtil {
protected abstract int _escapeCharsInJspContext(JspFile file, int offset, String toEscape) throws IncorrectOperationException;
public static void visitAllIncludedFilesRecursively(JspFile jspFile, Processor<JspFile> visitor) {
public static void visitAllIncludedFilesRecursively(BaseJspFile jspFile, Processor<BaseJspFile> visitor) {
final JspSpiUtil util = getJspSpiUtil();
if (util != null) {
util._visitAllIncludedFilesRecursively(jspFile, visitor);
}
}
protected abstract void _visitAllIncludedFilesRecursively(JspFile jspFile, Processor<JspFile> visitor);
protected abstract void _visitAllIncludedFilesRecursively(BaseJspFile jspFile, Processor<BaseJspFile> visitor);
@Nullable
public static PsiElement resolveMethodPropertyReference(@NotNull PsiReference reference, @Nullable PsiClass resolvedClass, boolean readable) {