diff --git a/.idea/compiler.xml b/.idea/compiler.xml
index 569ac7af0c1b..fa595e20de73 100644
--- a/.idea/compiler.xml
+++ b/.idea/compiler.xml
@@ -20,11 +20,7 @@
-
-
-
-
-
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 90f05a8508f1..8720385396a2 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,238 +2,137 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpElementImpl.java b/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpElementImpl.java
index f0befa3c0287..dbc64d0382de 100644
--- a/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpElementImpl.java
+++ b/RegExpSupport/src/org/intellij/lang/regexp/psi/impl/RegExpElementImpl.java
@@ -23,7 +23,7 @@ import com.intellij.lang.ParserDefinition;
import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.IncorrectOperationException;
import org.intellij.lang.regexp.RegExpLanguage;
@@ -76,7 +76,7 @@ public abstract class RegExpElementImpl extends ASTWrapperPsiElement implements
}
public final String getUnescapedText() {
- if (InjectedLanguageUtil.isInInjectedLanguagePrefixSuffix(this)) {
+ if (InjectedLanguageFacadeImpl.isInInjectedLanguagePrefixSuffix(this)) {
// do not attempt to decode text if PsiElement is part of prefix/suffix
return getText();
}
diff --git a/RegExpSupport/test/test/BaseParseTestcase.java b/RegExpSupport/test/test/BaseParseTestcase.java
index e6cb0fc0d726..efb7b4188d6a 100644
--- a/RegExpSupport/test/test/BaseParseTestcase.java
+++ b/RegExpSupport/test/test/BaseParseTestcase.java
@@ -26,7 +26,6 @@ import com.intellij.testFramework.fixtures.CodeInsightTestFixture;
import com.intellij.testFramework.fixtures.IdeaProjectTestFixture;
import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory;
import com.intellij.testFramework.fixtures.TestFixtureBuilder;
-import junit.framework.TestCase;
import org.intellij.lang.regexp.RegExpFileType;
import java.io.File;
diff --git a/build/scripts/layouts.gant b/build/scripts/layouts.gant
index 1790ca85e78d..cba7816b15ef 100644
--- a/build/scripts/layouts.gant
+++ b/build/scripts/layouts.gant
@@ -532,6 +532,8 @@ def layout_core_upsource(String home, String target) {
module("projectModel-api")
module("projectModel-impl")
module("java-indexing-impl")
+ module("platform-resources")
+ module("platform-resources-en")
}
jar("annotations.jar") {
diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java
index da2282d82411..8363e6278bf1 100644
--- a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java
+++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java
@@ -648,7 +648,10 @@ public class CompileDriver {
new CompilerTask(myProject, compileInBackground, contentName, ApplicationManager.getApplication().isUnitTestMode());
StatusBar.Info.set("", myProject, "Compiler");
-
+ if (useOutOfProcessBuild() && BuildManager.getInstance().rescanRequired(myProject)) {
+ // ensure the project model seen by build process is up-to-date
+ myProject.save();
+ }
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
FileDocumentManager.getInstance().saveAllDocuments();
@@ -686,7 +689,7 @@ public class CompileDriver {
compileContext.addMessage(message);
}
final Collection paths = fetchFiles(compileContext);
- final List modules = paths.isEmpty()? Arrays.asList(compileContext.getCompileScope().getAffectedModules()) : Collections.emptyList();
+ final List modules = paths.isEmpty() && !isRebuild && !allProjectModulesAffected(compileContext)? Arrays.asList(compileContext.getCompileScope().getAffectedModules()) : Collections.emptyList();
final Set artifacts = ArtifactCompileScope.getArtifactsToBuild(myProject, compileContext.getCompileScope(), true);
final RequestFuture future = compileInExternalProcess(compileContext, modules, artifacts, paths, callback);
if (future != null) {
@@ -780,6 +783,12 @@ public class CompileDriver {
});
}
+ private static boolean allProjectModulesAffected(CompileContextImpl compileContext) {
+ final Set allModules = new HashSet(Arrays.asList(compileContext.getProjectCompileScope().getAffectedModules()));
+ allModules.removeAll(Arrays.asList(compileContext.getCompileScope().getAffectedModules()));
+ return allModules.isEmpty();
+ }
+
private static List fetchFiles(CompileContextImpl context) {
if (context.isRebuild()) {
return Collections.emptyList();
diff --git a/java/compiler/impl/src/com/intellij/compiler/server/AutoMakeMessageHandler.java b/java/compiler/impl/src/com/intellij/compiler/server/AutoMakeMessageHandler.java
index a11b38d88177..fb6af04faef8 100644
--- a/java/compiler/impl/src/com/intellij/compiler/server/AutoMakeMessageHandler.java
+++ b/java/compiler/impl/src/com/intellij/compiler/server/AutoMakeMessageHandler.java
@@ -21,6 +21,7 @@ import com.intellij.openapi.compiler.CompilerManager;
import com.intellij.openapi.compiler.CompilerTopics;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.MessageType;
+import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
@@ -36,6 +37,7 @@ import java.util.UUID;
* Date: 4/25/12
*/
class AutoMakeMessageHandler extends DefaultMessageHandler {
+ private static final Key LAST_AUTO_MAKE_NOFITICATION = Key.create("LAST_AUTO_MAKE_NOFITICATION");
private CmdlineRemoteProto.Message.BuilderMessage.BuildEvent.Status myBuildStatus;
private final Project myProject;
private final WolfTheProblemSolver myWolf;
@@ -111,6 +113,13 @@ class AutoMakeMessageHandler extends DefaultMessageHandler {
if (!myProject.isDisposed()) {
notification.notify(myProject);
}
+ myProject.putUserData(LAST_AUTO_MAKE_NOFITICATION, notification);
+ } else {
+ Notification notification = myProject.getUserData(LAST_AUTO_MAKE_NOFITICATION);
+ if (notification != null) {
+ notification.expire();
+ myProject.putUserData(LAST_AUTO_MAKE_NOFITICATION, null);
+ }
}
}
diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java
index da89f9948413..e57348f4e328 100644
--- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java
+++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java
@@ -78,7 +78,8 @@ import org.jetbrains.jps.cmdline.BuildMain;
import org.jetbrains.jps.server.ClasspathBootstrap;
import org.jetbrains.jps.server.Server;
-import javax.tools.*;
+import javax.tools.JavaCompiler;
+import javax.tools.ToolProvider;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -222,6 +223,14 @@ public class BuildManager implements ApplicationComponent{
}
}
+ public boolean rescanRequired(Project project) {
+ final String projectPath = getProjectPath(project);
+ synchronized (myProjectDataMap) {
+ final ProjectData data = myProjectDataMap.get(projectPath);
+ return data == null || data.myNeedRescan;
+ }
+ }
+
@Nullable
private static String getProjectPath(final Project project) {
final String path = project.getPresentableUrl();
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.form b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.form
index a447e37e0e09..5dd0a54ead5f 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.form
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.form
@@ -25,12 +25,12 @@
-
+
-
+
-
+
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java
index 0182e6fa4d6f..8ba45abd66c3 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java
@@ -32,6 +32,8 @@ import com.intellij.debugger.ui.DebuggerExpressionComboBox;
import com.intellij.debugger.ui.DebuggerStatementEditor;
import com.intellij.debugger.ui.JavaDebuggerSupport;
import com.intellij.ide.util.ClassFilter;
+import com.intellij.openapi.editor.event.DocumentEvent;
+import com.intellij.openapi.editor.event.DocumentListener;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.FixedSizeButton;
@@ -115,6 +117,7 @@ public abstract class BreakpointPropertiesPanel {
private JPanel myPassCountPanel;
private JPanel myConditionsPanel;
private JPanel myActionsPanel;
+ private JBCheckBox myConditionCheckbox;
ButtonGroup mySuspendPolicyGroup;
@NonNls public static final String CONTROL_LOG_MESSAGE = "logMessage";
@@ -275,6 +278,26 @@ public abstract class BreakpointPropertiesPanel {
});
myConditionCombo = new DebuggerExpressionComboBox(project, "LineBreakpoint condition");
+ myConditionCombo.addDocumentListener(new DocumentListener() {
+ @Override
+ public void beforeDocumentChange(DocumentEvent event) {
+ myConditionCheckbox.setSelected(true);
+ }
+
+ @Override
+ public void documentChanged(DocumentEvent event) {
+
+ }
+ });
+
+ myConditionCombo.getEditorComponent().addMouseListener(new MouseAdapter() {
+ @Override
+ public void mouseClicked(MouseEvent event) {
+ myConditionCombo.setEnabled(true);
+ myConditionCheckbox.setSelected(true);
+ }
+ });
+
if (myCompact) {
myPanel.addFocusListener(new FocusAdapter() {
@Override
@@ -544,12 +567,13 @@ public abstract class BreakpointPropertiesPanel {
PsiElement context = breakpoint.getEvaluationElement();
myPassCountCheckbox.setSelected(breakpoint.COUNT_FILTER_ENABLED);
- if (!breakpoint.CONDITION_ENABLED) {
- myConditionCombo.setText(emptyText());
- }
- else {
- myConditionCombo.setText(breakpoint.getCondition() != null ? breakpoint.getCondition() : emptyText());
- }
+
+ myConditionCheckbox.setSelected(breakpoint.CONDITION_ENABLED);
+
+ myConditionCombo.setEnabled(myBreakpoint.CONDITION_ENABLED);
+
+ myConditionCombo.setText(breakpoint.getCondition() != null ? breakpoint.getCondition() : emptyText());
+
myConditionCombo.setContext(context);
mySuspendJBCheckBox.setSelected(!breakpoint.SUSPEND_POLICY.equals(DebuggerSettings.SUSPEND_NONE));
@@ -695,7 +719,7 @@ public abstract class BreakpointPropertiesPanel {
}
breakpoint.COUNT_FILTER_ENABLED = breakpoint.COUNT_FILTER > 0 && myPassCountCheckbox.isSelected();
breakpoint.setCondition(myConditionCombo.getText());
- breakpoint.CONDITION_ENABLED = !breakpoint.getCondition().isEmpty();
+ breakpoint.CONDITION_ENABLED = myConditionCheckbox.isSelected();
breakpoint.setLogMessage(myLogExpressionCombo.getText());
breakpoint.LOG_EXPRESSION_ENABLED = !breakpoint.getLogMessage().isEmpty() && myLogExpressionCheckBox.isSelected();
breakpoint.LOG_ENABLED = myLogMessageCheckBox.isSelected();
@@ -861,10 +885,13 @@ public abstract class BreakpointPropertiesPanel {
myPassCountField.setEditable(myPassCountCheckbox.isSelected());
myPassCountField.setEnabled (myPassCountCheckbox.isSelected());
+
myConditionCombo.setEnabled(true);
myConditionMagnifierButton.setEnabled(true);
+
myInstanceFiltersField.setEnabled(myInstanceFiltersCheckBox.isSelected());
myInstanceFiltersField.getTextField().setEditable(myInstanceFiltersCheckBox.isSelected());
+
myClassFiltersField.setEnabled(myClassFiltersCheckBox.isSelected());
myClassFiltersField.getTextField().setEditable(myClassFiltersCheckBox.isSelected());
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java b/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java
index 71c70f4c657e..f972eddcf227 100644
--- a/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java
+++ b/java/java-impl/src/com/intellij/codeInsight/completion/ModifierChooser.java
@@ -71,7 +71,7 @@ public class ModifierChooser {
return addKeywords(list, inInterface ? new String[][]{
new String[]{"public", "protected"},
new String[]{"static"},
- new String[]{"final"}
+ new String[]{"final", "abstract"}
} : new String[][]{
new String[]{"public", "protected", "private"},
new String[]{"static"},
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaReferenceImporter.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaReferenceImporter.java
index 55763d11d6c2..95a5e619ebad 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaReferenceImporter.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/JavaReferenceImporter.java
@@ -23,6 +23,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiJavaCodeReferenceElement;
+import com.intellij.psi.PsiReference;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -56,4 +57,19 @@ public class JavaReferenceImporter implements ReferenceImporter {
}
return false;
}
+
+ @Override
+ public boolean autoImportReferenceAt(@NotNull Editor editor, @NotNull PsiFile file, int offset) {
+ if (!file.getViewProvider().getLanguages().contains(StdLanguages.JAVA)) return false;
+ PsiReference element = file.findReferenceAt(offset);
+
+ if (element instanceof PsiJavaCodeReferenceElement) {
+ PsiJavaCodeReferenceElement ref = (PsiJavaCodeReferenceElement)element;
+ if (ref.multiResolve(true).length == 0) {
+ new ImportClassFix(ref).doFix(editor, false, true);
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
index 00021004bb24..4515b75d36a6 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java
@@ -34,7 +34,7 @@ import com.intellij.psi.*;
import com.intellij.psi.controlFlow.ControlFlowUtil;
import com.intellij.psi.impl.source.javadoc.PsiDocMethodOrFieldRef;
import com.intellij.psi.impl.source.jsp.jspJava.JspClass;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.javadoc.PsiDocComment;
import com.intellij.psi.javadoc.PsiDocTagValue;
import com.intellij.psi.util.MethodSignatureBackedByPsiMethod;
@@ -106,7 +106,7 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh
}
private void registerReferencesFromInjectedFragments(final PsiElement element) {
- InjectedLanguageUtil.enumerate(element, myFile, false, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
+ InjectedLanguageFacadeImpl.enumerate(element, myFile, false, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
@Override
public void visit(@NotNull final PsiFile injectedPsi, @NotNull final List places) {
injectedPsi.accept(REGISTER_REFERENCES_VISITOR);
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java
index 07d7a31be90d..01f6a428e305 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/CreateConstructorParameterFromFieldFix.java
@@ -25,6 +25,7 @@ import com.intellij.codeInsight.generation.PsiMethodMember;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInsight.intention.impl.AssignFieldFromParameterAction;
import com.intellij.codeInsight.intention.impl.CreateFieldFromParameterAction;
+import com.intellij.codeInsight.intention.impl.FieldFromParameterUtils;
import com.intellij.ide.util.MemberChooser;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
@@ -385,12 +386,12 @@ public class CreateConstructorParameterFromFieldFix implements IntentionAction {
}
if (o1 instanceof PsiField && o2 instanceof PsiParameter) {
- final PsiField field = CreateFieldFromParameterAction.getParameterAssignedToField((PsiParameter)o2);
+ final PsiField field = FieldFromParameterUtils.getParameterAssignedToField((PsiParameter)o2);
if (field == null) return 1;
return o1.getTextOffset() - field.getTextOffset();
}
if (o1 instanceof PsiParameter && o2 instanceof PsiField) {
- final PsiField field = CreateFieldFromParameterAction.getParameterAssignedToField((PsiParameter)o1);
+ final PsiField field = FieldFromParameterUtils.getParameterAssignedToField((PsiParameter)o1);
if (field == null) return -1;
return field.getTextOffset() - o2.getTextOffset();
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java
index 9e3bc014be77..f1941a4c693f 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ImportClassFix.java
@@ -36,12 +36,12 @@ public class ImportClassFix extends ImportClassFixBase 0;
}
@@ -97,8 +97,9 @@ public class ImportClassFix extends ImportClassFixBase im
}
@Nullable
- protected abstract String getReferenceName(T reference);
- protected abstract PsiElement getReferenceNameElement(T reference);
-
- protected abstract boolean hasTypeParameters(T reference);
+ protected abstract String getReferenceName(@NotNull T reference);
+ protected abstract PsiElement getReferenceNameElement(@NotNull T reference);
+ protected abstract boolean hasTypeParameters(@NotNull T reference);
@NotNull
public List getClassesToImport() {
@@ -145,7 +144,7 @@ public abstract class ImportClassFixBase im
POPUP_NOT_SHOWN
}
- public Result doFix(@NotNull final Editor editor, boolean doShow, final boolean allowCaretNearRef) {
+ public Result doFix(@NotNull final Editor editor, boolean allowPopup, final boolean allowCaretNearRef) {
List classesToImport = getClassesToImport();
if (classesToImport.isEmpty()) return Result.POPUP_NOT_SHOWN;
@@ -194,7 +193,7 @@ public abstract class ImportClassFixBase im
return Result.CLASS_AUTO_IMPORTED;
}
- if (doShow && canImportHere) {
+ if (allowPopup && canImportHere) {
String hintText = ShowAutoImportPass.getMessage(classes.length > 1, classes[0].getQualifiedName());
if (!ApplicationManager.getApplication().isUnitTestMode() && !HintManager.getInstance().hasShownHintsThatWillHideByOtherHint(true)) {
HintManager.getInstance().showQuestionHint(editor, hintText, myRef.getTextOffset(),
@@ -261,7 +260,7 @@ public abstract class ImportClassFixBase im
}
}
- private boolean isCaretNearRef(Editor editor, T ref) {
+ private boolean isCaretNearRef(@NotNull Editor editor, @NotNull T ref) {
PsiElement nameElement = getReferenceNameElement(ref);
if (nameElement == null) return false;
TextRange range = nameElement.getTextRange();
diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/InitializeFinalFieldInConstructorFix.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/InitializeFinalFieldInConstructorFix.java
index f3ab59a2d78a..4ba32256b1da 100644
--- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/InitializeFinalFieldInConstructorFix.java
+++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/InitializeFinalFieldInConstructorFix.java
@@ -32,7 +32,6 @@ import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiTypesUtil;
import com.intellij.psi.util.PsiUtil;
-import com.intellij.refactoring.util.RefactoringUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java
index 2699efc024f3..6f21bde312c8 100644
--- a/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java
+++ b/java/java-impl/src/com/intellij/codeInsight/generation/GenerateMembersUtil.java
@@ -242,7 +242,7 @@ public class GenerateMembersUtil {
try {
final PsiMethod resultMethod = createMethod(factory, sourceMethod);
- copyDocComment(resultMethod, sourceMethod);
+ copyDocComment(sourceMethod, resultMethod);
copyModifiers(sourceMethod.getModifierList(), resultMethod.getModifierList());
final PsiSubstitutor collisionResolvedSubstitutor =
substituteTypeParameters(factory, codeStyleManager, target, sourceMethod.getTypeParameterList(), resultMethod.getTypeParameterList(), substitutor);
diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AssignFieldFromParameterAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AssignFieldFromParameterAction.java
index 9bcd9c8706d4..d1e2bd23c2a4 100644
--- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/AssignFieldFromParameterAction.java
+++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/AssignFieldFromParameterAction.java
@@ -36,34 +36,17 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class AssignFieldFromParameterAction extends BaseIntentionAction {
- private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.AssignFieldFromParameterAction");
-
- @Nullable
- private static PsiType getType(final PsiParameter myParameter) {
- if (myParameter == null) return null;
- PsiType type = myParameter.getType();
- if (type instanceof PsiEllipsisType) type = ((PsiEllipsisType)type).toArrayType();
- return type;
- }
+ private static final Logger LOG = Logger.getInstance(AssignFieldFromParameterAction.class);
@Override
public boolean isAvailable(@NotNull Project project, Editor editor, PsiFile file) {
- PsiParameter myParameter = CreateFieldFromParameterAction.findParameterAtCursor(file, editor);
- final PsiType type = getType(myParameter);
- PsiClass targetClass = myParameter == null ? null : PsiTreeUtil.getParentOfType(myParameter, PsiClass.class);
- if (myParameter == null
- || !myParameter.isValid()
- || !myParameter.getManager().isInProject(myParameter)
- || !(myParameter.getDeclarationScope() instanceof PsiMethod)
- || ((PsiMethod)myParameter.getDeclarationScope()).getBody() == null
- || type == null
- || !type.isValid()
- || targetClass == null
- || targetClass.isInterface()
- || CreateFieldFromParameterAction.getParameterAssignedToField(myParameter) != null) {
+ final PsiParameter myParameter = FieldFromParameterUtils.findParameterAtCursor(file, editor);
+ final PsiType type = FieldFromParameterUtils.getType(myParameter);
+ final PsiClass targetClass = PsiTreeUtil.getParentOfType(myParameter, PsiClass.class);
+ if (!FieldFromParameterUtils.isAvailable(myParameter, type, targetClass)) {
return false;
}
- PsiField field = findFieldToAssign(myParameter);
+ final PsiField field = findFieldToAssign(project, myParameter);
if (field == null) return false;
if (!field.getLanguage().isKindOf(JavaLanguage.INSTANCE)) return false;
setText(CodeInsightBundle.message("intention.assign.field.from.parameter.text", field.getName()));
@@ -79,12 +62,12 @@ public class AssignFieldFromParameterAction extends BaseIntentionAction {
@Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file) {
- PsiParameter myParameter = CreateFieldFromParameterAction.findParameterAtCursor(file, editor);
+ final PsiParameter myParameter = FieldFromParameterUtils.findParameterAtCursor(file, editor);
if (!CodeInsightUtilBase.prepareFileForWrite(myParameter.getContainingFile())) return;
IdeDocumentHistory.getInstance(project).includeCurrentPlaceAsChangePlace();
try {
- PsiField field = findFieldToAssign(myParameter);
+ PsiField field = findFieldToAssign(project, myParameter);
if (field != null) addFieldAssignmentStatement(project, field, myParameter, editor);
}
catch (IncorrectOperationException e) {
@@ -92,53 +75,18 @@ public class AssignFieldFromParameterAction extends BaseIntentionAction {
}
}
- public static void addFieldAssignmentStatement(@NotNull Project project,
- @NotNull PsiField field,
- @NotNull PsiParameter parameter,
- @NotNull Editor editor) throws IncorrectOperationException {
- final PsiMethod method = (PsiMethod)parameter.getDeclarationScope();
- PsiCodeBlock methodBody = method.getBody();
- if (methodBody == null) return;
- PsiManager psiManager = PsiManager.getInstance(project);
- PsiElementFactory factory = JavaPsiFacade.getInstance(psiManager.getProject()).getElementFactory();
- String fieldName = field.getName();
- String parameterName = parameter.getName();
- final boolean isMethodStatic = method.hasModifierProperty(PsiModifier.STATIC);
- PsiClass targetClass = method.getContainingClass();
-
- String stmtText = fieldName + " = " + parameterName + ";";
- if (Comparing.strEqual(fieldName, parameterName) || JavaPsiFacade.getInstance(project).getResolveHelper().resolveReferencedVariable(fieldName, methodBody) != field) {
- @NonNls String prefix = isMethodStatic ? targetClass.getName() == null ? "" : targetClass.getName() + "." : "this.";
- stmtText = prefix + stmtText;
- }
-
- PsiStatement assignmentStmt = factory.createStatementFromText(stmtText, methodBody);
- assignmentStmt = (PsiStatement)CodeStyleManager.getInstance(project).reformat(assignmentStmt);
- PsiStatement[] statements = methodBody.getStatements();
- int i = CreateFieldFromParameterAction.findFieldAssignmentAnchor(statements, null, targetClass, parameter);
- PsiElement inserted;
- if (i == statements.length) {
- inserted = methodBody.add(assignmentStmt);
- }
- else {
- inserted = methodBody.addAfter(assignmentStmt, i > 0 ? statements[i - 1] : null);
- }
- editor.getCaretModel().moveToOffset(inserted.getTextRange().getEndOffset());
- editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
- }
-
@Nullable
- private static PsiField findFieldToAssign(final PsiParameter myParameter) {
- final JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(myParameter.getProject());
+ private static PsiField findFieldToAssign(@NotNull Project project,
+ @NotNull PsiParameter myParameter) {
+ final JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(project);
final String parameterName = myParameter.getName();
- String propertyName = styleManager.variableNameToPropertyName(parameterName, VariableKind.PARAMETER);
+ final String propertyName = styleManager.variableNameToPropertyName(parameterName, VariableKind.PARAMETER);
final PsiMethod method = (PsiMethod)myParameter.getDeclarationScope();
final boolean isMethodStatic = method.hasModifierProperty(PsiModifier.STATIC);
-
- VariableKind kind = isMethodStatic ? VariableKind.STATIC_FIELD : VariableKind.FIELD;
- SuggestedNameInfo suggestedNameInfo = styleManager.suggestVariableName(kind, propertyName, null, getType(myParameter));
+ final VariableKind kind = isMethodStatic ? VariableKind.STATIC_FIELD : VariableKind.FIELD;
+ final SuggestedNameInfo suggestedNameInfo = styleManager.suggestVariableName(kind, propertyName, null, FieldFromParameterUtils.getSubstitutedType(myParameter));
final String fieldName = suggestedNameInfo.names[0];
@@ -151,5 +99,37 @@ public class AssignFieldFromParameterAction extends BaseIntentionAction {
return field;
}
+ public static void addFieldAssignmentStatement(@NotNull Project project,
+ @NotNull PsiField field,
+ @NotNull PsiParameter parameter,
+ @NotNull Editor editor) throws IncorrectOperationException {
+ final PsiMethod method = (PsiMethod)parameter.getDeclarationScope();
+ final PsiCodeBlock methodBody = method.getBody();
+ if (methodBody == null) return;
+ final PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory();
+ final String fieldName = field.getName();
+ final String parameterName = parameter.getName();
+ final boolean isMethodStatic = method.hasModifierProperty(PsiModifier.STATIC);
+ final PsiClass targetClass = method.getContainingClass();
+ if (targetClass == null) return;
+ String stmtText = fieldName + " = " + parameterName + ";";
+ if (Comparing.strEqual(fieldName, parameterName) || JavaPsiFacade.getInstance(project).getResolveHelper().resolveReferencedVariable(fieldName, methodBody) != field) {
+ @NonNls String prefix = isMethodStatic ? targetClass.getName() == null ? "" : targetClass.getName() + "." : "this.";
+ stmtText = prefix + stmtText;
+ }
+
+ final PsiStatement assignmentStmt = (PsiStatement)CodeStyleManager.getInstance(project).reformat(factory.createStatementFromText(stmtText, methodBody));
+ final PsiStatement[] statements = methodBody.getStatements();
+ final int i = FieldFromParameterUtils.findFieldAssignmentAnchor(statements, null, targetClass, parameter);
+ final PsiElement inserted;
+ if (i == statements.length) {
+ inserted = methodBody.add(assignmentStmt);
+ }
+ else {
+ inserted = methodBody.addAfter(assignmentStmt, i > 0 ? statements[i - 1] : null);
+ }
+ editor.getCaretModel().moveToOffset(inserted.getTextRange().getEndOffset());
+ editor.getScrollingModel().scrollToCaret(ScrollType.RELATIVE);
+ }
}
diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertToBasicLatinAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertToBasicLatinAction.java
index e0adc5ec9d61..ca6131138d6a 100644
--- a/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertToBasicLatinAction.java
+++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/ConvertToBasicLatinAction.java
@@ -27,9 +27,9 @@ import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.javadoc.PsiDocComment;
-import com.intellij.psi.javadoc.PsiDocToken;
import com.intellij.psi.search.PsiElementProcessor;
import com.intellij.psi.tree.TokenSet;
+import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.xml.XmlEntityDecl;
import com.intellij.psi.xml.XmlFile;
import com.intellij.util.IncorrectOperationException;
@@ -44,7 +44,6 @@ import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
-
public class ConvertToBasicLatinAction extends PsiElementBaseIntentionAction {
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.ConvertToBasicLatinAction");
@@ -156,13 +155,7 @@ public class ConvertToBasicLatinAction extends PsiElementBaseIntentionAction {
@Override
public PsiElement findApplicable(final PsiElement element) {
- if (element instanceof PsiDocComment) return element;
- if (element instanceof PsiDocToken) return element.getParent();
- if (element instanceof PsiWhiteSpace) {
- final PsiElement parent = element.getParent();
- if (parent instanceof PsiDocComment) return parent;
- }
- return null;
+ return PsiTreeUtil.getParentOfType(element, PsiDocComment.class, false);
}
@Override
diff --git a/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateAssignFieldsFromParametersAction.java b/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateAssignFieldsFromParametersAction.java
new file mode 100644
index 000000000000..859ac737ece9
--- /dev/null
+++ b/java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateAssignFieldsFromParametersAction.java
@@ -0,0 +1,298 @@
+/*
+* Copyright 2000-2012 JetBrains s.r.o.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+package com.intellij.codeInsight.intention.impl;
+
+import com.intellij.codeInsight.CodeInsightBundle;
+import com.intellij.codeInsight.CodeInsightUtilBase;
+import com.intellij.codeInsight.generation.ClassMember;
+import com.intellij.codeInsight.generation.MemberChooserObject;
+import com.intellij.codeInsight.generation.PsiMethodMember;
+import com.intellij.ide.util.MemberChooser;
+import com.intellij.lang.java.JavaLanguage;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.fileEditor.ex.IdeDocumentHistory;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.ui.DialogWrapper;
+import com.intellij.openapi.util.Key;
+import com.intellij.psi.*;
+import com.intellij.psi.codeStyle.JavaCodeStyleManager;
+import com.intellij.psi.codeStyle.SuggestedNameInfo;
+import com.intellij.psi.codeStyle.VariableKind;
+import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.ui.SimpleColoredComponent;
+import com.intellij.ui.SimpleTextAttributes;
+import com.intellij.ui.speedSearch.SpeedSearchUtil;
+import com.intellij.util.IncorrectOperationException;
+import com.intellij.util.containers.ConcurrentWeakHashMap;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+import java.util.*;
+
+/**
+ * @author Danila Ponomarenko
+ */
+public class CreateAssignFieldsFromParametersAction extends BaseIntentionAction {
+ private static final Logger LOG = Logger.getInstance(CreateFieldFromParameterAction.class);
+ private static final Key
diff --git a/platform/lang-api/src/com/intellij/psi/search/ProjectAndLibrariesScope.java b/platform/indexing-api/src/com/intellij/psi/search/ProjectAndLibrariesScope.java
similarity index 100%
rename from platform/lang-api/src/com/intellij/psi/search/ProjectAndLibrariesScope.java
rename to platform/indexing-api/src/com/intellij/psi/search/ProjectAndLibrariesScope.java
diff --git a/platform/lang-api/src/com/intellij/psi/search/PsiSearchHelper.java b/platform/indexing-api/src/com/intellij/psi/search/PsiSearchHelper.java
similarity index 99%
rename from platform/lang-api/src/com/intellij/psi/search/PsiSearchHelper.java
rename to platform/indexing-api/src/com/intellij/psi/search/PsiSearchHelper.java
index 15ff4815a4b8..c5b9f538df76 100644
--- a/platform/lang-api/src/com/intellij/psi/search/PsiSearchHelper.java
+++ b/platform/indexing-api/src/com/intellij/psi/search/PsiSearchHelper.java
@@ -31,7 +31,7 @@ import org.jetbrains.annotations.Nullable;
*
* Use {@link com.intellij.psi.search.PsiSearchHelper.SERVICE#getInstance}() to get a search helper instance.
*/
-public interface PsiSearchHelper extends PsiTodoSearchHelper {
+public interface PsiSearchHelper {
class SERVICE {
private SERVICE() {
}
diff --git a/platform/lang-api/src/com/intellij/psi/search/PsiSearchRequest.java b/platform/indexing-api/src/com/intellij/psi/search/PsiSearchRequest.java
similarity index 76%
rename from platform/lang-api/src/com/intellij/psi/search/PsiSearchRequest.java
rename to platform/indexing-api/src/com/intellij/psi/search/PsiSearchRequest.java
index 4a0d56fe312b..cda5223ece04 100644
--- a/platform/lang-api/src/com/intellij/psi/search/PsiSearchRequest.java
+++ b/platform/indexing-api/src/com/intellij/psi/search/PsiSearchRequest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.intellij.psi.search;
import org.jetbrains.annotations.NotNull;
diff --git a/platform/lang-api/src/com/intellij/psi/search/QuerySearchRequest.java b/platform/indexing-api/src/com/intellij/psi/search/QuerySearchRequest.java
similarity index 68%
rename from platform/lang-api/src/com/intellij/psi/search/QuerySearchRequest.java
rename to platform/indexing-api/src/com/intellij/psi/search/QuerySearchRequest.java
index 158ee91dc151..cd0da9bad58e 100644
--- a/platform/lang-api/src/com/intellij/psi/search/QuerySearchRequest.java
+++ b/platform/indexing-api/src/com/intellij/psi/search/QuerySearchRequest.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.intellij.psi.search;
import com.intellij.openapi.application.ReadActionProcessor;
diff --git a/platform/lang-api/src/com/intellij/psi/search/RequestResultProcessor.java b/platform/indexing-api/src/com/intellij/psi/search/RequestResultProcessor.java
similarity index 60%
rename from platform/lang-api/src/com/intellij/psi/search/RequestResultProcessor.java
rename to platform/indexing-api/src/com/intellij/psi/search/RequestResultProcessor.java
index e2a1d95c6a06..edc1b64d6e68 100644
--- a/platform/lang-api/src/com/intellij/psi/search/RequestResultProcessor.java
+++ b/platform/indexing-api/src/com/intellij/psi/search/RequestResultProcessor.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.intellij.psi.search;
import com.intellij.psi.PsiElement;
diff --git a/platform/lang-api/src/com/intellij/psi/search/SearchRequestCollector.java b/platform/indexing-api/src/com/intellij/psi/search/SearchRequestCollector.java
similarity index 84%
rename from platform/lang-api/src/com/intellij/psi/search/SearchRequestCollector.java
rename to platform/indexing-api/src/com/intellij/psi/search/SearchRequestCollector.java
index 4a1f82d7903d..88881db85e1f 100644
--- a/platform/lang-api/src/com/intellij/psi/search/SearchRequestCollector.java
+++ b/platform/indexing-api/src/com/intellij/psi/search/SearchRequestCollector.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.intellij.psi.search;
import com.intellij.psi.PsiElement;
diff --git a/platform/lang-api/src/com/intellij/psi/search/SearchRequestQuery.java b/platform/indexing-api/src/com/intellij/psi/search/SearchRequestQuery.java
similarity index 100%
rename from platform/lang-api/src/com/intellij/psi/search/SearchRequestQuery.java
rename to platform/indexing-api/src/com/intellij/psi/search/SearchRequestQuery.java
diff --git a/platform/indexing-api/src/com/intellij/psi/search/SearchSession.java b/platform/indexing-api/src/com/intellij/psi/search/SearchSession.java
new file mode 100644
index 000000000000..0acfd9ba978c
--- /dev/null
+++ b/platform/indexing-api/src/com/intellij/psi/search/SearchSession.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi.search;
+
+import com.intellij.openapi.util.UserDataHolderBase;
+
+/**
+ * @author peter
+ */
+public class SearchSession extends UserDataHolderBase {
+}
diff --git a/platform/lang-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java b/platform/indexing-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java
similarity index 69%
rename from platform/lang-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java
rename to platform/indexing-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java
index edd55f417dfe..2f860e1e3527 100644
--- a/platform/lang-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java
+++ b/platform/indexing-api/src/com/intellij/psi/search/SingleTargetRequestResultProcessor.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
package com.intellij.psi.search;
import com.intellij.psi.PsiElement;
diff --git a/platform/lang-api/src/com/intellij/psi/search/TextOccurenceProcessor.java b/platform/indexing-api/src/com/intellij/psi/search/TextOccurenceProcessor.java
similarity index 95%
rename from platform/lang-api/src/com/intellij/psi/search/TextOccurenceProcessor.java
rename to platform/indexing-api/src/com/intellij/psi/search/TextOccurenceProcessor.java
index 283b9d8d5133..bd533a186bc7 100644
--- a/platform/lang-api/src/com/intellij/psi/search/TextOccurenceProcessor.java
+++ b/platform/indexing-api/src/com/intellij/psi/search/TextOccurenceProcessor.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/platform/lang-api/src/com/intellij/psi/search/searches/ReferenceDescriptor.java b/platform/indexing-api/src/com/intellij/psi/search/searches/ReferenceDescriptor.java
similarity index 100%
rename from platform/lang-api/src/com/intellij/psi/search/searches/ReferenceDescriptor.java
rename to platform/indexing-api/src/com/intellij/psi/search/searches/ReferenceDescriptor.java
diff --git a/platform/lang-api/src/com/intellij/psi/search/searches/ReferencesSearch.java b/platform/indexing-api/src/com/intellij/psi/search/searches/ReferencesSearch.java
similarity index 96%
rename from platform/lang-api/src/com/intellij/psi/search/searches/ReferencesSearch.java
rename to platform/indexing-api/src/com/intellij/psi/search/searches/ReferencesSearch.java
index 01a6f1f7f3b0..ce183fee50d9 100644
--- a/platform/lang-api/src/com/intellij/psi/search/searches/ReferencesSearch.java
+++ b/platform/indexing-api/src/com/intellij/psi/search/searches/ReferencesSearch.java
@@ -15,6 +15,7 @@
*/
package com.intellij.psi.search.searches;
+import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.search.*;
@@ -27,6 +28,7 @@ import org.jetbrains.annotations.Nullable;
* @author max
*/
public class ReferencesSearch extends ExtensibleQueryFactory {
+ public static ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.referencesSearch");
private static final ReferencesSearch INSTANCE = new ReferencesSearch();
private ReferencesSearch() {
diff --git a/platform/indexing-impl/indexing-impl.iml b/platform/indexing-impl/indexing-impl.iml
index 8446a9dbc69c..f28700956c34 100644
--- a/platform/indexing-impl/indexing-impl.iml
+++ b/platform/indexing-impl/indexing-impl.iml
@@ -9,6 +9,7 @@
+
diff --git a/platform/indexing-impl/src/com/intellij/openapi/module/impl/ModuleScopeProviderImpl.java b/platform/indexing-impl/src/com/intellij/openapi/module/impl/ModuleScopeProviderImpl.java
new file mode 100644
index 000000000000..f90fe7876987
--- /dev/null
+++ b/platform/indexing-impl/src/com/intellij/openapi/module/impl/ModuleScopeProviderImpl.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.openapi.module.impl;
+
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.impl.scopes.ModuleWithDependenciesScope;
+import com.intellij.openapi.module.impl.scopes.ModuleWithDependentsScope;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.util.containers.StripedLockIntObjectConcurrentHashMap;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Author: dmitrylomov
+ */
+public class ModuleScopeProviderImpl implements ModuleScopeProvider {
+ private final Module myModule;
+ private final StripedLockIntObjectConcurrentHashMap myScopeCache = new StripedLockIntObjectConcurrentHashMap();
+ private GlobalSearchScope myModuleWithDependentsScope;
+ private GlobalSearchScope myModuleTestsWithDependentsScope;
+
+
+ public ModuleScopeProviderImpl(Module module) {
+ myModule = module;
+ }
+
+ @NotNull
+ public GlobalSearchScope getCachedScope(@ModuleWithDependenciesScope.ScopeConstant int options) {
+ GlobalSearchScope scope = myScopeCache.get(options);
+ if (scope == null) {
+ scope = new ModuleWithDependenciesScope(myModule, options);
+ myScopeCache.put(options, scope);
+ }
+ return scope;
+ }
+
+
+ public GlobalSearchScope getModuleScope() {
+ return getCachedScope(ModuleWithDependenciesScope.COMPILE | ModuleWithDependenciesScope.TESTS);
+ }
+
+ @Override
+ public GlobalSearchScope getModuleScope(boolean includeTests) {
+ return getCachedScope(ModuleWithDependenciesScope.COMPILE | (includeTests ? ModuleWithDependenciesScope.TESTS : 0));
+ }
+
+ public GlobalSearchScope getModuleWithLibrariesScope() {
+ return getCachedScope(ModuleWithDependenciesScope.COMPILE | ModuleWithDependenciesScope.TESTS | ModuleWithDependenciesScope.LIBRARIES);
+ }
+
+ public GlobalSearchScope getModuleWithDependenciesScope() {
+ return getCachedScope(ModuleWithDependenciesScope.COMPILE | ModuleWithDependenciesScope.TESTS | ModuleWithDependenciesScope.MODULES);
+ }
+
+ @Override
+ public GlobalSearchScope getModuleContentScope() {
+ return getCachedScope(ModuleWithDependenciesScope.CONTENT);
+ }
+
+ @Override
+ public GlobalSearchScope getModuleContentWithDependenciesScope() {
+ return getCachedScope(ModuleWithDependenciesScope.CONTENT | ModuleWithDependenciesScope.MODULES);
+ }
+
+ public GlobalSearchScope getModuleWithDependenciesAndLibrariesScope(boolean includeTests) {
+ return getCachedScope(ModuleWithDependenciesScope.COMPILE |
+ ModuleWithDependenciesScope.MODULES |
+ ModuleWithDependenciesScope.LIBRARIES | (includeTests ? ModuleWithDependenciesScope.TESTS : 0));
+ }
+
+ public GlobalSearchScope getModuleWithDependentsScope() {
+ if (myModuleWithDependentsScope == null) {
+ myModuleWithDependentsScope = new ModuleWithDependentsScope(myModule, false);
+ }
+ return myModuleWithDependentsScope;
+ }
+
+ public GlobalSearchScope getModuleTestsWithDependentsScope() {
+ if (myModuleTestsWithDependentsScope == null) {
+ myModuleTestsWithDependentsScope = new ModuleWithDependentsScope(myModule, true);
+ }
+ return myModuleTestsWithDependentsScope;
+ }
+
+ public GlobalSearchScope getModuleRuntimeScope(boolean includeTests) {
+ return getCachedScope(
+ ModuleWithDependenciesScope.MODULES | ModuleWithDependenciesScope.LIBRARIES | (includeTests ? ModuleWithDependenciesScope.TESTS : 0));
+ }
+
+ @Override
+ public void clearCache() {
+ myScopeCache.clear();
+ myModuleWithDependentsScope = null;
+ myModuleTestsWithDependentsScope = null;
+ }
+
+}
diff --git a/platform/lang-impl/src/com/intellij/openapi/module/impl/scopes/JdkScope.java b/platform/indexing-impl/src/com/intellij/openapi/module/impl/scopes/JdkScope.java
similarity index 100%
rename from platform/lang-impl/src/com/intellij/openapi/module/impl/scopes/JdkScope.java
rename to platform/indexing-impl/src/com/intellij/openapi/module/impl/scopes/JdkScope.java
diff --git a/platform/lang-impl/src/com/intellij/openapi/module/impl/scopes/LibraryRuntimeClasspathScope.java b/platform/indexing-impl/src/com/intellij/openapi/module/impl/scopes/LibraryRuntimeClasspathScope.java
similarity index 100%
rename from platform/lang-impl/src/com/intellij/openapi/module/impl/scopes/LibraryRuntimeClasspathScope.java
rename to platform/indexing-impl/src/com/intellij/openapi/module/impl/scopes/LibraryRuntimeClasspathScope.java
diff --git a/platform/lang-impl/src/com/intellij/openapi/module/impl/scopes/ModuleWithDependenciesScope.java b/platform/indexing-impl/src/com/intellij/openapi/module/impl/scopes/ModuleWithDependenciesScope.java
similarity index 100%
rename from platform/lang-impl/src/com/intellij/openapi/module/impl/scopes/ModuleWithDependenciesScope.java
rename to platform/indexing-impl/src/com/intellij/openapi/module/impl/scopes/ModuleWithDependenciesScope.java
diff --git a/platform/lang-impl/src/com/intellij/openapi/module/impl/scopes/ModuleWithDependentsScope.java b/platform/indexing-impl/src/com/intellij/openapi/module/impl/scopes/ModuleWithDependentsScope.java
similarity index 100%
rename from platform/lang-impl/src/com/intellij/openapi/module/impl/scopes/ModuleWithDependentsScope.java
rename to platform/indexing-impl/src/com/intellij/openapi/module/impl/scopes/ModuleWithDependentsScope.java
diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/LibraryScopeCache.java b/platform/indexing-impl/src/com/intellij/openapi/roots/impl/LibraryScopeCache.java
similarity index 100%
rename from platform/lang-impl/src/com/intellij/openapi/roots/impl/LibraryScopeCache.java
rename to platform/indexing-impl/src/com/intellij/openapi/roots/impl/LibraryScopeCache.java
diff --git a/platform/lang-impl/src/com/intellij/psi/ResolveScopeEnlarger.java b/platform/indexing-impl/src/com/intellij/psi/ResolveScopeEnlarger.java
similarity index 100%
rename from platform/lang-impl/src/com/intellij/psi/ResolveScopeEnlarger.java
rename to platform/indexing-impl/src/com/intellij/psi/ResolveScopeEnlarger.java
diff --git a/platform/lang-impl/src/com/intellij/psi/ResolveScopeProvider.java b/platform/indexing-impl/src/com/intellij/psi/ResolveScopeProvider.java
similarity index 96%
rename from platform/lang-impl/src/com/intellij/psi/ResolveScopeProvider.java
rename to platform/indexing-impl/src/com/intellij/psi/ResolveScopeProvider.java
index 2176b1c01eb2..e00cc18a1e6c 100644
--- a/platform/lang-impl/src/com/intellij/psi/ResolveScopeProvider.java
+++ b/platform/indexing-impl/src/com/intellij/psi/ResolveScopeProvider.java
@@ -19,7 +19,6 @@ import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.search.SearchScope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/CacheManager.java b/platform/indexing-impl/src/com/intellij/psi/impl/cache/CacheManager.java
similarity index 71%
rename from platform/lang-impl/src/com/intellij/psi/impl/cache/CacheManager.java
rename to platform/indexing-impl/src/com/intellij/psi/impl/cache/CacheManager.java
index 5773600672f6..54a3bf5ce979 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/cache/CacheManager.java
+++ b/platform/indexing-impl/src/com/intellij/psi/impl/cache/CacheManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -18,11 +18,8 @@ package com.intellij.psi.impl.cache;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.search.IndexPattern;
-import com.intellij.psi.search.IndexPatternProvider;
import com.intellij.util.Processor;
import org.jetbrains.annotations.NotNull;
@@ -37,22 +34,6 @@ public interface CacheManager {
}
@NotNull PsiFile[] getFilesWithWord(@NotNull String word, short occurenceMask, @NotNull GlobalSearchScope scope, final boolean caseSensitively);
-
boolean processFilesWithWord(@NotNull Processor processor,@NotNull String word, short occurenceMask, @NotNull GlobalSearchScope scope, final boolean caseSensitively);
-
- /**
- * @return all VirtualFile's that contain todo-items under project roots
- */
- @NotNull PsiFile[] getFilesWithTodoItems();
-
- /**
- * @return -1 if it's not known
- */
- int getTodoCount(@NotNull VirtualFile file, final IndexPatternProvider patternProvider);
-
- /**
- * @return -1 if it's not known
- */
- int getTodoCount(@NotNull VirtualFile file, IndexPattern pattern);
}
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java
similarity index 60%
rename from platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java
rename to platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java
index 689b68b7725d..1a44cf491b54 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java
+++ b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/IndexCacheManagerImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,17 +16,14 @@
package com.intellij.psi.impl.cache.impl;
-import com.intellij.injected.editor.VirtualFileWindow;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadActionProcessor;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProcessCanceledException;
-import com.intellij.openapi.progress.ProgressManager;
+import com.intellij.openapi.progress.ProgressIndicatorProvider;
import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.FileIndexFacade;
-import com.intellij.openapi.roots.ProjectFileIndex;
-import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
@@ -34,18 +31,14 @@ import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.cache.CacheManager;
import com.intellij.psi.impl.cache.impl.id.IdIndex;
import com.intellij.psi.impl.cache.impl.id.IdIndexEntry;
-import com.intellij.psi.impl.cache.impl.todo.TodoIndex;
-import com.intellij.psi.impl.cache.impl.todo.TodoIndexEntry;
import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.search.IndexPattern;
-import com.intellij.psi.search.IndexPatternProvider;
-import com.intellij.psi.util.PsiUtilCore;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.indexing.FileBasedIndex;
import org.jetbrains.annotations.NotNull;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
/**
* @author Eugene Zhuravlev
@@ -72,10 +65,6 @@ public class IndexCacheManagerImpl implements CacheManager{
return processor.getResults().isEmpty() ? PsiFile.EMPTY_ARRAY : processor.toArray(PsiFile.EMPTY_ARRAY);
}
- public static boolean shouldBeFound(GlobalSearchScope scope, VirtualFile virtualFile, FileIndexFacade index) {
- return (scope.isSearchOutsideRootModel() || index.isInContent(virtualFile) || index.isInLibrarySource(virtualFile)) && !virtualFile.getFileType().isBinary();
- }
-
// IMPORTANT!!!
// Since implementation of virtualFileProcessor.process() may call indices directly or indirectly,
// we cannot call it inside FileBasedIndex.processValues() method except in collecting form
@@ -95,9 +84,9 @@ public class IndexCacheManagerImpl implements CacheManager{
final FileIndexFacade index = FileIndexFacade.getInstance(myProject);
@Override
public boolean process(final VirtualFile file, final Integer value) {
- ProgressManager.checkCanceled();
+ ProgressIndicatorProvider.checkCanceled();
final int mask = value.intValue();
- if ((mask & occurrenceMask) != 0 && shouldBeFound(scope, file, index)) {
+ if ((mask & occurrenceMask) != 0 && index.shouldBeFound(scope, file)) {
if (!fileProcessor.process(file)) return false;
}
return true;
@@ -135,78 +124,11 @@ public class IndexCacheManagerImpl implements CacheManager{
// If we do, deadlocks are possible (IDEADEV-42137). So first we obtain files with the word specified,
// and then process them not holding indices' read lock.
for (VirtualFile vFile : vFiles) {
- ProgressManager.checkCanceled();
+ ProgressIndicatorProvider.checkCanceled();
if (!virtualFileProcessor.process(vFile)) {
return false;
}
}
return true;
}
-
- @Override
- @NotNull
- public PsiFile[] getFilesWithTodoItems() {
- if (myProject.isDefault()) {
- return PsiFile.EMPTY_ARRAY;
- }
- final FileBasedIndex fileBasedIndex = FileBasedIndex.getInstance();
- final Set allFiles = new HashSet();
- final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(myProject).getFileIndex();
- for (IndexPattern indexPattern : IndexPatternUtil.getIndexPatterns()) {
- final Collection files = fileBasedIndex.getContainingFiles(
- TodoIndex.NAME,
- new TodoIndexEntry(indexPattern.getPatternString(), indexPattern.isCaseSensitive()), GlobalSearchScope.allScope(myProject));
- ApplicationManager.getApplication().runReadAction(new Runnable() {
- @Override
- public void run() {
- for (VirtualFile file : files) {
- if (projectFileIndex.isInContent(file)) {
- final PsiFile psiFile = myPsiManager.findFile(file);
- if (psiFile != null) {
- allFiles.add(psiFile);
- }
- }
- }
- }
- });
- }
- return allFiles.isEmpty() ? PsiFile.EMPTY_ARRAY : PsiUtilCore.toPsiFileArray(allFiles);
- }
-
- @Override
- public int getTodoCount(@NotNull final VirtualFile file, final IndexPatternProvider patternProvider) {
- if (myProject.isDefault()) {
- return 0;
- }
- if (file instanceof VirtualFileWindow) return -1;
- final FileBasedIndex fileBasedIndex = FileBasedIndex.getInstance();
- int count = 0;
- for (IndexPattern indexPattern : patternProvider.getIndexPatterns()) {
- count += fetchCount(fileBasedIndex, file, indexPattern);
- }
- return count;
- }
-
- @Override
- public int getTodoCount(@NotNull final VirtualFile file, final IndexPattern pattern) {
- if (myProject.isDefault()) {
- return 0;
- }
- if (file instanceof VirtualFileWindow) return -1;
- return fetchCount(FileBasedIndex.getInstance(), file, pattern);
- }
-
- private int fetchCount(final FileBasedIndex fileBasedIndex, final VirtualFile file, final IndexPattern indexPattern) {
- final int[] count = {0};
- fileBasedIndex.processValues(
- TodoIndex.NAME, new TodoIndexEntry(indexPattern.getPatternString(), indexPattern.isCaseSensitive()), file,
- new FileBasedIndex.ValueProcessor() {
- @Override
- public boolean process(final VirtualFile file, final Integer value) {
- count[0] += value.intValue();
- return true;
- }
- }, GlobalSearchScope.fileScope(myProject, file));
- return count[0];
- }
}
diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdTableBuilding.java b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdTableBuilding.java
index e8cc0d0ba880..78861024d61b 100644
--- a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdTableBuilding.java
+++ b/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/id/IdTableBuilding.java
@@ -25,26 +25,17 @@ import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.LanguageFileType;
import com.intellij.openapi.fileTypes.impl.CustomSyntaxTableFileType;
import com.intellij.psi.CustomHighlighterTokenType;
-import com.intellij.psi.impl.cache.impl.IndexPatternUtil;
-import com.intellij.psi.impl.cache.impl.OccurrenceConsumer;
-import com.intellij.psi.impl.cache.impl.todo.TodoIndexEntry;
-import com.intellij.psi.impl.cache.impl.todo.TodoIndexers;
-import com.intellij.psi.search.IndexPattern;
import com.intellij.psi.search.UsageSearchContext;
import com.intellij.psi.tree.TokenSet;
import com.intellij.util.Processor;
-import com.intellij.util.indexing.DataIndexer;
import com.intellij.util.indexing.FileContent;
import com.intellij.util.indexing.IdDataConsumer;
import com.intellij.util.text.CharArrayUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
public class IdTableBuilding {
private IdTableBuilding() {
@@ -74,41 +65,6 @@ public class IdTableBuilding {
}
}
- public static class PlainTextTodoIndexer implements DataIndexer {
- @Override
- @NotNull
- public Map map(final FileContent inputData) {
- final CharSequence chars = inputData.getContentAsText();
-
-
- final IndexPattern[] indexPatterns = IndexPatternUtil.getIndexPatterns();
- if (indexPatterns.length > 0) {
- final OccurrenceConsumer occurrenceConsumer = new OccurrenceConsumer(null, true);
- for (IndexPattern indexPattern : indexPatterns) {
- Pattern pattern = indexPattern.getPattern();
- if (pattern != null) {
- Matcher matcher = pattern.matcher(chars);
- while (matcher.find()) {
- if (matcher.start() != matcher.end()) {
- occurrenceConsumer.incTodoOccurrence(indexPattern);
- }
- }
- }
- }
- Map map = new HashMap();
- for (IndexPattern indexPattern : indexPatterns) {
- final int count = occurrenceConsumer.getOccurrenceCount(indexPattern);
- if (count > 0) {
- map.put(new TodoIndexEntry(indexPattern.getPatternString(), indexPattern.isCaseSensitive()), count);
- }
- }
- return map;
- }
- return Collections.emptyMap();
- }
-
- }
-
private static final HashMap ourIdIndexers = new HashMap();
@Deprecated
@@ -120,11 +76,6 @@ public class IdTableBuilding {
return ourIdIndexers.containsKey(fileType) || IdIndexers.INSTANCE.forFileType(fileType) != null;
}
- public static boolean isTodoIndexerRegistered(FileType fileType) {
- return ourIdIndexers.containsKey(fileType) || TodoIndexers.INSTANCE.forFileType(fileType) != null;
- }
-
-
@Nullable
public static FileTypeIdIndexer getFileTypeIndexer(FileType fileType) {
@@ -249,5 +200,4 @@ public class IdTableBuilding {
processor.run(chars, charArray, index1, index);
}
}
-
}
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java b/platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java
similarity index 95%
rename from platform/lang-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java
rename to platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java
index 5e638f303b43..72c28304074c 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java
+++ b/platform/indexing-impl/src/com/intellij/psi/impl/file/impl/ResolveScopeManagerImpl.java
@@ -15,10 +15,9 @@
*/
package com.intellij.psi.impl.file.impl;
-import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.impl.scopes.LibraryRuntimeClasspathScope;
-import com.intellij.openapi.progress.ProgressManager;
+import com.intellij.openapi.progress.ProgressIndicatorProvider;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.*;
import com.intellij.openapi.roots.impl.LibraryScopeCache;
@@ -85,8 +84,9 @@ public class ResolveScopeManagerImpl extends ResolveScopeManager {
ProjectFileIndex projectFileIndex = myProjectRootManager.getFileIndex();
Module module = projectFileIndex.getModuleForFile(vFile);
if (module != null) {
- boolean includeTests = projectFileIndex.isInTestSourceContent(vFile) ||
- !(vFile.getFileType() == StdFileTypes.JAVA && projectFileIndex.isContentSourceFile(vFile));
+ boolean includeTests = projectFileIndex.isInTestSourceContent(vFile);
+ // TODO: dmitrylomov: removed this line to see what fails.
+ //!(vFile.getFileType() == StdFileTypes.JAVA && projectFileIndex.isContentSourceFile(vFile));
return GlobalSearchScope.moduleWithDependenciesAndLibrariesScope(module, includeTests);
}
else {
@@ -96,8 +96,6 @@ public class ResolveScopeManagerImpl extends ResolveScopeManager {
LibraryOrderEntry lib = null;
for (OrderEntry entry : orderEntries) {
- ProgressManager.checkCanceled();
-
if (entry instanceof JdkOrderEntry) {
return LibraryScopeCache.getInstance(myProject).getScopeForSdk((JdkOrderEntry)entry);
}
@@ -134,7 +132,7 @@ public class ResolveScopeManagerImpl extends ResolveScopeManager {
@Override
@NotNull
public GlobalSearchScope getResolveScope(@NotNull PsiElement element) {
- ProgressManager.checkCanceled();
+ ProgressIndicatorProvider.checkCanceled();
VirtualFile vFile;
final PsiFile contextFile;
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/search/CachesBasedRefSearcher.java b/platform/indexing-impl/src/com/intellij/psi/impl/search/CachesBasedRefSearcher.java
similarity index 100%
rename from platform/lang-impl/src/com/intellij/psi/impl/search/CachesBasedRefSearcher.java
rename to platform/indexing-impl/src/com/intellij/psi/impl/search/CachesBasedRefSearcher.java
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/search/LowLevelSearchUtil.java b/platform/indexing-impl/src/com/intellij/psi/impl/search/LowLevelSearchUtil.java
similarity index 97%
rename from platform/lang-impl/src/com/intellij/psi/impl/search/LowLevelSearchUtil.java
rename to platform/indexing-impl/src/com/intellij/psi/impl/search/LowLevelSearchUtil.java
index 3737b39d28c0..bf0f4ba81f26 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/search/LowLevelSearchUtil.java
+++ b/platform/indexing-impl/src/com/intellij/psi/impl/search/LowLevelSearchUtil.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,9 +24,9 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiLanguageInjectionHost;
+import com.intellij.psi.impl.InjectedLanguageFacade;
import com.intellij.psi.impl.source.tree.LeafElement;
import com.intellij.psi.impl.source.tree.TreeElement;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.intellij.psi.search.TextOccurenceProcessor;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.text.CharArrayUtil;
@@ -49,7 +49,7 @@ public class LowLevelSearchUtil {
final StringSearcher searcher,
ProgressIndicator progress) {
if (!(element instanceof PsiLanguageInjectionHost)) return null;
- List> list = InjectedLanguageUtil.getInjectedPsiFiles(element);
+ List> list = InjectedLanguageFacade.getInstance().getInjectedPsiFiles(element);
if (list == null) return null;
for (Pair pair : list) {
final PsiElement injected = pair.getFirst();
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java b/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java
similarity index 87%
rename from platform/lang-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java
rename to platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java
index c8245d5fe416..102d132e8193 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java
+++ b/platform/indexing-impl/src/com/intellij/psi/impl/search/PsiSearchHelperImpl.java
@@ -16,9 +16,7 @@
package com.intellij.psi.impl.search;
-import com.intellij.codeInsight.CommentUtil;
-import com.intellij.concurrency.JobUtil;
-import com.intellij.ide.todo.TodoIndexPatternProvider;
+import com.intellij.concurrency.JobLauncher;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.application.ReadActionProcessor;
@@ -26,23 +24,25 @@ import com.intellij.openapi.application.Result;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.progress.ProgressManager;
+import com.intellij.openapi.progress.ProgressIndicatorProvider;
import com.intellij.openapi.roots.FileIndexFacade;
-import com.intellij.openapi.util.*;
+import com.intellij.openapi.util.Computable;
+import com.intellij.openapi.util.Condition;
+import com.intellij.openapi.util.NullableComputable;
+import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.psi.impl.cache.CacheManager;
-import com.intellij.psi.impl.cache.impl.IndexCacheManagerImpl;
import com.intellij.psi.impl.cache.impl.id.IdIndex;
import com.intellij.psi.impl.cache.impl.id.IdIndexEntry;
import com.intellij.psi.search.*;
-import com.intellij.psi.search.searches.IndexPatternSearch;
-import com.intellij.psi.util.PsiUtilBase;
+import com.intellij.psi.util.PsiUtilCore;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Processor;
import com.intellij.util.SmartList;
+import com.intellij.util.codeInsight.CommentUtilCore;
import com.intellij.util.containers.CollectionFactory;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
@@ -60,7 +60,6 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.search.PsiSearchHelperImpl");
private final PsiManagerEx myManager;
- private static final TodoItem[] EMPTY_TODO_ITEMS = new TodoItem[0];
@Override
@NotNull
@@ -80,81 +79,6 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
myManager = manager;
}
- @Override
- @NotNull
- public PsiFile[] findFilesWithTodoItems() {
- return CacheManager.SERVICE.getInstance(myManager.getProject()).getFilesWithTodoItems();
- }
-
- @Override
- @NotNull
- public TodoItem[] findTodoItems(@NotNull PsiFile file) {
- return findTodoItems(file, 0, file.getTextLength());
- }
-
- @Override
- @NotNull
- public TodoItem[] findTodoItems(@NotNull PsiFile file, int startOffset, int endOffset) {
- final Collection occurrences = IndexPatternSearch.search(file, TodoIndexPatternProvider.getInstance()).findAll();
- if (occurrences.isEmpty()) {
- return EMPTY_TODO_ITEMS;
- }
-
- return processTodoOccurences(startOffset, endOffset, occurrences);
- }
-
- private TodoItem[] processTodoOccurences(int startOffset, int endOffset, Collection occurrences) {
- List items = new ArrayList(occurrences.size());
- TextRange textRange = new TextRange(startOffset, endOffset);
- final TodoItemsCreator todoItemsCreator = new TodoItemsCreator();
- for(IndexPatternOccurrence occurrence: occurrences) {
- TextRange occurrenceRange = occurrence.getTextRange();
- if (textRange.contains(occurrenceRange)) {
- items.add(todoItemsCreator.createTodo(occurrence));
- }
- }
-
- return items.toArray(new TodoItem[items.size()]);
- }
-
- @NotNull
- @Override
- public TodoItem[] findTodoItemsLight(@NotNull PsiFile file) {
- return findTodoItemsLight(file, 0, file.getTextLength());
- }
-
- @NotNull
- @Override
- public TodoItem[] findTodoItemsLight(@NotNull PsiFile file, int startOffset, int endOffset) {
- final Collection occurrences =
- LightIndexPatternSearch.SEARCH.createQuery(new IndexPatternSearch.SearchParameters(file, TodoIndexPatternProvider.getInstance())).findAll();
-
- if (occurrences.isEmpty()) {
- return EMPTY_TODO_ITEMS;
- }
-
- return processTodoOccurences(startOffset, endOffset, occurrences);
- }
-
- @Override
- public int getTodoItemsCount(@NotNull PsiFile file) {
- int count = CacheManager.SERVICE.getInstance(myManager.getProject()).getTodoCount(file.getVirtualFile(), TodoIndexPatternProvider.getInstance());
- if (count != -1) return count;
- return findTodoItems(file).length;
- }
-
- @Override
- public int getTodoItemsCount(@NotNull PsiFile file, @NotNull TodoPattern pattern) {
- int count = CacheManager.SERVICE.getInstance(myManager.getProject()).getTodoCount(file.getVirtualFile(), pattern.getIndexPattern());
- if (count != -1) return count;
- TodoItem[] items = findTodoItems(file);
- count = 0;
- for (TodoItem item : items) {
- if (item.getPattern().equals(pattern)) count++;
- }
- return count;
- }
-
@Override
@NotNull
public PsiElement[] findCommentsContainingIdentifier(@NotNull String identifier, @NotNull SearchScope searchScope) {
@@ -169,7 +93,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
}
});
synchronized (results) {
- return PsiUtilBase.toPsiElementArray(results);
+ return PsiUtilCore.toPsiElementArray(results);
}
}
@@ -180,7 +104,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
TextOccurenceProcessor occurrenceProcessor = new TextOccurenceProcessor() {
@Override
public boolean execute(PsiElement element, int offsetInElement) {
- if (CommentUtil.isCommentTextElement(element)) {
+ if (CommentUtilCore.isCommentTextElement(element)) {
if (element.findReferenceAt(offsetInElement) == null) {
return processor.process(element);
}
@@ -200,7 +124,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
if (text.length() == 0) {
throw new IllegalArgumentException("Cannot search for elements with empty text");
}
- final ProgressIndicator progress = ProgressManager.getInstance().getProgressIndicator();
+ final ProgressIndicator progress = ProgressIndicatorProvider.getInstance().getProgressIndicator();
if (searchScope instanceof GlobalSearchScope) {
StringSearcher searcher = new StringSearcher(text, caseSensitively, true);
@@ -214,12 +138,17 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
PsiElement[] scopeElements = scope.getScope();
final boolean ignoreInjectedPsi = scope.isIgnoreInjectedPsi();
- return JobUtil.invokeConcurrentlyUnderProgress(Arrays.asList(scopeElements), progress, false, new Processor() {
- @Override
- public boolean process(PsiElement scopeElement) {
- return processElementsWithWordInScopeElement(scopeElement, processor, text, caseSensitively, ignoreInjectedPsi, progress);
- }
- });
+ return JobLauncher.getInstance().invokeConcurrentlyUnderProgress(Arrays.asList(scopeElements), progress, false,
+ new Processor() {
+ @Override
+ public boolean process(PsiElement scopeElement) {
+ return processElementsWithWordInScopeElement(scopeElement,
+ processor, text,
+ caseSensitively,
+ ignoreInjectedPsi,
+ progress);
+ }
+ });
}
}
@@ -283,7 +212,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
final AtomicBoolean pceThrown = new AtomicBoolean(false);
final int size = files.size();
- boolean completed = JobUtil.invokeConcurrentlyUnderProgress(files, progress, false, new Processor() {
+ boolean completed = JobLauncher.getInstance().invokeConcurrentlyUnderProgress(files, progress, false, new Processor() {
@Override
public boolean process(final VirtualFile vfile) {
final PsiFile file = ApplicationManager.getApplication().runReadAction(new Computable() {
@@ -304,7 +233,14 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
for (PsiElement psiRoot : psiRoots) {
if (progress != null) progress.checkCanceled();
if (!processed.add(psiRoot)) continue;
- assert psiRoot != null : "One of the roots of file "+file + " is null. All roots: "+Arrays.asList(psiRoots)+"; Viewprovider: "+file.getViewProvider()+"; Virtual file: "+file.getViewProvider().getVirtualFile();
+ assert psiRoot != null : "One of the roots of file " +
+ file +
+ " is null. All roots: " +
+ Arrays.asList(psiRoots) +
+ "; Viewprovider: " +
+ file.getViewProvider() +
+ "; Virtual file: " +
+ file.getViewProvider().getVirtualFile();
if (!psiRootProcessor.process(psiRoot)) {
canceled.set(true);
return;
@@ -382,7 +318,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
return ContainerUtil.process(collectProcessor.getResults(), new ReadActionProcessor() {
@Override
public boolean processInReadAction(VirtualFile virtualFile) {
- return !IndexCacheManagerImpl.shouldBeFound(scope, virtualFile, index) || processor.process(virtualFile);
+ return !index.shouldBeFound(scope, virtualFile) || processor.process(virtualFile);
}
});
}
@@ -412,7 +348,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
if (qName.length() == 0) {
throw new IllegalArgumentException("Cannot search for elements with empty text");
}
- final ProgressIndicator progress = ProgressManager.getInstance().getProgressIndicator();
+ final ProgressIndicator progress = ProgressIndicatorProvider.getInstance().getProgressIndicator();
int dotIndex = qName.lastIndexOf('.');
int dollarIndex = qName.lastIndexOf('$');
@@ -541,7 +477,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
appendCollectorsFromQueryRequests(collectors);
- ProgressIndicator progress = ProgressManager.getInstance().getProgressIndicator();
+ ProgressIndicator progress = ProgressIndicatorProvider.getInstance().getProgressIndicator();
do {
final MultiMap, RequestWithProcessor> globals = new MultiMap, RequestWithProcessor>();
final List> customs = CollectionFactory.arrayList();
@@ -699,7 +635,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
FileBasedIndex.getInstance().processValues(IdIndex.NAME, entry, file, new FileBasedIndex.ValueProcessor() {
@Override
public boolean process(VirtualFile file, Integer value) {
- if (IndexCacheManagerImpl.shouldBeFound(commonScope, file, index)) {
+ if (index.shouldBeFound(commonScope, file)) {
int mask = value.intValue();
for (RequestWithProcessor single : data) {
final PsiSearchRequest request = single.request;
@@ -754,7 +690,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
public boolean process(VirtualFile file, Integer value) {
if (progress != null) progress.checkCanceled();
- if (IndexCacheManagerImpl.shouldBeFound(commonScope, file, index)) {
+ if (index.shouldBeFound(commonScope, file)) {
int mask = value.intValue();
for (RequestWithProcessor single : data) {
final PsiSearchRequest request = single.request;
@@ -832,7 +768,7 @@ public class PsiSearchHelperImpl implements PsiSearchHelper {
@Override
public boolean process(VirtualFile file) {
if (file == fileToIgnoreOccurencesInVirtualFile) return true;
- if (!IndexCacheManagerImpl.shouldBeFound(scope, file, index)) return true;
+ if (!index.shouldBeFound(scope, file)) return true;
final int value = count.incrementAndGet();
return value < 10;
}
diff --git a/platform/lang-impl/src/com/intellij/psi/search/ProjectScopeBuilderImpl.java b/platform/indexing-impl/src/com/intellij/psi/search/ProjectScopeBuilderImpl.java
similarity index 100%
rename from platform/lang-impl/src/com/intellij/psi/search/ProjectScopeBuilderImpl.java
rename to platform/indexing-impl/src/com/intellij/psi/search/ProjectScopeBuilderImpl.java
diff --git a/platform/lang-impl/src/com/intellij/psi/search/UseScopeEnlarger.java b/platform/indexing-impl/src/com/intellij/psi/search/UseScopeEnlarger.java
similarity index 96%
rename from platform/lang-impl/src/com/intellij/psi/search/UseScopeEnlarger.java
rename to platform/indexing-impl/src/com/intellij/psi/search/UseScopeEnlarger.java
index 149b051838fa..4158be2b0663 100644
--- a/platform/lang-impl/src/com/intellij/psi/search/UseScopeEnlarger.java
+++ b/platform/indexing-impl/src/com/intellij/psi/search/UseScopeEnlarger.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2010 JetBrains s.r.o.
+ * Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/platform/lang-api/src/com/intellij/codeInsight/template/TemplateBuilder.java b/platform/lang-api/src/com/intellij/codeInsight/template/TemplateBuilder.java
index a6b955f6b850..3d938c68a3c4 100644
--- a/platform/lang-api/src/com/intellij/codeInsight/template/TemplateBuilder.java
+++ b/platform/lang-api/src/com/intellij/codeInsight/template/TemplateBuilder.java
@@ -16,6 +16,7 @@
package com.intellij.codeInsight.template;
+import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
@@ -65,6 +66,15 @@ public interface TemplateBuilder {
/**
* Shows the live template and initiates editing process.
+ * @deprecated doesn't work correctly for files with multiple editors use #run(Editor, boolean) instead
*/
+ @Deprecated
void run();
+
+ /**
+ * Shows the live template and initiates editing process.
+ * @param editor editor to use to start editing process.
+ * @param inline if true then inline template will be created, regular otherwise
+ */
+ void run(@NotNull Editor editor, boolean inline);
}
diff --git a/platform/lang-api/src/com/intellij/ide/actions/ElementCreator.java b/platform/lang-api/src/com/intellij/ide/actions/ElementCreator.java
index e86642c1083e..0992221826a0 100644
--- a/platform/lang-api/src/com/intellij/ide/actions/ElementCreator.java
+++ b/platform/lang-api/src/com/intellij/ide/actions/ElementCreator.java
@@ -30,7 +30,6 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.SmartPointerManager;
import com.intellij.psi.SmartPsiElementPointer;
import com.intellij.psi.util.PsiUtilBase;
-import com.intellij.util.IncorrectOperationException;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
diff --git a/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java b/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java
index fdf5d8044391..59fc46c7f6ad 100644
--- a/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java
+++ b/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java
@@ -44,7 +44,6 @@ import java.util.List;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
public class JdkUtil {
private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.projectRoots.JdkUtil");
@@ -96,7 +95,7 @@ public class JdkUtil {
return null;
}
try {
- ZipEntry entry = manifestJarFile.getEntry(JarFile.MANIFEST_NAME);
+ com.intellij.openapi.vfs.JarFile.JarEntry entry = manifestJarFile.getEntry(JarFile.MANIFEST_NAME);
if (entry == null) {
return null;
}
diff --git a/platform/lang-api/src/com/intellij/psi/search/PsiTodoSearchHelper.java b/platform/lang-api/src/com/intellij/psi/search/PsiTodoSearchHelper.java
index fbfd06d5196d..c0d16c6ef762 100644
--- a/platform/lang-api/src/com/intellij/psi/search/PsiTodoSearchHelper.java
+++ b/platform/lang-api/src/com/intellij/psi/search/PsiTodoSearchHelper.java
@@ -15,6 +15,8 @@
*/
package com.intellij.psi.search;
+import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
@@ -24,6 +26,15 @@ import org.jetbrains.annotations.NotNull;
* Time: 10:08 AM
*/
public interface PsiTodoSearchHelper {
+ class SERVICE {
+ private SERVICE() {
+ }
+
+ public static PsiTodoSearchHelper getInstance(Project project) {
+ return ServiceManager.getService(project, PsiTodoSearchHelper.class);
+ }
+ }
+
/**
* Returns the list of all files in the project which have to do items.
*
diff --git a/platform/lang-api/src/com/intellij/psi/search/SearchSession.java b/platform/lang-api/src/com/intellij/psi/search/SearchSession.java
deleted file mode 100644
index 6962de194566..000000000000
--- a/platform/lang-api/src/com/intellij/psi/search/SearchSession.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.intellij.psi.search;
-
-import com.intellij.openapi.util.UserDataHolderBase;
-
-/**
- * @author peter
- */
-public class SearchSession extends UserDataHolderBase {
-}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/AutoPopupController.java b/platform/lang-impl/src/com/intellij/codeInsight/AutoPopupController.java
index 179f975b6ee9..bd7753874d63 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/AutoPopupController.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/AutoPopupController.java
@@ -40,7 +40,7 @@ import com.intellij.openapi.util.Condition;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.Alarm;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.Nullable;
@@ -157,7 +157,7 @@ public class AutoPopupController implements Disposable {
if (file == null) return;
if (!documentManager.isUncommited(editor.getDocument())) {
- file = documentManager.getPsiFile(InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(editor, file).getDocument());
+ file = documentManager.getPsiFile(InjectedLanguageFacadeImpl.getEditorForInjectedLanguageNoCommit(editor, file).getDocument());
if (file == null) return;
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/CommentUtil.java b/platform/lang-impl/src/com/intellij/codeInsight/CommentUtil.java
index a2ac211476b1..afcd6bb833b1 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/CommentUtil.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/CommentUtil.java
@@ -16,19 +16,15 @@
package com.intellij.codeInsight;
-import com.intellij.lang.*;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiComment;
-import com.intellij.psi.PsiElement;
import com.intellij.psi.codeStyle.CodeStyleManager;
import com.intellij.psi.codeStyle.Indent;
-import com.intellij.psi.tree.IElementType;
+import com.intellij.util.codeInsight.CommentUtilCore;
import com.intellij.util.text.CharArrayUtil;
-import org.jetbrains.annotations.Nullable;
-public class CommentUtil {
+public class CommentUtil extends CommentUtilCore {
private CommentUtil() { }
public static Indent getMinLineIndent(Project project, Document document, int line1, int line2, FileType fileType) {
@@ -57,26 +53,4 @@ public class CommentUtil {
//}
return minIndent;
}
-
- public static boolean isComment(@Nullable final PsiElement element) {
- return element != null && isComment(element.getNode());
- }
-
- public static boolean isComment(@Nullable final ASTNode node) {
- if (node == null) return false;
- final IElementType type = node.getElementType();
- final ParserDefinition parserDefinition = LanguageParserDefinitions.INSTANCE.forLanguage(type.getLanguage());
- return parserDefinition != null && parserDefinition.getCommentTokens().contains(type);
- }
-
- public static boolean isCommentTextElement(final PsiElement element) {
- final Commenter commenter = LanguageCommenters.INSTANCE.forLanguage(element.getLanguage());
- if (commenter instanceof CodeDocumentationAwareCommenterEx) {
- final CodeDocumentationAwareCommenterEx commenterEx = (CodeDocumentationAwareCommenterEx)commenter;
- if (commenterEx.isDocumentationCommentText(element)) return true;
- if (element instanceof PsiComment && commenterEx.isDocumentationComment((PsiComment)element)) return false;
- }
-
- return isComment(element);
- }
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/actions/BaseCodeInsightAction.java b/platform/lang-impl/src/com/intellij/codeInsight/actions/BaseCodeInsightAction.java
index 2a76da8174ba..d3fc7311dd0e 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/actions/BaseCodeInsightAction.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/actions/BaseCodeInsightAction.java
@@ -26,7 +26,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -59,7 +59,7 @@ public abstract class BaseCodeInsightAction extends CodeInsightAction {
PsiFile psiFile = documentManager.getCachedPsiFile(editor.getDocument());
if (psiFile != null) {
if (commit) documentManager.commitAllDocuments();
- injectedEditor = InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(editor, psiFile);
+ injectedEditor = InjectedLanguageFacadeImpl.getEditorForInjectedLanguageNoCommit(editor, psiFile);
}
}
return injectedEditor;
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java
index e24f399eedaa..98303e02eab9 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java
@@ -60,7 +60,7 @@ import com.intellij.psi.impl.DebugUtil;
import com.intellij.psi.impl.PsiFileEx;
import com.intellij.psi.impl.PsiModificationTrackerImpl;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.reference.SoftReference;
import com.intellij.util.Consumer;
@@ -223,7 +223,7 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler {
int offset = editor.getCaretModel().getOffset();
int psiOffset = Math.max(0, offset - 1);
- PsiElement elementAt = InjectedLanguageUtil.findInjectedElementNoCommit(psiFile, psiOffset);
+ PsiElement elementAt = InjectedLanguageFacadeImpl.findInjectedElementNoCommit(psiFile, psiOffset);
if (elementAt == null) {
elementAt = psiFile.findElementAt(psiOffset);
}
@@ -528,10 +528,10 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler {
}
}
});
- final PsiFile hostFile = InjectedLanguageUtil.getTopLevelFile(fileCopy[0]);
+ final PsiFile hostFile = InjectedLanguageFacadeImpl.getTopLevelFile(fileCopy[0]);
final InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(hostFile.getProject());
final int hostStartOffset = injectedLanguageManager.injectedToHost(fileCopy[0], initContext.getStartOffset());
- final Editor hostEditor = InjectedLanguageUtil.getTopLevelEditor(initContext.getEditor());
+ final Editor hostEditor = InjectedLanguageFacadeImpl.getTopLevelEditor(initContext.getEditor());
final OffsetMap hostMap = new OffsetMap(hostEditor.getDocument());
final OffsetMap original = initContext.getOffsetMap();
@@ -595,13 +595,14 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler {
InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(hostFile.getProject());
CompletionContext context;
- PsiFile injected = InjectedLanguageUtil.findInjectedPsiNoCommit(hostFile, hostStartOffset);
+ PsiFile injected = InjectedLanguageFacadeImpl.findInjectedPsiNoCommit(hostFile, hostStartOffset);
if (injected != null) {
TextRange host = injectedLanguageManager.injectedToHost(injected, injected.getTextRange());
assert hostStartOffset >= host.getStartOffset() : "startOffset before injected";
assert hostStartOffset <= host.getEndOffset() : "startOffset after injected";
- EditorWindow injectedEditor = (EditorWindow)InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(hostEditor, hostFile, hostStartOffset);
+ EditorWindow injectedEditor = (EditorWindow)InjectedLanguageFacadeImpl
+ .getEditorForInjectedLanguageNoCommit(hostEditor, hostFile, hostStartOffset);
assert injected == injectedEditor.getInjectedFile();
final OffsetMap map = new OffsetMap(injectedEditor.getDocument());
for (final OffsetKey key : hostMap.getAllOffsets()) {
@@ -825,7 +826,7 @@ public class CodeCompletionHandlerBase implements CodeInsightActionHandler {
}
private static Runnable rememberDocumentState(final Editor _editor) {
- final Editor editor = InjectedLanguageUtil.getTopLevelEditor(_editor);
+ final Editor editor = InjectedLanguageFacadeImpl.getTopLevelEditor(_editor);
final String documentText = editor.getDocument().getText();
final int caret = editor.getCaretModel().getOffset();
final int selStart = editor.getSelectionModel().getSelectionStart();
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java
index 2d8c4eb47a3f..baff2b619c87 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/impl/CompletionServiceImpl.java
@@ -31,7 +31,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.Weigher;
import com.intellij.psi.WeighingService;
import com.intellij.psi.impl.DebugUtil;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -140,7 +140,7 @@ public class CompletionServiceImpl extends CompletionService{
PsiFile positionFile = myParameters.getPosition().getContainingFile();
LOG.error("prefix should be some actual file string just before caret: " + matcher.getPrefix() +
"\n text=" + fragment +
- "\ninjected=" + (InjectedLanguageUtil.getTopLevelFile(positionFile) != positionFile) +
+ "\ninjected=" + (InjectedLanguageFacadeImpl.getTopLevelFile(positionFile) != positionFile) +
"\nlang=" + positionFile.getLanguage());
}
return new CompletionResultSetImpl(getConsumer(), myTextBeforePosition, matcher, myContributor, myParameters, mySorter, myProcess, this);
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/ReferenceImporter.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/ReferenceImporter.java
index dd21b3b2defa..d7e7ea32ad2b 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/ReferenceImporter.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/ReferenceImporter.java
@@ -28,4 +28,5 @@ public interface ReferenceImporter {
ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.referenceImporter");
boolean autoImportReferenceAtCursor(@NotNull Editor editor, @NotNull PsiFile file);
+ boolean autoImportReferenceAt(@NotNull Editor editor, @NotNull PsiFile file, int offset);
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/CodeFoldingPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/CodeFoldingPass.java
index 444f8828fb4b..ae9bcb6a03fa 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/CodeFoldingPass.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/CodeFoldingPass.java
@@ -25,7 +25,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.util.Key;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import org.jetbrains.annotations.NotNull;
class CodeFoldingPass extends TextEditorHighlightingPass implements DumbAware {
@@ -72,7 +72,7 @@ class CodeFoldingPass extends TextEditorHighlightingPass implements DumbAware {
}
}
- if (InjectedLanguageUtil.getTopLevelFile(myFile) == myFile) {
+ if (InjectedLanguageFacadeImpl.getTopLevelFile(myFile) == myFile) {
clearFirstTimeFlag(myFile, myEditor, THE_FIRST_TIME);
}
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java
index c46689ceb342..9df986ee40cf 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/GeneralHighlightingPass.java
@@ -24,7 +24,7 @@ import com.intellij.codeInsight.daemon.impl.analysis.HighlightInfoHolder;
import com.intellij.codeInsight.daemon.impl.analysis.HighlightLevelUtil;
import com.intellij.codeInsight.problems.ProblemImpl;
import com.intellij.codeInsight.problems.WolfTheProblemSolverImpl;
-import com.intellij.concurrency.JobUtil;
+import com.intellij.concurrency.JobLauncher;
import com.intellij.injected.editor.DocumentWindow;
import com.intellij.lang.Language;
import com.intellij.lang.annotation.HighlightSeverity;
@@ -59,9 +59,9 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.problems.Problem;
import com.intellij.problems.WolfTheProblemSolver;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.impl.source.tree.injected.Place;
-import com.intellij.psi.search.PsiSearchHelper;
+import com.intellij.psi.search.PsiTodoSearchHelper;
import com.intellij.psi.search.TodoItem;
import com.intellij.psi.tree.IElementType;
import com.intellij.util.Processor;
@@ -291,7 +291,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP
@NotNull final List elements2,
@NotNull final ProgressIndicator progress,
@NotNull final Set outInjected) {
- List injected = InjectedLanguageUtil.getCachedInjectedDocuments(myFile);
+ List injected = InjectedLanguageFacadeImpl.getCachedInjectedDocuments(myFile);
Collection hosts = new THashSet(elements1.size() + elements2.size() + injected.size());
//rehighlight all injected PSI regardless the range,
@@ -320,14 +320,15 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP
}
}
};
- if (!JobUtil.invokeConcurrentlyUnderProgress(new ArrayList(hosts), progress, false, new Processor() {
- @Override
- public boolean process(PsiElement element) {
- progress.checkCanceled();
- InjectedLanguageUtil.enumerate(element, myFile, false, visitor);
- return true;
- }
- })) throw new ProcessCanceledException();
+ if (!JobLauncher.getInstance().invokeConcurrentlyUnderProgress(new ArrayList(hosts), progress, false,
+ new Processor() {
+ @Override
+ public boolean process(PsiElement element) {
+ progress.checkCanceled();
+ InjectedLanguageFacadeImpl.enumerate(element, myFile, false, visitor);
+ return true;
+ }
+ })) throw new ProcessCanceledException();
}
// returns false if canceled
@@ -338,59 +339,86 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP
final InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(myProject);
final TextAttributes injectedAttributes = myGlobalScheme.getAttributes(EditorColors.INJECTED_LANGUAGE_FRAGMENT);
- return JobUtil.invokeConcurrentlyUnderProgress(new ArrayList(injectedFiles), progress, myFailFastOnAcquireReadAction, new Processor() {
- @Override
- public boolean process(final PsiFile injectedPsi) {
- DocumentWindow documentWindow = (DocumentWindow)PsiDocumentManager.getInstance(myProject).getCachedDocument(injectedPsi);
- if (documentWindow == null) return true;
- Place places = InjectedLanguageUtil.getShreds(injectedPsi);
- for (PsiLanguageInjectionHost.Shred place : places) {
- TextRange textRange = place.getRangeInsideHost().shiftRight(place.getHost().getTextRange().getStartOffset());
- if (textRange.isEmpty()) continue;
- String desc = injectedPsi.getLanguage().getDisplayName() + ": " + injectedPsi.getText();
- HighlightInfo info = HighlightInfo.createHighlightInfo(HighlightInfoType.INJECTED_LANGUAGE_BACKGROUND, textRange, null, desc, injectedAttributes);
- info.fromInjection = true;
- outInfos.add(info);
- }
+ return JobLauncher.getInstance().invokeConcurrentlyUnderProgress(new ArrayList(injectedFiles), progress,
+ myFailFastOnAcquireReadAction,
+ new Processor() {
+ @Override
+ public boolean process(final PsiFile injectedPsi) {
+ DocumentWindow documentWindow =
+ (DocumentWindow)PsiDocumentManager.getInstance(myProject)
+ .getCachedDocument(injectedPsi);
+ if (documentWindow == null) return true;
+ Place places = InjectedLanguageFacadeImpl.getShreds(injectedPsi);
+ for (PsiLanguageInjectionHost.Shred place : places) {
+ TextRange textRange = place.getRangeInsideHost()
+ .shiftRight(place.getHost().getTextRange().getStartOffset());
+ if (textRange.isEmpty()) continue;
+ String desc =
+ injectedPsi.getLanguage().getDisplayName() +
+ ": " +
+ injectedPsi.getText();
+ HighlightInfo info = HighlightInfo
+ .createHighlightInfo(
+ HighlightInfoType.INJECTED_LANGUAGE_BACKGROUND,
+ textRange, null, desc, injectedAttributes);
+ info.fromInjection = true;
+ outInfos.add(info);
+ }
- HighlightInfoHolder holder = createInfoHolder(injectedPsi);
- runHighlightVisitorsForInjected(injectedPsi, holder, progress);
- for (int i = 0; i < holder.size(); i++) {
- HighlightInfo info = holder.get(i);
- final int startOffset = documentWindow.injectedToHost(info.startOffset);
- final TextRange fixedTextRange = getFixedTextRange(documentWindow, startOffset);
- addPatchedInfos(info, injectedPsi, documentWindow, injectedLanguageManager, fixedTextRange, outInfos);
- }
- holder.clear();
- highlightInjectedSyntax(injectedPsi, holder);
- for (int i = 0; i < holder.size(); i++) {
- HighlightInfo info = holder.get(i);
- final int startOffset = info.startOffset;
- final TextRange fixedTextRange = getFixedTextRange(documentWindow, startOffset);
- if (fixedTextRange == null) {
- info.fromInjection = true;
- outInfos.add(info);
- }
- else {
- HighlightInfo patched =
- new HighlightInfo(info.forcedTextAttributes, info.forcedTextAttributesKey, info.type,
- fixedTextRange.getStartOffset(), fixedTextRange.getEndOffset(),
- info.description, info.toolTip, info.type.getSeverity(null), info.isAfterEndOfLine, null, false);
- patched.fromInjection = true;
- outInfos.add(patched);
- }
- }
+ HighlightInfoHolder holder = createInfoHolder(injectedPsi);
+ runHighlightVisitorsForInjected(injectedPsi, holder, progress);
+ for (int i = 0; i < holder.size(); i++) {
+ HighlightInfo info = holder.get(i);
+ final int startOffset =
+ documentWindow.injectedToHost(info.startOffset);
+ final TextRange fixedTextRange =
+ getFixedTextRange(documentWindow, startOffset);
+ addPatchedInfos(info, injectedPsi, documentWindow,
+ injectedLanguageManager,
+ fixedTextRange, outInfos);
+ }
+ holder.clear();
+ highlightInjectedSyntax(injectedPsi, holder);
+ for (int i = 0; i < holder.size(); i++) {
+ HighlightInfo info = holder.get(i);
+ final int startOffset = info.startOffset;
+ final TextRange fixedTextRange =
+ getFixedTextRange(documentWindow, startOffset);
+ if (fixedTextRange == null) {
+ info.fromInjection = true;
+ outInfos.add(info);
+ }
+ else {
+ HighlightInfo patched =
+ new HighlightInfo(info.forcedTextAttributes,
+ info.forcedTextAttributesKey,
+ info.type,
+ fixedTextRange.getStartOffset(),
+ fixedTextRange.getEndOffset(),
+ info.description, info.toolTip,
+ info.type.getSeverity(null),
+ info.isAfterEndOfLine, null,
+ false);
+ patched.fromInjection = true;
+ outInfos.add(patched);
+ }
+ }
- if (!isDumbMode()) {
- List todos = new ArrayList();
- highlightTodos(injectedPsi, injectedPsi.getText(), 0, injectedPsi.getTextLength(), progress, myPriorityRange, todos, todos);
- for (HighlightInfo info : todos) {
- addPatchedInfos(info, injectedPsi, documentWindow, injectedLanguageManager, null, outInfos);
- }
- }
- return true;
- }
- });
+ if (!isDumbMode()) {
+ List todos = new ArrayList();
+ highlightTodos(injectedPsi, injectedPsi.getText(), 0,
+ injectedPsi.getTextLength(), progress,
+ myPriorityRange, todos,
+ todos);
+ for (HighlightInfo info : todos) {
+ addPatchedInfos(info, injectedPsi, documentWindow,
+ injectedLanguageManager,
+ null, outInfos);
+ }
+ }
+ return true;
+ }
+ });
}
private static TextRange getFixedTextRange(@NotNull DocumentWindow documentWindow, int startOffset) {
@@ -494,7 +522,8 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP
}
private void highlightInjectedSyntax(final PsiFile injectedPsi, HighlightInfoHolder holder) {
- List, TextRange>> tokens = InjectedLanguageUtil.getHighlightTokens(injectedPsi);
+ List, TextRange>> tokens = InjectedLanguageFacadeImpl
+ .getHighlightTokens(injectedPsi);
if (tokens == null) return;
final Language injectedLanguage = injectedPsi.getLanguage();
@@ -802,7 +831,7 @@ public class GeneralHighlightingPass extends ProgressableTextEditorHighlightingP
@NotNull ProperTextRange priorityRange,
@NotNull Collection result,
@NotNull Collection outsideResult) {
- PsiSearchHelper helper = PsiSearchHelper.SERVICE.getInstance(file.getProject());
+ PsiTodoSearchHelper helper = PsiTodoSearchHelper.SERVICE.getInstance(file.getProject());
TodoItem[] todoItems = helper.findTodoItems(file, startOffset, endOffset);
if (todoItems.length == 0) return;
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java
index 2012c5c95773..b52c21cf28a6 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java
@@ -37,7 +37,7 @@ import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.searches.ReferencesSearch;
import com.intellij.util.Processor;
@@ -100,7 +100,7 @@ public class IdentifierHighlighterPass extends TextEditorHighlightingPass {
if (myTarget == null) {
if (!PsiDocumentManager.getInstance(myProject).isUncommited(myEditor.getDocument())) {
// when document is committed, try to check injected stuff - it's fast
- Editor injectedEditor = InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(myEditor, myFile, myCaretOffset);
+ Editor injectedEditor = InjectedLanguageFacadeImpl.getEditorForInjectedLanguageNoCommit(myEditor, myFile, myCaretOffset);
if (injectedEditor != null) {
myTarget = TargetElementUtilBase.getInstance().findTargetElement(injectedEditor, flags, injectedEditor.getCaretModel().getOffset());
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java
index 07d4c0672e26..e961ecd989ff 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java
@@ -47,7 +47,7 @@ import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.Function;
import com.intellij.util.FunctionUtil;
import gnu.trove.THashSet;
@@ -211,7 +211,7 @@ public class LineMarkersPass extends ProgressableTextEditorHighlightingPass impl
}
};
for (int i = 0, size = elements.size(); i < size; ++i) {
- InjectedLanguageUtil.enumerate(elements.get(i), file, false, collectingVisitor);
+ InjectedLanguageFacadeImpl.enumerate(elements.get(i), file, false, collectingVisitor);
}
for (PsiFile injectedPsi : injectedFiles) {
final Project project = injectedPsi.getProject();
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java
index 52fb9139dc94..b3f706976e75 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java
@@ -25,7 +25,7 @@ import com.intellij.codeInsight.intention.EmptyIntentionAction;
import com.intellij.codeInspection.*;
import com.intellij.codeInspection.ex.*;
import com.intellij.codeInspection.ui.ProblemDescriptionNode;
-import com.intellij.concurrency.JobUtil;
+import com.intellij.concurrency.JobLauncher;
import com.intellij.injected.editor.DocumentWindow;
import com.intellij.lang.Language;
import com.intellij.lang.annotation.HighlightSeverity;
@@ -53,7 +53,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.profile.codeInspection.InspectionProjectProfileManager;
import com.intellij.profile.codeInspection.SeverityProvider;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.ConcurrencyUtil;
import com.intellij.util.Function;
import com.intellij.util.Processor;
@@ -300,39 +300,50 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass
final ArrayList init = new ArrayList();
List>> entries = new ArrayList>>(tools.entrySet());
- boolean result = JobUtil.invokeConcurrentlyUnderProgress(entries, indicator, myFailFastOnAcquireReadAction, new Processor>>() {
- @Override
- public boolean process(final Map.Entry> pair) {
- indicator.checkCanceled();
+ boolean result = JobLauncher.getInstance().invokeConcurrentlyUnderProgress(entries, indicator, myFailFastOnAcquireReadAction,
+ new Processor>>() {
+ @Override
+ public boolean process(final Map.Entry> pair) {
+ indicator.checkCanceled();
- ApplicationManager.getApplication().assertReadAccessAllowed();
- final LocalInspectionToolWrapper wrapper = pair.getKey();
- LocalInspectionTool tool = wrapper.getTool();
- final boolean[] applyIncrementally = {isOnTheFly};
- ProblemsHolder holder = new ProblemsHolder(iManager, myFile, isOnTheFly) {
- @Override
- public void registerProblem(@NotNull ProblemDescriptor descriptor) {
- super.registerProblem(descriptor);
- if (applyIncrementally[0]) {
- addDescriptorIncrementally(descriptor, wrapper, indicator);
- }
- }
- };
- Set languages = (Set)pair.getValue();
- PsiElementVisitor visitor = createVisitorAndAcceptElements(tool, holder, isOnTheFly, session, elements, languages);
+ ApplicationManager.getApplication()
+ .assertReadAccessAllowed();
+ final LocalInspectionToolWrapper wrapper = pair.getKey();
+ LocalInspectionTool tool = wrapper.getTool();
+ final boolean[] applyIncrementally = {isOnTheFly};
+ ProblemsHolder holder =
+ new ProblemsHolder(iManager, myFile, isOnTheFly) {
+ @Override
+ public void registerProblem(@NotNull ProblemDescriptor descriptor) {
+ super.registerProblem(descriptor);
+ if (applyIncrementally[0]) {
+ addDescriptorIncrementally(descriptor, wrapper,
+ indicator);
+ }
+ }
+ };
+ Set languages = (Set)pair.getValue();
+ PsiElementVisitor visitor =
+ createVisitorAndAcceptElements(tool, holder,
+ isOnTheFly, session,
+ elements, languages);
- synchronized (init) {
- init.add(new InspectionContext(wrapper, holder, visitor, languages));
- }
- advanceProgress(1);
+ synchronized (init) {
+ init.add(
+ new InspectionContext(wrapper, holder, visitor,
+ languages));
+ }
+ advanceProgress(1);
- if (holder.hasResults()) {
- appendDescriptors(myFile, holder.getResults(), wrapper);
- }
- applyIncrementally[0] = false; // do not apply incrementally outside visible range
- return true;
- }
- });
+ if (holder.hasResults()) {
+ appendDescriptors(myFile, holder.getResults(),
+ wrapper);
+ }
+ applyIncrementally[0] =
+ false; // do not apply incrementally outside visible range
+ return true;
+ }
+ });
if (!result) throw new ProcessCanceledException();
inspectInjectedPsi(elements, isOnTheFly, indicator, iManager, true, checkDumbAwareness, wrappers);
return init;
@@ -381,7 +392,7 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass
return true;
}
};
- boolean result = JobUtil.invokeConcurrentlyUnderProgress(init, indicator, myFailFastOnAcquireReadAction, processor);
+ boolean result = JobLauncher.getInstance().invokeConcurrentlyUnderProgress(init, indicator, myFailFastOnAcquireReadAction, processor);
if (!result) {
throw new ProcessCanceledException();
}
@@ -408,7 +419,7 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass
final boolean inVisibleRange, final boolean checkDumbAwareness, final List wrappers) {
final Set injected = new THashSet();
for (PsiElement element : elements) {
- InjectedLanguageUtil.enumerate(element, myFile, false, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
+ InjectedLanguageFacadeImpl.enumerate(element, myFile, false, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
@Override
public void visit(@NotNull PsiFile injectedPsi, @NotNull List places) {
injected.add(injectedPsi);
@@ -416,13 +427,17 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass
});
}
if (injected.isEmpty()) return;
- if (!JobUtil.invokeConcurrentlyUnderProgress(new ArrayList(injected), indicator, myFailFastOnAcquireReadAction, new Processor() {
- @Override
- public boolean process(final PsiFile injectedPsi) {
- doInspectInjectedPsi(injectedPsi, onTheFly, indicator, iManager, inVisibleRange, wrappers, checkDumbAwareness);
- return true;
- }
- })) throw new ProcessCanceledException();
+ if (!JobLauncher.getInstance().invokeConcurrentlyUnderProgress(new ArrayList(injected), indicator,
+ myFailFastOnAcquireReadAction,
+ new Processor() {
+ @Override
+ public boolean process(final PsiFile injectedPsi) {
+ doInspectInjectedPsi(injectedPsi, onTheFly, indicator, iManager,
+ inVisibleRange,
+ wrappers, checkDumbAwareness);
+ return true;
+ }
+ })) throw new ProcessCanceledException();
}
@Nullable
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java
index 8a27bba247ab..eae3cd4269a0 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PassExecutorService.java
@@ -20,7 +20,7 @@ import com.intellij.codeHighlighting.HighlightingPass;
import com.intellij.codeHighlighting.TextEditorHighlightingPass;
import com.intellij.concurrency.Job;
import com.intellij.concurrency.JobImpl;
-import com.intellij.concurrency.JobUtil;
+import com.intellij.concurrency.JobLauncher;
import com.intellij.injected.editor.EditorWindow;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
@@ -271,7 +271,7 @@ public abstract class PassExecutorService implements Disposable {
private void submit(final ScheduledPass pass) {
if (!pass.myUpdateProgress.isCanceled()) {
- Job job = JobUtil.submitToJobThread(pass.myJobPriority, pass, new Consumer() {
+ Job job = JobLauncher.getInstance().submitToJobThread(pass.myJobPriority, pass, new Consumer() {
@Override
public void consume(Future future) {
try {
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PerThreadMap.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PerThreadMap.java
index 74c6e3234e53..edf3a8a0225b 100755
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PerThreadMap.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/PerThreadMap.java
@@ -44,7 +44,9 @@ public abstract class PerThreadMap {
}
};
- private List cloneTemplates(Collection templates) {
+ @SuppressWarnings("unchecked")
+ @NotNull
+ private List cloneTemplates(@NotNull Collection templates) {
List result = new ArrayList(templates.size());
PicoContainer container = ApplicationManager.getApplication().getPicoContainer();
for (T template : templates) {
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java
index 7b1b03ed7228..f01f7dcac22c 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/ShowAutoImportPass.java
@@ -17,16 +17,21 @@
package com.intellij.codeInsight.daemon.impl;
import com.intellij.codeHighlighting.TextEditorHighlightingPass;
+import com.intellij.codeInsight.CodeInsightSettings;
import com.intellij.codeInsight.daemon.DaemonBundle;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzerSettings;
+import com.intellij.codeInsight.daemon.ReferenceImporter;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInspection.HintAction;
+import com.intellij.lang.annotation.HighlightSeverity;
import com.intellij.openapi.actionSystem.ActionManager;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.Editor;
+import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.keymap.KeymapUtil;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
@@ -70,9 +75,10 @@ public class ShowAutoImportPass extends TextEditorHighlightingPass {
Application application = ApplicationManager.getApplication();
application.assertIsDispatchThread();
if (!application.isUnitTestMode() && !myEditor.getContentComponent().hasFocus()) return;
+ int caretOffset = myEditor.getCaretModel().getOffset();
+ importUnambiguousImports(caretOffset);
List visibleHighlights = getVisibleHighlights(myStartOffset, myEndOffset, myProject, myEditor);
- int caretOffset = myEditor.getCaretModel().getOffset();
for (int i = visibleHighlights.size() - 1; i >= 0; i--) {
HighlightInfo info = visibleHighlights.get(i);
if (info.startOffset <= caretOffset && showAddImportHint(info)) return;
@@ -83,6 +89,33 @@ public class ShowAutoImportPass extends TextEditorHighlightingPass {
}
}
+ private void importUnambiguousImports(final int caretOffset) {
+ if (!DaemonCodeAnalyzerSettings.getInstance().isImportHintEnabled()) return;
+ if (!DaemonCodeAnalyzer.getInstance(myProject).isImportHintsEnabled(myFile)) return;
+ if (!CodeInsightSettings.getInstance().ADD_UNAMBIGIOUS_IMPORTS_ON_THE_FLY) return;
+
+ Document document = getDocument();
+ final List infos = new ArrayList();
+ DaemonCodeAnalyzerImpl.processHighlights(document, myProject, null, 0, document.getTextLength(), new Processor() {
+ @Override
+ public boolean process(HighlightInfo info) {
+ if (!info.hasHint() || info.getSeverity() != HighlightSeverity.ERROR) {
+ return true;
+ }
+ if (TextRange.create(info.getActualStartOffset(), info.getActualEndOffset()).containsOffset(caretOffset)) return true;
+ infos.add(info);
+ return true;
+ }
+ });
+
+ ReferenceImporter[] importers = Extensions.getExtensions(ReferenceImporter.EP_NAME);
+ for (HighlightInfo info : infos) {
+ for(ReferenceImporter importer: importers) {
+ if (importer.autoImportReferenceAt(myEditor, myFile, info.getActualStartOffset())) break;
+ }
+ }
+ }
+
@NotNull
private static List getVisibleHighlights(final int startOffset, final int endOffset, Project project, final Editor editor) {
final List highlights = new ArrayList();
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/QuickFixAction.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/QuickFixAction.java
index 70d351d6092e..bad2d1853659 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/QuickFixAction.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/QuickFixAction.java
@@ -29,7 +29,7 @@ import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
@@ -145,8 +145,8 @@ public final class QuickFixAction {
PsiFile fileToUse;
if (info.fromInjection) {
if (injectedEditor == null) {
- injectedFile = InjectedLanguageUtil.findInjectedPsiNoCommit(file, offset);
- injectedEditor = InjectedLanguageUtil.getInjectedEditorForInjectedFile(editor, injectedFile);
+ injectedFile = InjectedLanguageFacadeImpl.findInjectedPsiNoCommit(file, offset);
+ injectedEditor = InjectedLanguageFacadeImpl.getInjectedEditorForInjectedFile(editor, injectedFile);
}
editorToUse = injectedEditor;
fileToUse = injectedFile;
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DockablePopupManager.java b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DockablePopupManager.java
index fbe3f1ab5c55..d1ae61a6bcdd 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DockablePopupManager.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DockablePopupManager.java
@@ -32,7 +32,7 @@ import com.intellij.openapi.wm.WindowManager;
import com.intellij.openapi.wm.ex.ToolWindowManagerEx;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.ui.content.*;
import com.intellij.util.ui.update.Activatable;
@@ -174,7 +174,7 @@ public abstract class DockablePopupManager {
final PsiFile file = PsiUtilBase.getPsiFileInEditor(editor, myProject);
- final Editor injectedEditor = InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(editor, file);
+ final Editor injectedEditor = InjectedLanguageFacadeImpl.getEditorForInjectedLanguageNoCommit(editor, file);
if (injectedEditor != null) {
final PsiFile psiFile = PsiUtilBase.getPsiFileInEditor(injectedEditor, myProject);
if (psiFile != null) {
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CompletionAutoPopupHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CompletionAutoPopupHandler.java
index d0a8ae4db1c3..282890eec51a 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CompletionAutoPopupHandler.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/CompletionAutoPopupHandler.java
@@ -31,7 +31,7 @@ import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import org.jetbrains.annotations.NotNull;
/**
@@ -83,16 +83,16 @@ public class CompletionAutoPopupHandler extends TypedHandlerDelegate {
if (editor.isDisposed()) return;
// retrieve the injected file from scratch since our typing might have destroyed the old one completely
- Editor topLevelEditor = InjectedLanguageUtil.getTopLevelEditor(editor);
+ Editor topLevelEditor = InjectedLanguageFacadeImpl.getTopLevelEditor(editor);
PsiFile file = PsiDocumentManager.getInstance(project).getPsiFile(topLevelEditor.getDocument());
if (file == null) return;
- PsiFile topLevelFile = InjectedLanguageUtil.getTopLevelFile(file);
+ PsiFile topLevelFile = InjectedLanguageFacadeImpl.getTopLevelFile(file);
if (!PsiDocumentManager.getInstance(project).isCommitted(editor.getDocument())) {
LOG.error("Non-committed document");
PsiDocumentManager.getInstance(project).commitAllDocuments();
}
- Editor newEditor = InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(topLevelEditor, topLevelFile);
+ Editor newEditor = InjectedLanguageFacadeImpl.getEditorForInjectedLanguageNoCommit(topLevelEditor, topLevelFile);
try {
new CodeCompletionHandlerBase(completionType, false, autopopup, false).invokeCompletion(project, newEditor, time, false);
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/SelectWordHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/SelectWordHandler.java
index 7bc43282dcdc..04b49b51046c 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/SelectWordHandler.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/SelectWordHandler.java
@@ -32,7 +32,7 @@ import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.templateLanguages.OuterLanguageElement;
import com.intellij.util.Processor;
import org.jetbrains.annotations.NotNull;
@@ -52,7 +52,7 @@ public class SelectWordHandler extends EditorActionHandler {
LOG.debug("enter: execute(editor='" + editor + "')");
}
if (editor instanceof EditorWindow && editor.getSelectionModel().hasSelection()
- && InjectedLanguageUtil.isSelectionIsAboutToOverflowInjectedFragment((EditorWindow)editor)) {
+ && InjectedLanguageFacadeImpl.isSelectionIsAboutToOverflowInjectedFragment((EditorWindow)editor)) {
// selection about to spread beyond injected fragment
editor = ((EditorWindow)editor).getDelegate();
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java
index a9261cc8d532..a9f107fd2935 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java
@@ -50,7 +50,7 @@ import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.codeStyle.CodeStyleManager;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
import com.intellij.psi.util.PsiUtilBase;
@@ -270,10 +270,10 @@ public class TypedHandler extends TypedActionHandlerBase {
// even for uncommitted document try to retrieve injected fragment that has been there recently
// we are assuming here that when user is (even furiously) typing, injected language would not change
// and thus we can use its lexer to insert closing braces etc
- for (DocumentWindow documentWindow : InjectedLanguageUtil.getCachedInjectedDocuments(oldFile)) {
+ for (DocumentWindow documentWindow : InjectedLanguageFacadeImpl.getCachedInjectedDocuments(oldFile)) {
if (documentWindow.isValid() && documentWindow.containsRange(offset, offset)) {
PsiFile injectedFile = PsiDocumentManager.getInstance(oldFile.getProject()).getPsiFile(documentWindow);
- final Editor injectedEditor = InjectedLanguageUtil.getInjectedEditorForInjectedFile(editor, injectedFile);
+ final Editor injectedEditor = InjectedLanguageFacadeImpl.getInjectedEditorForInjectedFile(editor, injectedFile);
// IDEA-52375 fix: last quote sign should be handled by outer language quote handler
final CharSequence charsSequence = editor.getDocument().getCharsSequence();
if (injectedEditor.getCaretModel().getOffset() == injectedEditor.getDocument().getTextLength() &&
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java
index 51cf80b83161..e233872ba2d4 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/FoldingUpdate.java
@@ -34,7 +34,7 @@ import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.CachedValueProvider;
import com.intellij.psi.util.CachedValuesManager;
import com.intellij.psi.util.ParameterizedCachedValue;
@@ -151,7 +151,7 @@ public class FoldingUpdate {
Object lastTimeStamp = editor.getUserData(LAST_UPDATE_INJECTED_STAMP_KEY);
if (lastTimeStamp instanceof Long && ((Long)lastTimeStamp).longValue() == timeStamp) return null;
- List injectedDocuments = InjectedLanguageUtil.getCachedInjectedDocuments(file);
+ List injectedDocuments = InjectedLanguageFacadeImpl.getCachedInjectedDocuments(file);
if (injectedDocuments.isEmpty()) return null;
final List injectedEditors = new ArrayList();
final List injectedFiles = new ArrayList();
@@ -159,7 +159,7 @@ public class FoldingUpdate {
for (DocumentWindow injectedDocument : injectedDocuments) {
PsiFile injectedFile = PsiDocumentManager.getInstance(project).getPsiFile(injectedDocument);
if (injectedFile == null || !injectedFile.isValid() || !injectedDocument.isValid()) continue;
- Editor injectedEditor = InjectedLanguageUtil.getInjectedEditorForInjectedFile(editor, injectedFile);
+ Editor injectedEditor = InjectedLanguageFacadeImpl.getInjectedEditorForInjectedFile(editor, injectedFile);
if (!(injectedEditor instanceof EditorWindow)) continue;
injectedEditors.add((EditorWindow)injectedEditor);
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/OffsetsElementSignatureProvider.java b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/OffsetsElementSignatureProvider.java
index f1e78494c8a7..35a75cf476b0 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/OffsetsElementSignatureProvider.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/folding/impl/OffsetsElementSignatureProvider.java
@@ -18,7 +18,7 @@ package com.intellij.codeInsight.folding.impl;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -87,7 +87,7 @@ public class OffsetsElementSignatureProvider extends AbstractElementSignaturePro
}
if (result == null) {
- final PsiElement injectedStartElement = InjectedLanguageUtil.findElementAtNoCommit(file, start);
+ final PsiElement injectedStartElement = InjectedLanguageFacadeImpl.findElementAtNoCommit(file, start);
if (processingInfoStorage != null) {
processingInfoStorage.append(String.format(
"Trying to find injected element starting from the '%s'%s%n",
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/actions/CommentByLineCommentAction.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/actions/CommentByLineCommentAction.java
index 4a7421675b9f..ec447bcdf6a7 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/generation/actions/CommentByLineCommentAction.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/actions/CommentByLineCommentAction.java
@@ -23,8 +23,6 @@ import com.intellij.openapi.fileTypes.impl.AbstractFileType;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.DumbAware;
-import com.intellij.openapi.project.DumbAwareAction;
-import com.intellij.openapi.project.DumbAwareRunnable;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiFile;
import com.intellij.lang.LanguageCommenters;
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java
index 88e8ce92db32..d58ad07377c2 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/BraceHighlightingHandler.java
@@ -27,7 +27,7 @@ package com.intellij.codeInsight.highlighting;
import com.intellij.codeInsight.CodeInsightSettings;
import com.intellij.codeInsight.hint.EditorFragmentComponent;
import com.intellij.concurrency.Job;
-import com.intellij.concurrency.JobUtil;
+import com.intellij.concurrency.JobLauncher;
import com.intellij.injected.editor.EditorWindow;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
@@ -52,7 +52,7 @@ import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.util.Alarm;
@@ -109,7 +109,7 @@ public class BraceHighlightingHandler {
final Project project = editor.getProject();
if (project == null) return;
final int offset = editor.getCaretModel().getOffset();
- JobUtil.submitToJobThread(Job.DEFAULT_PRIORITY, new Runnable() {
+ JobLauncher.getInstance().submitToJobThread(Job.DEFAULT_PRIORITY, new Runnable() {
public void run() {
final PsiFile injected;
try {
@@ -132,11 +132,11 @@ public class BraceHighlightingHandler {
});
throw e;
}
- ApplicationManager.getApplication().invokeLater(new DumbAwareRunnable(){
+ ApplicationManager.getApplication().invokeLater(new DumbAwareRunnable() {
public void run() {
try {
if (!isReallyDisposed(editor, project)) {
- Editor newEditor = InjectedLanguageUtil.getInjectedEditorForInjectedFile(editor, injected);
+ Editor newEditor = InjectedLanguageFacadeImpl.getInjectedEditorForInjectedFile(editor, injected);
BraceHighlightingHandler handler = new BraceHighlightingHandler(project, newEditor, alarm, injected);
processor.process(handler);
}
@@ -161,7 +161,7 @@ public class BraceHighlightingHandler {
Document document = editor.getDocument();
// when document is committed, try to highlight braces in injected lang - it's fast
if (!PsiDocumentManager.getInstance(project).isUncommited(document)) {
- final PsiElement injectedElement = InjectedLanguageUtil.findInjectedElementNoCommit(psiFile, offset);
+ final PsiElement injectedElement = InjectedLanguageFacadeImpl.findInjectedElementNoCommit(psiFile, offset);
if (injectedElement != null /*&& !(injectedElement instanceof PsiWhiteSpace)*/) {
final PsiFile injected = injectedElement.getContainingFile();
if (injected != null) {
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/HighlightManagerImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/HighlightManagerImpl.java
index 255f2353d97e..c0d1376c94cb 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/HighlightManagerImpl.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/HighlightManagerImpl.java
@@ -41,7 +41,7 @@ import com.intellij.openapi.util.UserDataHolderEx;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.containers.HashMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -167,7 +167,7 @@ public class HighlightManagerImpl extends HighlightManager implements ProjectCom
PsiFile containingFile = element.getContainingFile();
Project project = element.getProject();
// each reference can reside in its own injected editor
- Editor textEditor = InjectedLanguageUtil.openEditorFor(containingFile, project);
+ Editor textEditor = InjectedLanguageFacadeImpl.openEditorFor(containingFile, project);
if (textEditor != null) {
addOccurrenceHighlight(textEditor, start, end, attributes, flags, outHighlighters, scrollmarkColor);
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/IntentionListStep.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/IntentionListStep.java
index b5759a2d63a9..d690edf18225 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/IntentionListStep.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/IntentionListStep.java
@@ -36,7 +36,7 @@ import com.intellij.openapi.ui.popup.*;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Iconable;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiUtilBase;
import gnu.trove.THashSet;
import gnu.trove.TObjectHashingStrategy;
@@ -112,7 +112,7 @@ class IntentionListStep implements ListPopupStep
}
else {
hostElement = myFile.getViewProvider().findElementAt(fileOffset, myFile.getLanguage());
- element = InjectedLanguageUtil.findElementAtNoCommit(myFile, fileOffset);
+ element = InjectedLanguageFacadeImpl.findElementAtNoCommit(myFile, fileOffset);
}
PsiFile injectedFile;
Editor injectedEditor;
@@ -122,7 +122,7 @@ class IntentionListStep implements ListPopupStep
}
else {
injectedFile = element.getContainingFile();
- injectedEditor = InjectedLanguageUtil.getInjectedEditorForInjectedFile(myEditor, injectedFile);
+ injectedEditor = InjectedLanguageFacadeImpl.getInjectedEditorForInjectedFile(myEditor, injectedFile);
}
boolean result = true;
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditAction.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditAction.java
index df76329d288b..a109226d8b82 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditAction.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditAction.java
@@ -24,7 +24,7 @@ import com.intellij.openapi.ui.popup.Balloon;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
@@ -58,7 +58,7 @@ public class QuickEditAction implements IntentionAction, LowPriorityAction {
final PsiLanguageInjectionHost host =
PsiTreeUtil.getParentOfType(file.findElementAt(offset), PsiLanguageInjectionHost.class, false);
if (host == null) return null;
- final List> injections = InjectedLanguageUtil.getInjectedPsiFiles(host);
+ final List> injections = InjectedLanguageFacadeImpl.getInstance().getInjectedPsiFiles(host);
if (injections == null || injections.isEmpty()) return null;
final int offsetInElement = offset - host.getTextRange().getStartOffset();
final Pair rangePair = ContainerUtil.find(injections, new Condition>() {
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java
index 1a8b9ba856d2..814bad1e40dd 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/QuickEditHandler.java
@@ -48,7 +48,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.impl.source.resolve.FileContextUtil;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.impl.source.tree.injected.Place;
import com.intellij.testFramework.LightVirtualFile;
import com.intellij.ui.awt.RelativePoint;
@@ -86,7 +86,7 @@ public class QuickEditHandler extends DocumentAdapter implements Disposable {
myEditor = editor;
myAction = action;
myOrigDocument = editor.getDocument();
- final Place shreds = InjectedLanguageUtil.getShreds(myInjectedFile);
+ final Place shreds = InjectedLanguageFacadeImpl.getShreds(myInjectedFile);
final FileType fileType = injectedFile.getFileType();
final Language language = injectedFile.getLanguage();
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/ShowIntentionActionsHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/ShowIntentionActionsHandler.java
index b93aeb096594..4421b4d39641 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/ShowIntentionActionsHandler.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/ShowIntentionActionsHandler.java
@@ -40,7 +40,7 @@ import com.intellij.psi.PsiCodeFragment;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.PairProcessor;
import org.jetbrains.annotations.NotNull;
@@ -56,7 +56,7 @@ public class ShowIntentionActionsHandler implements CodeInsightActionHandler {
PsiDocumentManager.getInstance(project).commitAllDocuments();
if (editor instanceof EditorWindow) {
editor = ((EditorWindow)editor).getDelegate();
- file = InjectedLanguageUtil.getTopLevelFile(file);
+ file = InjectedLanguageFacadeImpl.getTopLevelFile(file);
}
final LookupEx lookup = LookupManager.getActiveLookup(editor);
@@ -122,9 +122,9 @@ public class ShowIntentionActionsHandler implements CodeInsightActionHandler {
PsiFile fileToApply = null;
int offset = hostEditor.getCaretModel().getOffset();
- PsiFile injectedFile = InjectedLanguageUtil.findInjectedPsiNoCommit(hostFile, offset);
+ PsiFile injectedFile = InjectedLanguageFacadeImpl.findInjectedPsiNoCommit(hostFile, offset);
if (injectedFile != null) {
- Editor injectedEditor = InjectedLanguageUtil.getInjectedEditorForInjectedFile(hostEditor, injectedFile);
+ Editor injectedEditor = InjectedLanguageFacadeImpl.getInjectedEditorForInjectedFile(hostEditor, injectedFile);
if (predicate.process(injectedFile, injectedEditor)) {
editorToApply = injectedEditor;
fileToApply = injectedFile;
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupManager.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupManager.java
index a1a95fd65e09..cde7df077e25 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupManager.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/LookupManager.java
@@ -19,7 +19,7 @@ package com.intellij.codeInsight.lookup;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.project.Project;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -41,7 +41,7 @@ public abstract class LookupManager {
final LookupEx lookup = getInstance(project).getActiveLookup();
if (lookup == null) return null;
- return InjectedLanguageUtil.getTopLevelEditor(lookup.getEditor()) == InjectedLanguageUtil.getTopLevelEditor(editor) ? lookup : null;
+ return InjectedLanguageFacadeImpl.getTopLevelEditor(lookup.getEditor()) == InjectedLanguageFacadeImpl.getTopLevelEditor(editor) ? lookup : null;
}
@Nullable
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java
index a9010dac1ca5..6ae8ea014d38 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/CtrlMouseHandler.java
@@ -60,7 +60,7 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.Navigatable;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.search.searches.DefinitionsSearch;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.ui.LightweightHint;
@@ -154,7 +154,7 @@ public class CtrlMouseHandler extends AbstractProjectComponent {
Point point = new Point(mouseEvent.getPoint());
if (PsiDocumentManager.getInstance(myProject).isCommitted(editor.getDocument())) {
// when document is committed, try to check injected stuff - it's fast
- editor = InjectedLanguageUtil
+ editor = InjectedLanguageFacadeImpl
.getEditorForInjectedLanguageNoCommit(editor, psiFile, editor.logicalPositionToOffset(editor.xyToLogicalPosition(point)));
}
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/CustomTemplateCallback.java b/platform/lang-impl/src/com/intellij/codeInsight/template/CustomTemplateCallback.java
index 656946038734..925052258b1d 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/template/CustomTemplateCallback.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/template/CustomTemplateCallback.java
@@ -25,7 +25,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -55,11 +55,11 @@ public class CustomTemplateCallback {
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
int offset = getOffset(wrapping, editor);
- PsiElement element = InjectedLanguageUtil.findInjectedElementNoCommit(file, offset);
+ PsiElement element = InjectedLanguageFacadeImpl.findInjectedElementNoCommit(file, offset);
myFile = element != null ? element.getContainingFile() : file;
myInInjectedFragment = InjectedLanguageManager.getInstance(myProject).isInjectedFragment(myFile);
- myEditor = myInInjectedFragment ? InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(editor, file, offset) : editor;
+ myEditor = myInInjectedFragment ? InjectedLanguageFacadeImpl.getEditorForInjectedLanguageNoCommit(editor, file, offset) : editor;
fixInitialState(wrapping);
}
@@ -164,7 +164,7 @@ public class CustomTemplateCallback {
public static PsiElement getContext(@NotNull PsiFile file, int offset) {
PsiElement element = null;
if (!InjectedLanguageManager.getInstance(file.getProject()).isInjectedFragment(file)) {
- element = InjectedLanguageUtil.findInjectedElementNoCommit(file, offset);
+ element = InjectedLanguageFacadeImpl.findInjectedElementNoCommit(file, offset);
}
if (element == null) {
element = file.findElementAt(offset);
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java b/platform/lang-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java
index 04f26ab11815..2f2bb9a22488 100644
--- a/platform/lang-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java
+++ b/platform/lang-impl/src/com/intellij/codeInsight/template/TemplateBuilderImpl.java
@@ -32,7 +32,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiReference;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull;
@@ -60,7 +60,7 @@ public class TemplateBuilderImpl implements TemplateBuilder {
private static final Logger LOG = Logger.getInstance("#" + TemplateBuilderImpl.class.getName());
public TemplateBuilderImpl(@NotNull PsiElement element) {
- myFile = InjectedLanguageUtil.getTopLevelFile(element);
+ myFile = InjectedLanguageFacadeImpl.getTopLevelFile(element);
myDocument = myFile.getViewProvider().getDocument();
myContainerElement = wrapElement(element);
}
@@ -268,10 +268,17 @@ public class TemplateBuilderImpl implements TemplateBuilder {
public void run() {
final Project project = myFile.getProject();
VirtualFile file = myFile.getVirtualFile();
+ assert file != null;
OpenFileDescriptor descriptor = new OpenFileDescriptor(project, file);
final Editor editor = FileEditorManager.getInstance(project).openTextEditor(descriptor, true);
- final Template template = buildTemplate();
+ assert editor != null : "Editor is null";
+ run(editor, false);
+ }
+
+ @Override
+ public void run(@NotNull final Editor editor, final boolean inline) {
+ final Template template = inline ? buildInlineTemplate() : buildTemplate();
editor.getDocument().replaceString(myContainerElement.getStartOffset(), myContainerElement.getEndOffset(), "");
editor.getCaretModel().moveToOffset(myContainerElement.getStartOffset());
diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java
index 87e76ffe3409..9bfe60f7b633 100644
--- a/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java
+++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/GlobalInspectionContextImpl.java
@@ -25,7 +25,7 @@ import com.intellij.codeInspection.lang.GlobalInspectionContextExtension;
import com.intellij.codeInspection.lang.InspectionExtensionsFactory;
import com.intellij.codeInspection.reference.*;
import com.intellij.codeInspection.ui.InspectionResultsView;
-import com.intellij.concurrency.JobUtil;
+import com.intellij.concurrency.JobLauncher;
import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.notification.NotificationGroup;
import com.intellij.openapi.actionSystem.ToggleAction;
@@ -601,19 +601,19 @@ public class GlobalInspectionContextImpl extends UserDataHolderBase implements G
}
pass.doInspectInBatch((InspectionManagerEx)manager, lTools);
- JobUtil.invokeConcurrentlyUnderProgress(globalSimpleTools, myProgressIndicator, false, new Processor() {
- @Override
- public boolean process(Tools tools) {
- GlobalInspectionToolWrapper toolWrapper = (GlobalInspectionToolWrapper)tools.getTool();
- GlobalSimpleInspectionTool tool = (GlobalSimpleInspectionTool)toolWrapper.getTool();
- ProblemsHolder problemsHolder = new ProblemsHolder(manager, file, false);
- GlobalInspectionToolWrapper problemDescriptionProcessor = getProblemDescriptionProcessor(toolWrapper, map);
- tool.checkFile(file, manager, problemsHolder, GlobalInspectionContextImpl.this, problemDescriptionProcessor);
- LocalInspectionToolWrapper.addProblemDescriptors(problemsHolder.getResults(), false, GlobalInspectionContextImpl.this, null,
- CONVERT, toolWrapper);
- return true;
- }
- });
+ JobLauncher.getInstance().invokeConcurrentlyUnderProgress(globalSimpleTools, myProgressIndicator, false, new Processor() {
+ @Override
+ public boolean process(Tools tools) {
+ GlobalInspectionToolWrapper toolWrapper = (GlobalInspectionToolWrapper)tools.getTool();
+ GlobalSimpleInspectionTool tool = (GlobalSimpleInspectionTool)toolWrapper.getTool();
+ ProblemsHolder problemsHolder = new ProblemsHolder(manager, file, false);
+ GlobalInspectionToolWrapper problemDescriptionProcessor = getProblemDescriptionProcessor(toolWrapper, map);
+ tool.checkFile(file, manager, problemsHolder, GlobalInspectionContextImpl.this, problemDescriptionProcessor);
+ LocalInspectionToolWrapper.addProblemDescriptors(problemsHolder.getResults(), false, GlobalInspectionContextImpl.this, null,
+ CONVERT, toolWrapper);
+ return true;
+ }
+ });
}
catch (ProcessCanceledException e) {
throw e;
diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/ProblemDescriptorImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/ProblemDescriptorImpl.java
index 86798bb39e6e..85d9534bf46d 100644
--- a/platform/lang-impl/src/com/intellij/codeInspection/ex/ProblemDescriptorImpl.java
+++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/ProblemDescriptorImpl.java
@@ -26,7 +26,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.pom.Navigatable;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -142,7 +142,7 @@ public class ProblemDescriptorImpl extends CommonProblemDescriptorImpl implement
if (psiElement == null) return -1;
if (!psiElement.isValid()) return -1;
LOG.assertTrue(psiElement.isPhysical());
- PsiFile containingFile = InjectedLanguageUtil.getTopLevelFile(psiElement);
+ PsiFile containingFile = InjectedLanguageFacadeImpl.getTopLevelFile(psiElement);
Document document = PsiDocumentManager.getInstance(psiElement.getProject()).getDocument(containingFile);
if (document == null) return -1;
TextRange textRange = getTextRange();
diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java
index c61e184c4209..b8b9d35a008d 100644
--- a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java
+++ b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java
@@ -344,7 +344,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
@Override
public void scrollTo(final int offset) {
- if (myEditor == null) return;
+ if (myEditor == null || myFlushAlarm.isDisposed()) return;
class ScrollRunnable extends MyFlushRunnable {
private int myOffset = offset;
public void doRun() {
@@ -367,7 +367,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
}
public void requestScrollingToEnd() {
- if (myEditor == null) return;
+ if (myEditor == null || myFlushAlarm.isDisposed()) return;
final MyFlushRunnable scrollRunnable = new MyFlushRunnable() {
@Override
public void doRun() {
@@ -556,7 +556,7 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
}
private void requestFlushImmediately() {
- if (myEditor != null) {
+ if (myEditor != null && !myFlushAlarm.isDisposed()) {
addFlushRequest(new MyFlushRunnable());
}
}
diff --git a/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java b/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java
index f522efea13fc..4257468f1d77 100644
--- a/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java
+++ b/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java
@@ -180,7 +180,7 @@ public class ShowUsagesAction extends AnAction implements PopupAction {
private void startFindUsages(@NotNull PsiElement element, RelativePoint popupPosition, Editor editor, int maxUsages) {
Project project = element.getProject();
FindUsagesManager findUsagesManager = ((FindManagerImpl)FindManager.getInstance(project)).getFindUsagesManager();
- FindUsagesHandler handler = findUsagesManager.getFindUsagesHandler(element, false);
+ FindUsagesHandler handler = findUsagesManager.getNewFindUsagesHandler(element, false);
if (handler == null) return;
if (showSettingsDialogBefore) {
showDialogAndFindUsages(handler, popupPosition, editor, maxUsages);
@@ -279,6 +279,7 @@ public class ShowUsagesAction extends AnAction implements PopupAction {
@Override
public void addNotify() {
mySearchEverywhereRunnable = new Runnable() {
+ @Override
public void run() {
searchEverywhere(options, handler, editor, popupPosition, maxUsages);
}
diff --git a/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java b/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java
index 6c43f9915857..8d535cb4505a 100644
--- a/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java
+++ b/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java
@@ -46,8 +46,11 @@ import com.intellij.openapi.util.*;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.StatusBar;
import com.intellij.psi.*;
-import com.intellij.psi.search.*;
-import com.intellij.psi.util.PsiUtilBase;
+import com.intellij.psi.search.LocalSearchScope;
+import com.intellij.psi.search.PsiSearchHelper;
+import com.intellij.psi.search.SearchRequestCollector;
+import com.intellij.psi.search.SearchSession;
+import com.intellij.psi.util.PsiUtilCore;
import com.intellij.ui.LightweightHint;
import com.intellij.ui.content.Content;
import com.intellij.usageView.UsageInfo;
@@ -62,6 +65,7 @@ import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.picocontainer.defaults.ConstructorInjectionComponentAdapter;
import javax.swing.*;
import java.util.ArrayList;
@@ -195,7 +199,7 @@ public class FindUsagesManager implements JDOMExternalizable {
return PsiElement.EMPTY_ARRAY;
}
- return PsiUtilBase.toPsiElementArray(elements);
+ return PsiUtilCore.toPsiElementArray(elements);
}
private void initLastSearchElement(final FindUsagesOptions findUsagesOptions,
@@ -229,6 +233,22 @@ public class FindUsagesManager implements JDOMExternalizable {
return null;
}
+ @Nullable
+ public FindUsagesHandler getNewFindUsagesHandler(PsiElement element, final boolean forHighlightUsages) {
+ for (FindUsagesHandlerFactory factory : Extensions.getExtensions(FindUsagesHandlerFactory.EP_NAME, myProject)) {
+ if (factory.canFindUsages(element)) {
+ Class extends FindUsagesHandlerFactory> aClass = factory.getClass();
+ FindUsagesHandlerFactory copy = (FindUsagesHandlerFactory)new ConstructorInjectionComponentAdapter(aClass.getName(), aClass).getComponentInstance(myProject.getPicoContainer());
+ final FindUsagesHandler handler = copy.createFindUsagesHandler(element, forHighlightUsages);
+ if (handler == FindUsagesHandler.NULL_HANDLER) return null;
+ if (handler != null) {
+ return handler;
+ }
+ }
+ }
+ return null;
+ }
+
public void findUsages(@NotNull PsiElement psiElement, final PsiFile scopeFile, final FileEditor editor) {
final FindUsagesHandler handler = getFindUsagesHandler(psiElement, false);
if (handler == null) return;
@@ -449,11 +469,11 @@ public class FindUsagesManager implements JDOMExternalizable {
String usagesString = generateUsagesString(findUsagesOptions);
presentation.setUsagesString(usagesString);
String title;
- if (scopeString != null) {
- title = FindBundle.message("find.usages.of.element.in.scope.panel.title", usagesString, UsageViewUtil.getLongName(psiElement), scopeString);
+ if (scopeString == null) {
+ title = FindBundle.message("find.usages.of.element.panel.title", usagesString, UsageViewUtil.getLongName(psiElement));
}
else {
- title = FindBundle.message("find.usages.of.element.panel.title", usagesString, UsageViewUtil.getLongName(psiElement));
+ title = FindBundle.message("find.usages.of.element.in.scope.panel.title", usagesString, UsageViewUtil.getLongName(psiElement), scopeString);
}
presentation.setTabText(title);
presentation.setTabName(FindBundle.message("find.usages.of.element.tab.name", usagesString, UsageViewUtil.getShortName(psiElement)));
@@ -477,7 +497,7 @@ public class FindUsagesManager implements JDOMExternalizable {
final UsageSearcher usageSearcher = createUsageSearcher(descriptor, handler, findUsagesOptions, scopeFile);
final boolean[] usagesWereFound = {false};
- Usage fUsage = findSiblingUsage(myProject, usageSearcher, direction, currentLocation, usagesWereFound, fileEditor);
+ Usage fUsage = findSiblingUsage(usageSearcher, direction, currentLocation, usagesWereFound, fileEditor);
if (fUsage != null) {
fUsage.navigate(true);
@@ -508,21 +528,20 @@ public class FindUsagesManager implements JDOMExternalizable {
if (direction == FileSearchScope.AFTER_CARET) {
AnAction action = ActionManager.getInstance().getAction(IdeActions.ACTION_FIND_NEXT);
String shortcutsText = KeymapUtil.getFirstKeyboardShortcutText(action);
- if (shortcutsText.length() > 0) {
- message = FindBundle.message("find.search.again.from.top.hotkey.message", message, shortcutsText);
+ if (shortcutsText.isEmpty()) {
+ message = FindBundle.message("find.search.again.from.top.action.message", message);
}
else {
- message = FindBundle.message("find.search.again.from.top.action.message", message);
+ message = FindBundle.message("find.search.again.from.top.hotkey.message", message, shortcutsText);
}
}
else {
- String shortcutsText =
- KeymapUtil.getFirstKeyboardShortcutText(ActionManager.getInstance().getAction(IdeActions.ACTION_FIND_PREVIOUS));
- if (shortcutsText.length() > 0) {
- message = FindBundle.message("find.search.again.from.bottom.hotkey.message", message, shortcutsText);
+ String shortcutsText = KeymapUtil.getFirstKeyboardShortcutText(ActionManager.getInstance().getAction(IdeActions.ACTION_FIND_PREVIOUS));
+ if (shortcutsText.isEmpty()) {
+ message = FindBundle.message("find.search.again.from.bottom.action.message", message);
}
else {
- message = FindBundle.message("find.search.again.from.bottom.action.message", message);
+ message = FindBundle.message("find.search.again.from.bottom.hotkey.message", message, shortcutsText);
}
}
return message;
@@ -538,12 +557,11 @@ public class FindUsagesManager implements JDOMExternalizable {
}
}
- private static Usage findSiblingUsage(@NotNull final Project project,
- @NotNull final UsageSearcher usageSearcher,
- FileSearchScope dir,
- final FileEditorLocation currentLocation,
- @NotNull final boolean[] usagesWereFound,
- @NotNull FileEditor fileEditor) {
+ private static Usage findSiblingUsage(@NotNull final UsageSearcher usageSearcher,
+ FileSearchScope dir,
+ final FileEditorLocation currentLocation,
+ @NotNull final boolean[] usagesWereFound,
+ @NotNull FileEditor fileEditor) {
if (fileEditor.getUserData(KEY_START_USAGE_AGAIN) != null) {
dir = dir == FileSearchScope.AFTER_CARET ? FileSearchScope.FROM_START : FileSearchScope.FROM_END;
}
@@ -561,7 +579,7 @@ public class FindUsagesManager implements JDOMExternalizable {
foundUsage[0] = usage;
return false;
}
- else if (direction == FileSearchScope.FROM_END) {
+ if (direction == FileSearchScope.FROM_END) {
foundUsage[0] = usage;
}
else if (direction == FileSearchScope.AFTER_CARET) {
diff --git a/platform/lang-impl/src/com/intellij/find/findUsages/PsiElement2UsageTargetAdapter.java b/platform/lang-impl/src/com/intellij/find/findUsages/PsiElement2UsageTargetAdapter.java
index fae0f9ee875a..146d03a1a1d9 100644
--- a/platform/lang-impl/src/com/intellij/find/findUsages/PsiElement2UsageTargetAdapter.java
+++ b/platform/lang-impl/src/com/intellij/find/findUsages/PsiElement2UsageTargetAdapter.java
@@ -29,7 +29,7 @@ import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileEditor;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.meta.PsiMetaData;
import com.intellij.psi.meta.PsiMetaOwner;
import com.intellij.psi.meta.PsiPresentableMetaData;
@@ -131,7 +131,7 @@ public class PsiElement2UsageTargetAdapter implements PsiElementUsageTarget, Typ
Collection refs;
// in case of injected file, use host file to highlight all occurrences of the target in each injected file
- PsiFile context = InjectedLanguageUtil.getTopLevelFile(file);
+ PsiFile context = InjectedLanguageFacadeImpl.getTopLevelFile(file);
SearchScope searchScope = new LocalSearchScope(context);
if (handler != null) {
refs = handler.findReferencesToHighlight(target, searchScope);
diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java
index 175b8c97bfca..a5445696ec3f 100644
--- a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java
+++ b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java
@@ -242,6 +242,7 @@ public class FindInProjectUtil {
}
if (progress != null) {
+ progress.checkCanceled();
progress.setFraction((double)index / psiFiles.size());
String text = FindBundle.message("find.searching.for.string.in.file.progress",
findModel.getStringToFind(), virtualFile.getPresentableUrl());
@@ -298,7 +299,7 @@ public class FindInProjectUtil {
// fine
}
- if (progress != null) {
+ if (progress != null && !progress.isCanceled()) {
progress.setText(FindBundle.message("find.progress.search.completed"));
}
}
@@ -366,7 +367,9 @@ public class FindInProjectUtil {
}
@NotNull
- private static Collection getFilesToSearchIn(@NotNull final FindModel findModel, @NotNull final Project project, final PsiDirectory psiDirectory) {
+ private static Collection getFilesToSearchIn(@NotNull final FindModel findModel,
+ @NotNull final Project project,
+ final PsiDirectory psiDirectory) {
return ApplicationManager.getApplication().runReadAction(new Computable>() {
@Override
public Collection compute() {
@@ -376,7 +379,9 @@ public class FindInProjectUtil {
}
@NotNull
- private static Collection getFilesToSearchInReadAction(@NotNull final FindModel findModel, @NotNull final Project project, @Nullable final PsiDirectory psiDirectory) {
+ private static Collection getFilesToSearchInReadAction(@NotNull final FindModel findModel,
+ @NotNull final Project project,
+ @Nullable final PsiDirectory psiDirectory) {
String moduleName = findModel.getModuleName();
Module module = moduleName == null ? null : ModuleManager.getInstance(project).findModuleByName(moduleName);
final FileIndex fileIndex = module == null ?
@@ -399,6 +404,7 @@ public class FindInProjectUtil {
@Override
public boolean processFile(@NotNull VirtualFile virtualFile) {
+ ProgressManager.checkCanceled();
if (!virtualFile.isDirectory() &&
(fileMaskRegExp == null || fileMaskRegExp.matcher(virtualFile.getName()).matches()) &&
(customScope == null || customScope.contains(virtualFile))) {
@@ -415,7 +421,7 @@ public class FindInProjectUtil {
return myFiles;
}
}
- final EnumContentIterator iterator = new EnumContentIterator();
+ EnumContentIterator iterator = new EnumContentIterator();
if (psiDirectory == null) {
boolean success = fileIndex.iterateContent(iterator);
@@ -430,18 +436,12 @@ public class FindInProjectUtil {
}
return iterator.getFiles();
}
- else if (psiDirectory.isValid()) {
+ if (psiDirectory.isValid()) {
Collection fileList = new THashSet();
-
- addFilesUnderDirectory(psiDirectory,
- fileList,
- findModel.isWithSubdirectories(),
- createFileMaskRegExp(findModel));
+ addFilesUnderDirectory(psiDirectory, fileList, findModel.isWithSubdirectories(), createFileMaskRegExp(findModel));
return fileList;
}
- else {
- return Collections.emptyList();
- }
+ return Collections.emptyList();
}
private static boolean iterateAll(@NotNull VirtualFile[] files, @NotNull final GlobalSearchScope searchScope, @NotNull final ContentIterator iterator) {
diff --git a/platform/lang-impl/src/com/intellij/ide/todo/TodoFilter.java b/platform/lang-impl/src/com/intellij/ide/todo/TodoFilter.java
index b8e596004f23..e34acf5b0d8a 100644
--- a/platform/lang-impl/src/com/intellij/ide/todo/TodoFilter.java
+++ b/platform/lang-impl/src/com/intellij/ide/todo/TodoFilter.java
@@ -18,7 +18,7 @@ package com.intellij.ide.todo;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.search.PsiSearchHelper;
+import com.intellij.psi.search.PsiTodoSearchHelper;
import com.intellij.psi.search.TodoPattern;
import org.jdom.Element;
import org.jetbrains.annotations.NonNls;
@@ -52,7 +52,7 @@ public class TodoFilter implements Cloneable{
* @return true if and only if specified psiFile has
* TodoItems accepted by the filter.
*/
- public boolean accept(PsiSearchHelper searchHelper,PsiFile psiFile){
+ public boolean accept(PsiTodoSearchHelper searchHelper,PsiFile psiFile){
for(Iterator i=iterator();i.hasNext();){
TodoPattern todoPattern= i.next();
if(searchHelper.getTodoItemsCount(psiFile,todoPattern)>0){
diff --git a/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeBuilder.java b/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeBuilder.java
index fa524d04a5bc..893d69a8d795 100644
--- a/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeBuilder.java
+++ b/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeBuilder.java
@@ -42,7 +42,7 @@ import com.intellij.openapi.vcs.FileStatusListener;
import com.intellij.openapi.vcs.FileStatusManager;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
-import com.intellij.psi.search.PsiSearchHelper;
+import com.intellij.psi.search.PsiTodoSearchHelper;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.usageView.UsageTreeColorsScheme;
import com.intellij.util.containers.HashMap;
@@ -77,7 +77,7 @@ public abstract class TodoTreeBuilder extends AbstractTreeBuilder {
protected final HashMap myFile2Highlighter;
- protected final PsiSearchHelper mySearchHelper;
+ protected final PsiTodoSearchHelper mySearchHelper;
/**
* If this flag is false then the updateTree() method does nothing. But when
* the flag becomes true and myDirtyFileSet isn't empty the update is invoked.
@@ -99,7 +99,7 @@ public abstract class TodoTreeBuilder extends AbstractTreeBuilder {
myFile2Highlighter = new HashMap();
PsiManager psiManager = PsiManager.getInstance(myProject);
- mySearchHelper = PsiSearchHelper.SERVICE.getInstance(myProject);
+ mySearchHelper = PsiTodoSearchHelper.SERVICE.getInstance(myProject);
psiManager.addPsiTreeChangeListener(new MyPsiTreeChangeListener());
myFileStatusListener = new MyFileStatusListener();
diff --git a/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeStructure.java b/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeStructure.java
index 03a550b848a3..67687fc6da10 100644
--- a/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeStructure.java
+++ b/platform/lang-impl/src/com/intellij/ide/todo/TodoTreeStructure.java
@@ -23,7 +23,6 @@ import com.intellij.ide.util.treeView.NodeDescriptor;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.search.PsiSearchHelper;
import com.intellij.psi.search.PsiTodoSearchHelper;
import com.intellij.psi.search.TodoPattern;
@@ -44,7 +43,7 @@ public abstract class TodoTreeStructure extends AbstractTreeStructureBase implem
private boolean myAreModulesShown;
- protected final PsiSearchHelper mySearchHelper;
+ protected final PsiTodoSearchHelper mySearchHelper;
/**
* Current TodoFilter. If no filter is set then this field is null.
*/
@@ -54,7 +53,7 @@ public abstract class TodoTreeStructure extends AbstractTreeStructureBase implem
super(project);
myArePackagesShown=true;
mySummaryElement=new ToDoSummary();
- mySearchHelper= PsiSearchHelper.SERVICE.getInstance(project);
+ mySearchHelper= PsiTodoSearchHelper.SERVICE.getInstance(project);
}
final void setTreeBuilder(TodoTreeBuilder builder){
diff --git a/platform/lang-impl/src/com/intellij/ide/todo/nodes/TodoFileNode.java b/platform/lang-impl/src/com/intellij/ide/todo/nodes/TodoFileNode.java
index 89be7f2eca84..6a629737c801 100644
--- a/platform/lang-impl/src/com/intellij/ide/todo/nodes/TodoFileNode.java
+++ b/platform/lang-impl/src/com/intellij/ide/todo/nodes/TodoFileNode.java
@@ -31,7 +31,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import com.intellij.psi.impl.search.TodoItemImpl;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.search.PsiTodoSearchHelper;
import com.intellij.psi.search.TodoItem;
import com.intellij.ui.HighlightedRegion;
@@ -102,13 +102,13 @@ public final class TodoFileNode extends PsiFileNode implements HighlightedRegion
@Override
public void visitElement(PsiElement element) {
if (element instanceof PsiLanguageInjectionHost) {
- InjectedLanguageUtil.enumerate(element, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
+ InjectedLanguageFacadeImpl.enumerate(element, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
@Override
public void visit(@NotNull PsiFile injectedPsi, @NotNull List places) {
if (places.size() == 1) {
Document document = PsiDocumentManager.getInstance(injectedPsi.getProject()).getCachedDocument(injectedPsi);
if (!(document instanceof DocumentWindow)) return;
- for(TodoItem item: helper.findTodoItems(injectedPsi)) {
+ for (TodoItem item : helper.findTodoItems(injectedPsi)) {
TextRange rangeInHost = ((DocumentWindow)document).injectedToHost(item.getTextRange());
todoItems.add(new TodoItemImpl(psiFile, rangeInHost.getStartOffset(), rangeInHost.getEndOffset(), item.getPattern()));
}
diff --git a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java
index 01eda277a3cf..c205510199ac 100644
--- a/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java
+++ b/platform/lang-impl/src/com/intellij/ide/util/gotoByName/ContributorsBasedGotoByModel.java
@@ -15,7 +15,7 @@
*/
package com.intellij.ide.util.gotoByName;
-import com.intellij.concurrency.JobUtil;
+import com.intellij.concurrency.JobLauncher;
import com.intellij.diagnostic.PluginException;
import com.intellij.ide.plugins.PluginManager;
import com.intellij.ide.util.NavigationItemListCellRenderer;
@@ -32,7 +32,6 @@ import com.intellij.util.ArrayUtil;
import com.intellij.util.Processor;
import com.intellij.util.containers.ConcurrentHashSet;
import com.intellij.util.containers.ContainerUtil;
-import com.intellij.util.ui.UIUtil;
import javax.swing.*;
import java.awt.*;
@@ -66,26 +65,27 @@ public abstract class ContributorsBasedGotoByModel implements ChooseByNameModel
public String[] getNames(final boolean checkBoxState) {
final Set names = new ConcurrentHashSet();
- JobUtil.invokeConcurrentlyUnderProgress(filterDumb(myContributors), ProgressManager.getInstance().getProgressIndicator(), false, new Processor() {
- @Override
- public boolean process(ChooseByNameContributor contributor) {
- try {
- if (!myProject.isDisposed()) {
- ContainerUtil.addAll(names, contributor.getNames(myProject, checkBoxState));
- }
- }
- catch (ProcessCanceledException ex) {
- // index corruption detected, ignore
- }
- catch (IndexNotReadyException ex) {
- // index corruption detected, ignore
- }
- catch (Exception ex) {
- LOG.error(ex);
- }
- return true;
- }
- });
+ JobLauncher.getInstance().invokeConcurrentlyUnderProgress(filterDumb(myContributors), ProgressManager.getInstance().getProgressIndicator(), false,
+ new Processor() {
+ @Override
+ public boolean process(ChooseByNameContributor contributor) {
+ try {
+ if (!myProject.isDisposed()) {
+ ContainerUtil.addAll(names, contributor.getNames(myProject, checkBoxState));
+ }
+ }
+ catch (ProcessCanceledException ex) {
+ // index corruption detected, ignore
+ }
+ catch (IndexNotReadyException ex) {
+ // index corruption detected, ignore
+ }
+ catch (Exception ex) {
+ LOG.error(ex);
+ }
+ return true;
+ }
+ });
return ArrayUtil.toStringArray(names);
}
@@ -115,36 +115,40 @@ public abstract class ContributorsBasedGotoByModel implements ChooseByNameModel
public Object[] getElementsByName(final String name, final boolean checkBoxState, final String pattern) {
final List items = Collections.synchronizedList(new ArrayList());
- JobUtil.invokeConcurrentlyUnderProgress(filterDumb(myContributors), ProgressManager.getInstance().getProgressIndicator(), false, new Processor() {
- @Override
- public boolean process(ChooseByNameContributor contributor) {
- try {
- for (NavigationItem item : contributor.getItemsByName(name, pattern, myProject, checkBoxState)) {
- if (item == null) {
- final PluginId pluginId = PluginManager.getPluginByClassName(contributor.getClass().getName());
- if (pluginId != null) {
- LOG.error(new PluginException("null item from contributor " + contributor + " for name " + name, pluginId));
- }
- else {
- LOG.error("null item from contributor " + contributor + " for name " + name);
- }
- continue;
- }
+ JobLauncher.getInstance().invokeConcurrentlyUnderProgress(filterDumb(myContributors), ProgressManager.getInstance().getProgressIndicator(), false,
+ new Processor() {
+ @Override
+ public boolean process(ChooseByNameContributor contributor) {
+ try {
+ for (NavigationItem item : contributor
+ .getItemsByName(name, pattern, myProject, checkBoxState)) {
+ if (item == null) {
+ final PluginId pluginId =
+ PluginManager.getPluginByClassName(contributor.getClass().getName());
+ if (pluginId != null) {
+ LOG.error(new PluginException(
+ "null item from contributor " + contributor + " for name " + name, pluginId));
+ }
+ else {
+ LOG.error("null item from contributor " + contributor + " for name " + name);
+ }
+ continue;
+ }
- if (acceptItem(item)) {
- items.add(item);
- }
- }
- }
- catch (ProcessCanceledException ex) {
- // index corruption detected, ignore
- }
- catch (Exception ex) {
- LOG.error(ex);
- }
- return true;
- }
- });
+ if (acceptItem(item)) {
+ items.add(item);
+ }
+ }
+ }
+ catch (ProcessCanceledException ex) {
+ // index corruption detected, ignore
+ }
+ catch (Exception ex) {
+ LOG.error(ex);
+ }
+ return true;
+ }
+ });
return ArrayUtil.toObjectArray(items);
}
diff --git a/platform/lang-impl/src/com/intellij/injected/editor/EditorWindow.java b/platform/lang-impl/src/com/intellij/injected/editor/EditorWindow.java
index 46341c274783..ff69f00bccb2 100644
--- a/platform/lang-impl/src/com/intellij/injected/editor/EditorWindow.java
+++ b/platform/lang-impl/src/com/intellij/injected/editor/EditorWindow.java
@@ -43,7 +43,7 @@ import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.containers.WeakList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -113,7 +113,7 @@ public class EditorWindow extends UserDataHolderBase implements EditorEx {
if (!editorWindow.isValid()) {
editorWindow.dispose();
- InjectedLanguageUtil.clearCaches(editorWindow.myInjectedFile, editorWindow.getDocument());
+ InjectedLanguageFacadeImpl.clearCaches(editorWindow.myInjectedFile, editorWindow.getDocument());
iterator.remove();
}
}
diff --git a/platform/lang-impl/src/com/intellij/internal/psiView/PsiViewerDialog.java b/platform/lang-impl/src/com/intellij/internal/psiView/PsiViewerDialog.java
index d1de1c60312c..0556784022bc 100644
--- a/platform/lang-impl/src/com/intellij/internal/psiView/PsiViewerDialog.java
+++ b/platform/lang-impl/src/com/intellij/internal/psiView/PsiViewerDialog.java
@@ -23,6 +23,7 @@ import com.intellij.formatting.ASTBlock;
import com.intellij.formatting.Block;
import com.intellij.formatting.FormattingModel;
import com.intellij.formatting.FormattingModelBuilder;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.ui.ListCellRendererWrapper;
import com.intellij.ide.util.treeView.AbstractTreeStructure;
import com.intellij.ide.util.treeView.NodeRenderer;
@@ -69,7 +70,6 @@ import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.impl.DebugUtil;
import com.intellij.psi.impl.source.resolve.FileContextUtil;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
import com.intellij.psi.search.FilenameIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.testFramework.LightVirtualFile;
@@ -821,7 +821,8 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
}
if (currentElem == null) {
currentElem =
- InjectedLanguageUtil.findElementAtNoCommit(psiEl.getContainingFile(), rootBlockNode.getBlock().getTextRange().getStartOffset());
+ InjectedLanguageFacadeImpl
+ .findElementAtNoCommit(psiEl.getContainingFile(), rootBlockNode.getBlock().getTextRange().getStartOffset());
}
myPsiToBlockMap.put(currentElem, rootBlockNode);
@@ -979,7 +980,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
BlockTreeNode descriptor = (BlockTreeNode)blockElementsSet.iterator().next();
PsiElement rootPsi = ((ViewerTreeStructure)myPsiTreeBuilder.getTreeStructure()).getRootPsiElement();
int blockStart = descriptor.getBlock().getTextRange().getStartOffset();
- PsiElement currentPsiEl = InjectedLanguageUtil.findElementAtNoCommit(rootPsi.getContainingFile(), blockStart);
+ PsiElement currentPsiEl = InjectedLanguageFacadeImpl.findElementAtNoCommit(rootPsi.getContainingFile(), blockStart);
int blockLength = descriptor.getBlock().getTextRange().getLength();
while (currentPsiEl.getParent() != null &&
currentPsiEl.getTextRange().getStartOffset() == blockStart &&
@@ -1236,7 +1237,7 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
final PsiElement rootElement = ((ViewerTreeStructure)myPsiTreeBuilder.getTreeStructure()).getRootPsiElement();
int baseOffset = rootPsiElement.getTextRange().getStartOffset();
final int offset = myEditor.getCaretModel().getOffset() + baseOffset;
- final PsiElement element = InjectedLanguageUtil.findElementAtNoCommit(rootElement.getContainingFile(), offset);
+ final PsiElement element = InjectedLanguageFacadeImpl.findElementAtNoCommit(rootElement.getContainingFile(), offset);
if (element != null && myBlockTreeBuilder != null) {
TextRange rangeInHostFile = InjectedLanguageManager.getInstance(myProject).injectedToHost(element, element.getTextRange());
selectBlockNode(findBlockNode(rangeInHostFile, true));
@@ -1257,8 +1258,8 @@ public class PsiViewerDialog extends DialogWrapper implements DataProvider, Disp
final int start = selection.getSelectionStart()+baseOffset;
final int end = selection.getSelectionEnd()+baseOffset - 1;
final PsiElement element =
- findCommonParent(InjectedLanguageUtil.findElementAtNoCommit(rootElement.getContainingFile(), start),
- InjectedLanguageUtil.findElementAtNoCommit(rootElement.getContainingFile(), end));
+ findCommonParent(InjectedLanguageFacadeImpl.findElementAtNoCommit(rootElement.getContainingFile(), start),
+ InjectedLanguageFacadeImpl.findElementAtNoCommit(rootElement.getContainingFile(), end));
if (element != null && myBlockTreeBuilder != null) {
if (myEditor.getContentComponent().hasFocus()) {
TextRange rangeInHostFile = InjectedLanguageManager.getInstance(myProject).injectedToHost(element, element.getTextRange());
diff --git a/platform/lang-impl/src/com/intellij/internal/psiView/ViewerTreeStructure.java b/platform/lang-impl/src/com/intellij/internal/psiView/ViewerTreeStructure.java
index 48f1e2d4c506..3f037ebdece6 100644
--- a/platform/lang-impl/src/com/intellij/internal/psiView/ViewerTreeStructure.java
+++ b/platform/lang-impl/src/com/intellij/internal/psiView/ViewerTreeStructure.java
@@ -29,7 +29,7 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.NotNull;
@@ -99,7 +99,7 @@ public class ViewerTreeStructure extends AbstractTreeStructure {
}
final PsiElement psi = root.getPsi();
if (psi instanceof PsiLanguageInjectionHost) {
- InjectedLanguageUtil.enumerate(psi, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
+ InjectedLanguageFacadeImpl.enumerate(psi, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
@Override
public void visit(@NotNull PsiFile injectedPsi, @NotNull List places) {
list.add(new Inject(psi, injectedPsi));
diff --git a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/PsiAwareFileEditorManagerImpl.java b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/PsiAwareFileEditorManagerImpl.java
index d5761461754b..e35ddf938039 100644
--- a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/PsiAwareFileEditorManagerImpl.java
+++ b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/PsiAwareFileEditorManagerImpl.java
@@ -27,7 +27,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.problems.WolfTheProblemSolver;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.ui.ColorUtil;
import com.intellij.ui.docking.DockManager;
import org.jetbrains.annotations.NotNull;
@@ -99,7 +99,7 @@ public class PsiAwareFileEditorManagerImpl extends FileEditorManagerImpl {
return editor;
}
- return InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(editor, psiFile);
+ return InjectedLanguageFacadeImpl.getEditorForInjectedLanguageNoCommit(editor, psiFile);
}
/**
diff --git a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorPsiDataProvider.java b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorPsiDataProvider.java
index 0238e016a128..ef799405eea6 100644
--- a/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorPsiDataProvider.java
+++ b/platform/lang-impl/src/com/intellij/openapi/fileEditor/impl/text/TextEditorPsiDataProvider.java
@@ -28,7 +28,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiUtilBase;
import org.jetbrains.annotations.Nullable;
@@ -48,7 +48,7 @@ public class TextEditorPsiDataProvider implements EditorDataProvider {
return e;
}
else {
- return InjectedLanguageUtil.getEditorForInjectedLanguageNoCommit(e, getPsiFile(e, file));
+ return InjectedLanguageFacadeImpl.getEditorForInjectedLanguageNoCommit(e, getPsiFile(e, file));
}
}
if (dataId.equals(injectedId(PSI_ELEMENT.getName()))) {
diff --git a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleImpl.java b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleImpl.java
index dc377069df0a..1fe19548c3e9 100644
--- a/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleImpl.java
+++ b/platform/lang-impl/src/com/intellij/openapi/module/impl/ModuleImpl.java
@@ -33,8 +33,6 @@ import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.module.ModifiableModuleModel;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleComponent;
-import com.intellij.openapi.module.impl.scopes.ModuleWithDependenciesScope;
-import com.intellij.openapi.module.impl.scopes.ModuleWithDependentsScope;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.impl.storage.ClasspathStorage;
import com.intellij.openapi.util.Comparing;
@@ -43,7 +41,6 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.*;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.PathUtil;
-import com.intellij.util.containers.StripedLockIntObjectConcurrentHashMap;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -64,16 +61,12 @@ public class ModuleImpl extends ComponentManagerImpl implements ModuleEx {
@NonNls private static final String OPTION_WORKSPACE = "workspace";
- private final StripedLockIntObjectConcurrentHashMap myScopeCache = new StripedLockIntObjectConcurrentHashMap();
-
- private GlobalSearchScope myModuleWithDependentsScope;
- private GlobalSearchScope myModuleTestsWithDependentsScope;
-
public static final Object MODULE_RENAMING_REQUESTOR = new Object();
private String myName;
private IModuleStore myComponentStore;
+ private final ModuleScopeProvider myModuleScopeProvider;
public ModuleImpl(String filePath, Project project) {
super(project);
@@ -81,8 +74,10 @@ public class ModuleImpl extends ComponentManagerImpl implements ModuleEx {
getPicoContainer().registerComponentInstance(Module.class, this);
myProject = project;
+ myModuleScopeProvider = new ModuleScopeProviderImpl(this);
init(filePath);
+
}
protected void bootstrapPicoContainer() {
@@ -240,71 +235,51 @@ public class ModuleImpl extends ComponentManagerImpl implements ModuleEx {
}
public GlobalSearchScope getModuleScope() {
- return getCachedScope(ModuleWithDependenciesScope.COMPILE | ModuleWithDependenciesScope.TESTS);
+ return myModuleScopeProvider.getModuleScope();
}
@Override
public GlobalSearchScope getModuleScope(boolean includeTests) {
- return getCachedScope(ModuleWithDependenciesScope.COMPILE | (includeTests ? ModuleWithDependenciesScope.TESTS : 0));
+ return myModuleScopeProvider.getModuleScope(includeTests);
}
public GlobalSearchScope getModuleWithLibrariesScope() {
- return getCachedScope(ModuleWithDependenciesScope.COMPILE | ModuleWithDependenciesScope.TESTS | ModuleWithDependenciesScope.LIBRARIES);
+ return myModuleScopeProvider.getModuleWithLibrariesScope();
}
public GlobalSearchScope getModuleWithDependenciesScope() {
- return getCachedScope(ModuleWithDependenciesScope.COMPILE | ModuleWithDependenciesScope.TESTS | ModuleWithDependenciesScope.MODULES);
+ return myModuleScopeProvider.getModuleWithDependenciesScope();
}
@Override
public GlobalSearchScope getModuleContentScope() {
- return getCachedScope(ModuleWithDependenciesScope.CONTENT);
+ return myModuleScopeProvider.getModuleContentScope();
}
@Override
public GlobalSearchScope getModuleContentWithDependenciesScope() {
- return getCachedScope(ModuleWithDependenciesScope.CONTENT | ModuleWithDependenciesScope.MODULES);
+ return myModuleScopeProvider.getModuleContentWithDependenciesScope();
}
public GlobalSearchScope getModuleWithDependenciesAndLibrariesScope(boolean includeTests) {
- return getCachedScope(ModuleWithDependenciesScope.COMPILE |
- ModuleWithDependenciesScope.MODULES |
- ModuleWithDependenciesScope.LIBRARIES | (includeTests ? ModuleWithDependenciesScope.TESTS : 0));
+ return myModuleScopeProvider.getModuleWithDependenciesAndLibrariesScope(includeTests);
}
public GlobalSearchScope getModuleWithDependentsScope() {
- if (myModuleWithDependentsScope == null) {
- myModuleWithDependentsScope = new ModuleWithDependentsScope(this, false);
- }
- return myModuleWithDependentsScope;
+ return myModuleScopeProvider.getModuleWithDependentsScope();
}
public GlobalSearchScope getModuleTestsWithDependentsScope() {
- if (myModuleTestsWithDependentsScope == null) {
- myModuleTestsWithDependentsScope = new ModuleWithDependentsScope(this, true);
- }
- return myModuleTestsWithDependentsScope;
+ return myModuleScopeProvider.getModuleTestsWithDependentsScope();
}
public GlobalSearchScope getModuleRuntimeScope(boolean includeTests) {
- return getCachedScope(
- ModuleWithDependenciesScope.MODULES | ModuleWithDependenciesScope.LIBRARIES | (includeTests ? ModuleWithDependenciesScope.TESTS : 0));
- }
-
- @NotNull
- public GlobalSearchScope getCachedScope(@ModuleWithDependenciesScope.ScopeConstant int options) {
- GlobalSearchScope scope = myScopeCache.get(options);
- if (scope == null) {
- scope = new ModuleWithDependenciesScope(this, options);
- myScopeCache.put(options, scope);
- }
- return scope;
+ return myModuleScopeProvider.getModuleRuntimeScope(includeTests);
}
+ @Override
public void clearScopesCache() {
- myScopeCache.clear();
- myModuleWithDependentsScope = null;
- myModuleTestsWithDependentsScope = null;
+ myModuleScopeProvider.clearCache();
}
@SuppressWarnings({"HardCodedStringLiteral"})
diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerComponent.java b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerComponent.java
index 4f527b4b3242..306cea8b17a5 100644
--- a/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerComponent.java
+++ b/platform/lang-impl/src/com/intellij/openapi/roots/impl/ProjectRootManagerComponent.java
@@ -27,6 +27,7 @@ import com.intellij.openapi.fileTypes.FileTypeListener;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
+import com.intellij.openapi.module.impl.ModuleEx;
import com.intellij.openapi.module.impl.ModuleImpl;
import com.intellij.openapi.project.DumbServiceImpl;
import com.intellij.openapi.project.Project;
@@ -304,7 +305,7 @@ public class ProjectRootManagerComponent extends ProjectRootManagerImpl {
super.clearScopesCachesForModules();
Module[] modules = ModuleManager.getInstance(myProject).getModules();
for (Module module : modules) {
- ((ModuleImpl)module).clearScopesCache();
+ ((ModuleEx)module).clearScopesCache();
}
}
diff --git a/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/TodoCheckinHandlerWorker.java b/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/TodoCheckinHandlerWorker.java
index 142dc882e729..e16baef9e2dd 100644
--- a/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/TodoCheckinHandlerWorker.java
+++ b/platform/lang-impl/src/com/intellij/openapi/vcs/checkin/TodoCheckinHandlerWorker.java
@@ -43,7 +43,7 @@ import com.intellij.psi.PsiManager;
import com.intellij.psi.impl.search.LightIndexPatternSearch;
import com.intellij.psi.impl.search.TodoItemsCreator;
import com.intellij.psi.search.IndexPatternOccurrence;
-import com.intellij.psi.search.PsiSearchHelper;
+import com.intellij.psi.search.PsiTodoSearchHelper;
import com.intellij.psi.search.TodoItem;
import com.intellij.psi.search.searches.IndexPatternSearch;
import com.intellij.util.PairConsumer;
@@ -65,7 +65,7 @@ public class TodoCheckinHandlerWorker {
private final TodoFilter myTodoFilter;
private final boolean myIncludePattern;
private final PsiManager myPsiManager;
- private final PsiSearchHelper mySearchHelper;
+ private final PsiTodoSearchHelper mySearchHelper;
private final List myAddedOrEditedTodos;
private final List myInChangedTodos;
@@ -81,7 +81,7 @@ public class TodoCheckinHandlerWorker {
myTodoFilter = todoFilter;
myIncludePattern = includePattern;
myPsiManager = PsiManager.getInstance(project);
- mySearchHelper = PsiSearchHelper.SERVICE.getInstance(project);
+ mySearchHelper = PsiTodoSearchHelper.SERVICE.getInstance(project);
myAddedOrEditedTodos = new ArrayList();
myInChangedTodos = new ArrayList();
mySkipped = new SmartList>();
diff --git a/platform/lang-impl/src/com/intellij/psi/formatter/FormattingDocumentModelImpl.java b/platform/lang-impl/src/com/intellij/psi/formatter/FormattingDocumentModelImpl.java
index c177b80b5dee..c0ab0725a6c1 100644
--- a/platform/lang-impl/src/com/intellij/psi/formatter/FormattingDocumentModelImpl.java
+++ b/platform/lang-impl/src/com/intellij/psi/formatter/FormattingDocumentModelImpl.java
@@ -28,7 +28,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.impl.PsiDocumentManagerImpl;
import com.intellij.psi.impl.PsiToDocumentSynchronizer;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -128,7 +128,7 @@ public class FormattingDocumentModelImpl implements FormattingDocumentModel {
if (strategy.check(myDocument.getCharsSequence(), startOffset, endOffset) >= endOffset) {
return true;
}
- PsiElement injectedElement = myFile != null ? InjectedLanguageUtil.findElementAtNoCommit(myFile, startOffset) : null;
+ PsiElement injectedElement = myFile != null ? InjectedLanguageFacadeImpl.findElementAtNoCommit(myFile, startOffset) : null;
if (injectedElement != null) {
Language injectedLanguage = injectedElement.getLanguage();
if (!injectedLanguage.equals(myFile.getLanguage())) {
diff --git a/platform/lang-impl/src/com/intellij/psi/formatter/PsiBasedFormattingModel.java b/platform/lang-impl/src/com/intellij/psi/formatter/PsiBasedFormattingModel.java
index 5fb63836e61d..68bcf08c59ba 100644
--- a/platform/lang-impl/src/com/intellij/psi/formatter/PsiBasedFormattingModel.java
+++ b/platform/lang-impl/src/com/intellij/psi/formatter/PsiBasedFormattingModel.java
@@ -28,7 +28,7 @@ import com.intellij.psi.PsiFile;
import com.intellij.psi.TokenType;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -117,7 +117,7 @@ public class PsiBasedFormattingModel implements FormattingModel {
Project project = containingFile.getProject();
assert !PsiDocumentManager.getInstance(project).isUncommited(myDocumentModel.getDocument());
// TODO:default project can not be used for injections, because latter might wants (unavailable) indices
- PsiElement psiElement = project.isDefault() ? null : InjectedLanguageUtil.findInjectedElementNoCommit(containingFile, offset);
+ PsiElement psiElement = project.isDefault() ? null : InjectedLanguageFacadeImpl.findInjectedElementNoCommit(containingFile, offset);
if (psiElement == null) psiElement = containingFile.findElementAt(offset);
if (psiElement == null) return null;
return psiElement.getNode();
diff --git a/platform/lang-impl/src/com/intellij/psi/formatter/common/InjectedLanguageBlockBuilder.java b/platform/lang-impl/src/com/intellij/psi/formatter/common/InjectedLanguageBlockBuilder.java
index 7070493c72a1..4d06bdc3b8e5 100644
--- a/platform/lang-impl/src/com/intellij/psi/formatter/common/InjectedLanguageBlockBuilder.java
+++ b/platform/lang-impl/src/com/intellij/psi/formatter/common/InjectedLanguageBlockBuilder.java
@@ -27,7 +27,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiLanguageInjectionHost;
import com.intellij.psi.codeStyle.CodeStyleSettings;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -76,7 +76,7 @@ public abstract class InjectedLanguageBlockBuilder {
}
}
};
- InjectedLanguageUtil.enumerate(injectionHost.getPsi(), injectedPsiVisitor);
+ InjectedLanguageFacadeImpl.enumerate(injectionHost.getPsi(), injectedPsiVisitor);
if (injectedFile[0] != null) {
final Language childLanguage = injectedFile[0].getLanguage();
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/TodoCacheManager.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/TodoCacheManager.java
new file mode 100644
index 000000000000..cd84cc568e5e
--- /dev/null
+++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/TodoCacheManager.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.intellij.psi.impl.cache;
+
+import com.intellij.openapi.components.ServiceManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.search.IndexPattern;
+import com.intellij.psi.search.IndexPatternProvider;
+import org.jetbrains.annotations.NotNull;
+
+public interface TodoCacheManager {
+ class SERVICE {
+ private SERVICE() {
+ }
+
+ public static TodoCacheManager getInstance(Project project) {
+ return ServiceManager.getService(project, TodoCacheManager.class);
+ }
+ }
+
+
+ /**
+ * @return all VirtualFile's that contain todo-items under project roots
+ */
+ @NotNull
+ PsiFile[] getFilesWithTodoItems();
+
+ /**
+ * @return -1 if it's not known
+ */
+ int getTodoCount(@NotNull VirtualFile file, IndexPatternProvider patternProvider);
+
+ /**
+ * @return -1 if it's not known
+ */
+ int getTodoCount(@NotNull VirtualFile file, IndexPattern pattern);
+}
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/BaseFilterLexer.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/BaseFilterLexer.java
index cdd9acdd156a..d297a9a0c4c5 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/BaseFilterLexer.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/BaseFilterLexer.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexTodoCacheManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexTodoCacheManagerImpl.java
new file mode 100644
index 000000000000..0b1e5a10273e
--- /dev/null
+++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/IndexTodoCacheManagerImpl.java
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2000-2012 JetBrains s.r.o.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.intellij.psi.impl.cache.impl;
+
+import com.intellij.injected.editor.VirtualFileWindow;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.FileIndexFacade;
+import com.intellij.openapi.roots.ProjectFileIndex;
+import com.intellij.openapi.roots.ProjectRootManager;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiManager;
+import com.intellij.psi.impl.cache.TodoCacheManager;
+import com.intellij.psi.impl.cache.impl.todo.TodoIndex;
+import com.intellij.psi.impl.cache.impl.todo.TodoIndexEntry;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.psi.search.IndexPattern;
+import com.intellij.psi.search.IndexPatternProvider;
+import com.intellij.psi.util.PsiUtilCore;
+import com.intellij.util.indexing.FileBasedIndex;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Eugene Zhuravlev
+ * Date: Jan 16, 2008
+ */
+public class IndexTodoCacheManagerImpl implements TodoCacheManager {
+ private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.cache.impl.IndexTodoCacheManagerImpl");
+ private final Project myProject;
+ private final PsiManager myPsiManager;
+
+ public IndexTodoCacheManagerImpl(PsiManager psiManager) {
+ myPsiManager = psiManager;
+ myProject = psiManager.getProject();
+ }
+
+ public static boolean shouldBeFound(GlobalSearchScope scope, VirtualFile virtualFile, FileIndexFacade index) {
+ return (scope.isSearchOutsideRootModel() || index.isInContent(virtualFile) || index.isInLibrarySource(virtualFile)) && !virtualFile.getFileType().isBinary();
+ }
+
+ @NotNull
+ public PsiFile[] getFilesWithTodoItems() {
+ if (myProject.isDefault()) {
+ return PsiFile.EMPTY_ARRAY;
+ }
+ final FileBasedIndex fileBasedIndex = FileBasedIndex.getInstance();
+ final Set allFiles = new HashSet();
+ final ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance(myProject).getFileIndex();
+ for (IndexPattern indexPattern : IndexPatternUtil.getIndexPatterns()) {
+ final Collection files = fileBasedIndex.getContainingFiles(
+ TodoIndex.NAME,
+ new TodoIndexEntry(indexPattern.getPatternString(), indexPattern.isCaseSensitive()), GlobalSearchScope.allScope(myProject));
+ ApplicationManager.getApplication().runReadAction(new Runnable() {
+ @Override
+ public void run() {
+ for (VirtualFile file : files) {
+ if (projectFileIndex.isInContent(file)) {
+ final PsiFile psiFile = myPsiManager.findFile(file);
+ if (psiFile != null) {
+ allFiles.add(psiFile);
+ }
+ }
+ }
+ }
+ });
+ }
+ return allFiles.isEmpty() ? PsiFile.EMPTY_ARRAY : PsiUtilCore.toPsiFileArray(allFiles);
+ }
+
+ @Override
+ public int getTodoCount(@NotNull final VirtualFile file, final IndexPatternProvider patternProvider) {
+ if (myProject.isDefault()) {
+ return 0;
+ }
+ if (file instanceof VirtualFileWindow) return -1;
+ final FileBasedIndex fileBasedIndex = FileBasedIndex.getInstance();
+ int count = 0;
+ for (IndexPattern indexPattern : patternProvider.getIndexPatterns()) {
+ count += fetchCount(fileBasedIndex, file, indexPattern);
+ }
+ return count;
+ }
+
+ @Override
+ public int getTodoCount(@NotNull final VirtualFile file, final IndexPattern pattern) {
+ if (myProject.isDefault()) {
+ return 0;
+ }
+ if (file instanceof VirtualFileWindow) return -1;
+ return fetchCount(FileBasedIndex.getInstance(), file, pattern);
+ }
+
+ private int fetchCount(final FileBasedIndex fileBasedIndex, final VirtualFile file, final IndexPattern indexPattern) {
+ final int[] count = {0};
+ fileBasedIndex.processValues(
+ TodoIndex.NAME, new TodoIndexEntry(indexPattern.getPatternString(), indexPattern.isCaseSensitive()), file,
+ new FileBasedIndex.ValueProcessor() {
+ @Override
+ public boolean process(final VirtualFile file, final Integer value) {
+ count[0] += value.intValue();
+ return true;
+ }
+ }, GlobalSearchScope.fileScope(myProject, file));
+ return count[0];
+ }
+}
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/PlatformIdTableBuilding.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/PlatformIdTableBuilding.java
index 2faaf0a649e4..94e663d5abe9 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/PlatformIdTableBuilding.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/id/PlatformIdTableBuilding.java
@@ -31,7 +31,7 @@ import com.intellij.openapi.fileTypes.impl.CustomSyntaxTableFileType;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.CustomHighlighterTokenType;
import com.intellij.psi.impl.cache.impl.BaseFilterLexer;
-import com.intellij.psi.impl.cache.impl.CacheUtil;
+import com.intellij.psi.impl.cache.CacheUtil;
import com.intellij.psi.impl.cache.impl.IndexPatternUtil;
import com.intellij.psi.impl.cache.impl.OccurrenceConsumer;
import com.intellij.psi.impl.cache.impl.todo.TodoIndexEntry;
@@ -50,6 +50,8 @@ import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* Author: dmitrylomov
@@ -114,6 +116,9 @@ public abstract class PlatformIdTableBuilding {
ourTodoIndexers.put(fileType, indexer);
}
+ public static boolean isTodoIndexerRegistered(FileType fileType) {
+ return ourTodoIndexers.containsKey(fileType) || TodoIndexers.INSTANCE.forFileType(fileType) != null;
+ }
private static class CompositeTodoIndexer implements DataIndexer {
@@ -201,9 +206,44 @@ public abstract class PlatformIdTableBuilding {
}
}
+ public static class PlainTextTodoIndexer implements DataIndexer {
+ @Override
+ @NotNull
+ public Map map(final FileContent inputData) {
+ final CharSequence chars = inputData.getContentAsText();
+
+
+ final IndexPattern[] indexPatterns = IndexPatternUtil.getIndexPatterns();
+ if (indexPatterns.length > 0) {
+ final OccurrenceConsumer occurrenceConsumer = new OccurrenceConsumer(null, true);
+ for (IndexPattern indexPattern : indexPatterns) {
+ Pattern pattern = indexPattern.getPattern();
+ if (pattern != null) {
+ Matcher matcher = pattern.matcher(chars);
+ while (matcher.find()) {
+ if (matcher.start() != matcher.end()) {
+ occurrenceConsumer.incTodoOccurrence(indexPattern);
+ }
+ }
+ }
+ }
+ Map map = new HashMap();
+ for (IndexPattern indexPattern : indexPatterns) {
+ final int count = occurrenceConsumer.getOccurrenceCount(indexPattern);
+ if (count > 0) {
+ map.put(new TodoIndexEntry(indexPattern.getPatternString(), indexPattern.isCaseSensitive()), count);
+ }
+ }
+ return map;
+ }
+ return Collections.emptyMap();
+ }
+
+ }
+
static {
IdTableBuilding.registerIdIndexer(FileTypes.PLAIN_TEXT, new IdTableBuilding.PlainTextIndexer());
- registerTodoIndexer(FileTypes.PLAIN_TEXT, new IdTableBuilding.PlainTextTodoIndexer());
+ registerTodoIndexer(FileTypes.PLAIN_TEXT, new PlainTextTodoIndexer());
IdTableBuilding.registerIdIndexer(StdFileTypes.IDEA_MODULE, null);
IdTableBuilding.registerIdIndexer(StdFileTypes.IDEA_WORKSPACE, null);
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndex.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndex.java
index 1998ac33fc83..dc8b30258269 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndex.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndex.java
@@ -25,7 +25,6 @@ import com.intellij.openapi.fileTypes.impl.CustomSyntaxTableFileType;
import com.intellij.openapi.project.ProjectCoreUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.impl.cache.impl.id.IdTableBuilding;
import com.intellij.psi.impl.cache.impl.id.PlatformIdTableBuilding;
import com.intellij.psi.search.IndexPatternProvider;
import com.intellij.psi.tree.TokenSet;
@@ -130,7 +129,7 @@ public class TodoIndex extends FileBasedIndexExtension
return commentTokens != null;
}
- return IdTableBuilding.isTodoIndexerRegistered(fileType) ||
+ return PlatformIdTableBuilding.isTodoIndexerRegistered(fileType) ||
fileType instanceof CustomSyntaxTableFileType;
}
};
diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndexEntry.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndexEntry.java
similarity index 100%
rename from platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndexEntry.java
rename to platform/lang-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndexEntry.java
diff --git a/platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndexers.java b/platform/lang-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndexers.java
similarity index 100%
rename from platform/indexing-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndexers.java
rename to platform/lang-impl/src/com/intellij/psi/impl/cache/impl/todo/TodoIndexers.java
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearchImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearchImpl.java
index 2104ff613b81..8cb9413279a1 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearchImpl.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearchImpl.java
@@ -17,7 +17,7 @@
package com.intellij.psi.impl.search;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.impl.cache.CacheManager;
+import com.intellij.psi.impl.cache.TodoCacheManager;
import com.intellij.psi.search.IndexPattern;
import com.intellij.psi.search.IndexPatternProvider;
import com.intellij.psi.search.searches.IndexPatternSearch;
@@ -32,14 +32,14 @@ class IndexPatternSearchImpl extends IndexPatternSearch {
@Override
protected int getOccurrencesCountImpl(PsiFile file, IndexPatternProvider provider) {
- int count = CacheManager.SERVICE.getInstance(file.getProject()).getTodoCount(file.getVirtualFile(), provider);
+ int count = TodoCacheManager.SERVICE.getInstance(file.getProject()).getTodoCount(file.getVirtualFile(), provider);
if (count != -1) return count;
return search(file, provider).findAll().size();
}
@Override
protected int getOccurrencesCountImpl(PsiFile file, IndexPattern pattern) {
- int count = CacheManager.SERVICE.getInstance(file.getProject()).getTodoCount(file.getVirtualFile(), pattern);
+ int count = TodoCacheManager.SERVICE.getInstance(file.getProject()).getTodoCount(file.getVirtualFile(), pattern);
if (count != -1) return count;
return search(file, pattern).findAll().size();
}
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearcher.java b/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearcher.java
index 4f1c94e33001..2945ddf4d65c 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearcher.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearcher.java
@@ -29,7 +29,7 @@ import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
-import com.intellij.psi.impl.cache.CacheManager;
+import com.intellij.psi.impl.cache.TodoCacheManager;
import com.intellij.psi.search.IndexPattern;
import com.intellij.psi.search.IndexPatternOccurrence;
import com.intellij.psi.search.IndexPatternProvider;
@@ -60,7 +60,7 @@ public class IndexPatternSearcher implements QueryExecutor occurrences = IndexPatternSearch.search(file, TodoIndexPatternProvider.getInstance()).findAll();
+ if (occurrences.isEmpty()) {
+ return EMPTY_TODO_ITEMS;
+ }
+
+ return processTodoOccurences(startOffset, endOffset, occurrences);
+ }
+
+ private TodoItem[] processTodoOccurences(int startOffset, int endOffset, Collection occurrences) {
+ List items = new ArrayList(occurrences.size());
+ TextRange textRange = new TextRange(startOffset, endOffset);
+ final TodoItemsCreator todoItemsCreator = new TodoItemsCreator();
+ for(IndexPatternOccurrence occurrence: occurrences) {
+ TextRange occurrenceRange = occurrence.getTextRange();
+ if (textRange.contains(occurrenceRange)) {
+ items.add(todoItemsCreator.createTodo(occurrence));
+ }
+ }
+
+ return items.toArray(new TodoItem[items.size()]);
+ }
+
+ @NotNull
+ @Override
+ public TodoItem[] findTodoItemsLight(@NotNull PsiFile file) {
+ return findTodoItemsLight(file, 0, file.getTextLength());
+ }
+
+ @NotNull
+ @Override
+ public TodoItem[] findTodoItemsLight(@NotNull PsiFile file, int startOffset, int endOffset) {
+ final Collection occurrences =
+ LightIndexPatternSearch.SEARCH.createQuery(new IndexPatternSearch.SearchParameters(file, TodoIndexPatternProvider.getInstance())).findAll();
+
+ if (occurrences.isEmpty()) {
+ return EMPTY_TODO_ITEMS;
+ }
+
+ return processTodoOccurences(startOffset, endOffset, occurrences);
+ }
+
+ @Override
+ public int getTodoItemsCount(@NotNull PsiFile file) {
+ int count = TodoCacheManager.SERVICE.getInstance(myManager.getProject()).getTodoCount(file.getVirtualFile(), TodoIndexPatternProvider.getInstance());
+ if (count != -1) return count;
+ return findTodoItems(file).length;
+ }
+
+ @Override
+ public int getTodoItemsCount(@NotNull PsiFile file, @NotNull TodoPattern pattern) {
+ int count = TodoCacheManager.SERVICE.getInstance(myManager.getProject()).getTodoCount(file.getVirtualFile(), pattern.getIndexPattern());
+ if (count != -1) return count;
+ TodoItem[] items = findTodoItems(file);
+ count = 0;
+ for (TodoItem item : items) {
+ if (item.getPattern().equals(pattern)) count++;
+ }
+ return count;
+ }
+
+ private static ArrayList getWordEntries(String name, boolean caseSensitively) {
+ List words = StringUtil.getWordsInStringLongestFirst(name);
+ final ArrayList keys = new ArrayList();
+ for (String word : words) {
+ keys.add(new IdIndexEntry(word, caseSensitively));
+ }
+ return keys;
+ }
+}
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java
index f4a0db2a0ab2..e251006a5428 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/InjectedSelfElementInfo.java
@@ -25,7 +25,7 @@ import com.intellij.openapi.util.Segment;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import org.jetbrains.annotations.NotNull;
import java.util.Collections;
@@ -86,7 +86,7 @@ class InjectedSelfElementInfo extends SelfElementInfo {
PsiDocumentManager documentManager = PsiDocumentManager.getInstance(hostFile.getProject());
Document document = documentManager.getDocument(hostFile);
if (document != null && documentManager.isUncommited(document)) {
- for (DocumentWindow documentWindow : InjectedLanguageUtil.getCachedInjectedDocuments(hostFile)) {
+ for (DocumentWindow documentWindow : InjectedLanguageFacadeImpl.getCachedInjectedDocuments(hostFile)) {
PsiFile injected = documentManager.getPsiFile(documentWindow);
if (injected != null) {
visitor.visit(injected, Collections.emptyList());
@@ -94,7 +94,7 @@ class InjectedSelfElementInfo extends SelfElementInfo {
}
}
else {
- InjectedLanguageUtil.enumerate(hostContext, hostFile, true, visitor);
+ InjectedLanguageFacadeImpl.enumerate(hostContext, hostFile, true, visitor);
}
return result.get();
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java
index fb8722d0156b..29442fd80cdf 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SmartPointerManagerImpl.java
@@ -29,7 +29,7 @@ import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.ProperTextRange;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.reference.SoftReference;
import com.intellij.util.containers.UnsafeWeakList;
import org.jetbrains.annotations.NotNull;
@@ -72,7 +72,7 @@ public class SmartPointerManagerImpl extends SmartPointerManager {
}
}
- for (DocumentWindow injectedDoc : InjectedLanguageUtil.getCachedInjectedDocuments(file)) {
+ for (DocumentWindow injectedDoc : InjectedLanguageFacadeImpl.getCachedInjectedDocuments(file)) {
PsiFile injectedFile = psiDocumentManager.getPsiFile(injectedDoc);
if (injectedFile == null) continue;
RangeMarker cachedMarker = getCachedRangeMarkerToInjectedFragment(injectedFile);
@@ -114,7 +114,7 @@ public class SmartPointerManagerImpl extends SmartPointerManager {
}
}
- for (DocumentWindow injectedDoc : InjectedLanguageUtil.getCachedInjectedDocuments(file)) {
+ for (DocumentWindow injectedDoc : InjectedLanguageFacadeImpl.getCachedInjectedDocuments(file)) {
PsiFile injectedFile = psiDocumentManager.getPsiFile(injectedDoc);
if (injectedFile == null) continue;
unfastenBelts(injectedFile, 0);
@@ -145,7 +145,7 @@ public class SmartPointerManagerImpl extends SmartPointerManager {
}
final PsiDocumentManager psiDocumentManager = PsiDocumentManager.getInstance(file.getProject());
- for (Document document : InjectedLanguageUtil.getCachedInjectedDocuments(file)) {
+ for (Document document : InjectedLanguageFacadeImpl.getCachedInjectedDocuments(file)) {
PsiFile injectedfile = psiDocumentManager.getPsiFile(document);
if (injectedfile == null) continue;
_synchronizePointers(injectedfile);
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspect.java b/platform/lang-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspect.java
index 42b4ee1f167b..1f87406009a6 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspect.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/source/PostprocessReformattingAspect.java
@@ -45,7 +45,7 @@ import com.intellij.psi.impl.source.codeStyle.CodeEditUtil;
import com.intellij.psi.impl.source.codeStyle.CodeFormatterFacade;
import com.intellij.psi.impl.source.codeStyle.IndentHelperImpl;
import com.intellij.psi.impl.source.tree.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.LocalTimeCounter;
import com.intellij.util.text.CharArrayUtil;
import org.jetbrains.annotations.TestOnly;
@@ -168,7 +168,7 @@ public class PostprocessReformattingAspect implements PomModelAspect {
if (changeSet == null) return;
final PsiElement psiElement = changeSet.getRootElement().getPsi();
if (psiElement == null) return;
- PsiFile containingFile = InjectedLanguageUtil.getTopLevelFile(psiElement);
+ PsiFile containingFile = InjectedLanguageFacadeImpl.getTopLevelFile(psiElement);
final FileViewProvider viewProvider = containingFile.getViewProvider();
if (!viewProvider.isEventSystemEnabled()) return;
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java
index d9af7a4b628a..f6be88df1c35 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeFormatterFacade.java
@@ -45,7 +45,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.formatter.DocumentBasedFormattingModel;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.testFramework.LightVirtualFile;
@@ -88,7 +88,7 @@ public class CodeFormatterFacade {
final Document document = file.getViewProvider().getDocument();
final RangeMarker rangeMarker = document != null && endOffset < document.getTextLength()? document.createRangeMarker(startOffset, endOffset):null;
- PsiElement elementToFormat = document instanceof DocumentWindow ? InjectedLanguageUtil.getTopLevelFile(file) : psiElement;
+ PsiElement elementToFormat = document instanceof DocumentWindow ? InjectedLanguageFacadeImpl.getTopLevelFile(file) : psiElement;
final PsiFile fileToFormat = elementToFormat.getContainingFile();
final FormattingModelBuilder builder = LanguageFormatting.INSTANCE.forContext(fileToFormat);
@@ -137,7 +137,7 @@ public class CodeFormatterFacade {
Document document = PsiDocumentManager.getInstance(project).getDocument(file);
final List textRanges = ranges.getRanges();
if (document instanceof DocumentWindow) {
- file = InjectedLanguageUtil.getTopLevelFile(file);
+ file = InjectedLanguageFacadeImpl.getTopLevelFile(file);
final DocumentWindow documentWindow = (DocumentWindow)document;
for (FormatTextRanges.FormatTextRange range : textRanges) {
range.setTextRange(documentWindow.injectedToHost(range.getTextRange()));
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleManagerImpl.java
index c0d69b38c25c..b6685b1e5e08 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleManagerImpl.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleManagerImpl.java
@@ -38,7 +38,7 @@ import com.intellij.psi.impl.CheckUtil;
import com.intellij.psi.impl.source.PostprocessReformattingAspect;
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
import com.intellij.psi.impl.source.tree.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiUtilBase;
import com.intellij.util.CharTable;
import com.intellij.util.IncorrectOperationException;
@@ -274,7 +274,7 @@ public class CodeStyleManagerImpl extends CodeStyleManager {
TextRange textRange = addedElement.getTextRange();
final Document document = fileViewProvider.getDocument();
if (document instanceof DocumentWindow) {
- containingFile = InjectedLanguageUtil.getTopLevelFile(containingFile);
+ containingFile = InjectedLanguageFacadeImpl.getTopLevelFile(containingFile);
textRange = ((DocumentWindow)document).injectedToHost(textRange);
}
@@ -614,7 +614,7 @@ public class CodeStyleManagerImpl extends CodeStyleManager {
if (!(astNode instanceof FileElement)) {
return new Pair(null, null);
}
- PsiElement elementAt = InjectedLanguageUtil.findInjectedElementNoCommit(file, offset);
+ PsiElement elementAt = InjectedLanguageFacadeImpl.findInjectedElementNoCommit(file, offset);
final CharTable charTable = ((FileElement)astNode).getCharTable();
if (elementAt == null) {
elementAt = findElementInTreeWithFormatterEnabled(file, offset);
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleManagerRunnable.java b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleManagerRunnable.java
index de0243002b23..3862e08e4749 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleManagerRunnable.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/source/codeStyle/CodeStyleManagerRunnable.java
@@ -28,7 +28,7 @@ import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
import com.intellij.psi.formatter.DocumentBasedFormattingModel;
import com.intellij.psi.impl.source.SourceTreeToPsiMap;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.util.text.CharArrayUtil;
import org.jetbrains.annotations.Nullable;
@@ -56,7 +56,7 @@ abstract class CodeStyleManagerRunnable {
Document document = documentManager.getDocument(file);
if (document instanceof DocumentWindow) {
final DocumentWindow documentWindow = (DocumentWindow)document;
- final PsiFile topLevelFile = InjectedLanguageUtil.getTopLevelFile(file);
+ final PsiFile topLevelFile = InjectedLanguageFacadeImpl.getTopLevelFile(file);
if (!file.equals(topLevelFile)) {
if (range != null) {
range = documentWindow.injectedToHost(range);
@@ -125,7 +125,7 @@ abstract class CodeStyleManagerRunnable {
return false;
}
- if (element instanceof PsiLanguageInjectionHost && InjectedLanguageUtil.hasInjections((PsiLanguageInjectionHost)element)) {
+ if (element instanceof PsiLanguageInjectionHost && InjectedLanguageFacadeImpl.hasInjections((PsiLanguageInjectionHost)element)) {
return false;
}
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceSet.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceSet.java
index 2d73b9b02f82..b76d8c89d481 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceSet.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileReferenceSet.java
@@ -25,7 +25,7 @@ import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.Function;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -306,7 +306,7 @@ public class FileReferenceSet {
@Nullable
private PsiFile getContainingFile() {
- final PsiFile file = InjectedLanguageUtil.getTopLevelFile(myElement.getContainingFile());
+ final PsiFile file = InjectedLanguageFacadeImpl.getTopLevelFile(myElement.getContainingFile());
if (file == null) {
LOG.error("Invalid element: " + myElement);
}
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java
index 4cd558854598..21b6a6a4841c 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedFileViewProvider.java
@@ -90,7 +90,7 @@ public class InjectedFileViewProvider extends SingleRootFileViewProvider impleme
PsiFile hostFile = documentManager.getPsiFile(hostDocument);
Language language = getBaseLanguage();
PsiFile file = getPsi(language);
- final Language hostFileLanguage = InjectedLanguageUtil.getTopLevelFile(file).getLanguage();
+ final Language hostFileLanguage = InjectedLanguageFacadeImpl.getTopLevelFile(file).getLanguage();
PsiFile hostPsiFileCopy = (PsiFile)hostFile.copy();
Segment firstTextRange = oldDocumentWindow.getHostRanges()[0];
PsiElement hostElementCopy = hostPsiFileCopy.getViewProvider().findElementAt(firstTextRange.getStartOffset(), hostFileLanguage);
@@ -108,7 +108,7 @@ public class InjectedFileViewProvider extends SingleRootFileViewProvider impleme
for (PsiElement current = hostElementCopy; current != null && current != hostPsiFileCopy; current = current.getParent()) {
current.putUserData(LANGUAGE_FOR_INJECTED_COPY_KEY, language);
try {
- InjectedLanguageUtil.enumerate(current, hostPsiFileCopy, false, visitor);
+ InjectedLanguageFacadeImpl.enumerate(current, hostPsiFileCopy, false, visitor);
}
finally {
current.putUserData(LANGUAGE_FOR_INJECTED_COPY_KEY, null);
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageFacadeImpl.java
similarity index 98%
rename from platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java
rename to platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageFacadeImpl.java
index 11784f3dcfb9..4a019a46fac2 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageFacadeImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2012 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -30,6 +30,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.*;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
+import com.intellij.psi.impl.InjectedLanguageFacade;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.psi.impl.PsiParameterizedCachedValue;
import com.intellij.psi.impl.source.DummyHolder;
@@ -45,7 +46,7 @@ import java.util.List;
/**
* @author cdr
*/
-public class InjectedLanguageUtil {
+public class InjectedLanguageFacadeImpl extends InjectedLanguageFacade {
static final Key, TextRange>>> HIGHLIGHT_TOKENS = Key.create("HIGHLIGHT_TOKENS");
public static void forceInjectionOnElement(@NotNull PsiElement host) {
@@ -75,8 +76,9 @@ public class InjectedLanguageUtil {
return host;
}
+ @Override
@Nullable
- public static List> getInjectedPsiFiles(@NotNull final PsiElement host) {
+ public List> getInjectedPsiFiles(@NotNull final PsiElement host) {
if (!(host instanceof PsiLanguageInjectionHost) || !((PsiLanguageInjectionHost) host).isValidHost()) {
return null;
}
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java
index 7aa201ea2521..8a086947820c 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageManagerImpl.java
@@ -19,7 +19,7 @@ package com.intellij.psi.impl.source.tree.injected;
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer;
import com.intellij.codeInsight.daemon.impl.DaemonProgressIndicator;
import com.intellij.concurrency.Job;
-import com.intellij.concurrency.JobUtil;
+import com.intellij.concurrency.JobLauncher;
import com.intellij.injected.editor.DocumentWindow;
import com.intellij.injected.editor.DocumentWindowImpl;
import com.intellij.injected.editor.VirtualFileWindow;
@@ -131,7 +131,7 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme
if (hostPsiFile == null) return;
final CopyOnWriteArrayList injected =
- (CopyOnWriteArrayList)InjectedLanguageUtil.getCachedInjectedDocuments(hostPsiFile);
+ (CopyOnWriteArrayList)InjectedLanguageFacadeImpl.getCachedInjectedDocuments(hostPsiFile);
if (injected.isEmpty()) return;
if (myProgress.isCanceled()) {
@@ -157,7 +157,7 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme
}
final DocumentWindow[] stillInjectedDocument = {null};
// it is here where the reparse happens and old file contents replaced
- InjectedLanguageUtil.enumerate(element, hostPsiFile, true, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
+ InjectedLanguageFacadeImpl.enumerate(element, hostPsiFile, true, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
@Override
public void visit(@NotNull PsiFile injectedPsi, @NotNull List places) {
stillInjectedDocument[0] = (DocumentWindow)injectedPsi.getViewProvider().getDocument();
@@ -181,7 +181,8 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme
@Override
public void run() {
if (myProgress.isCanceled()) return;
- JobUtil.invokeConcurrentlyUnderProgress(new ArrayList(injected), myProgress, !synchronously, commitProcessor);
+ JobLauncher.getInstance().invokeConcurrentlyUnderProgress(new ArrayList(injected), myProgress, !synchronously,
+ commitProcessor);
}
};
@@ -196,7 +197,7 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme
}
}
else {
- JobUtil.submitToJobThread(Job.DEFAULT_PRIORITY, new Runnable() {
+ JobLauncher.getInstance().submitToJobThread(Job.DEFAULT_PRIORITY, new Runnable() {
@Override
public void run() {
ApplicationManagerEx.getApplicationEx().tryRunReadAction(commitInjectionsRunnable);
@@ -332,7 +333,7 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme
@SuppressWarnings({"ConstantConditions", "unchecked"})
@NotNull
public List intersectWithAllEditableFragments(@NotNull PsiFile injectedPsi, @NotNull TextRange rangeToEdit) {
- Place shreds = InjectedLanguageUtil.getShreds(injectedPsi);
+ Place shreds = InjectedLanguageFacadeImpl.getShreds(injectedPsi);
if (shreds == null) return Collections.emptyList();
Object result = null; // optimization: TextRange or ArrayList
int count = 0;
@@ -380,12 +381,12 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme
@Override
public PsiElement findInjectedElementAt(@NotNull PsiFile hostFile, int hostDocumentOffset) {
- return InjectedLanguageUtil.findInjectedElementNoCommit(hostFile, hostDocumentOffset);
+ return InjectedLanguageFacadeImpl.findInjectedElementNoCommit(hostFile, hostDocumentOffset);
}
@Override
public void dropFileCaches(@NotNull PsiFile file) {
- InjectedLanguageUtil.clearCachedInjectedFragmentsForFile(file);
+ InjectedLanguageFacadeImpl.clearCachedInjectedFragmentsForFile(file);
}
private final Map myInjectorsClone = new HashMap();
diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java
index d1ee84f27989..19ca2be6c298 100644
--- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java
+++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/MultiHostRegistrarImpl.java
@@ -256,7 +256,7 @@ public class MultiHostRegistrarImpl implements MultiHostRegistrar, ModificationT
PsiFile newFile = registerDocument(documentWindow, psiFile, place, myHostPsiFile, documentManager);
boolean mergeHappened = newFile != psiFile;
if (mergeHappened) {
- InjectedLanguageUtil.clearCaches(psiFile, documentWindow);
+ InjectedLanguageFacadeImpl.clearCaches(psiFile, documentWindow);
psiFile = newFile;
viewProvider = (InjectedFileViewProvider)psiFile.getViewProvider();
documentWindow = (DocumentWindowImpl)viewProvider.getDocument();
@@ -274,7 +274,7 @@ public class MultiHostRegistrarImpl implements MultiHostRegistrar, ModificationT
try {
List, TextRange>> tokens = obtainHighlightTokensFromLexer(myLanguage, outChars, escapers, place, virtualFile, myProject);
- psiFile.putUserData(InjectedLanguageUtil.HIGHLIGHT_TOKENS, tokens);
+ psiFile.putUserData(InjectedLanguageFacadeImpl.HIGHLIGHT_TOKENS, tokens);
}
catch (ProcessCanceledException e) {
throw e;
@@ -385,7 +385,7 @@ public class MultiHostRegistrarImpl implements MultiHostRegistrar, ModificationT
final Place shreds,
final PsiFile hostPsiFile,
final PsiDocumentManager documentManager) {
- List injected = InjectedLanguageUtil.getCachedInjectedDocuments(hostPsiFile);
+ List injected = InjectedLanguageFacadeImpl.getCachedInjectedDocuments(hostPsiFile);
for (int i = injected.size()-1; i>=0; i--) {
DocumentWindowImpl oldDocument = (DocumentWindowImpl)injected.get(i);
diff --git a/platform/lang-impl/src/com/intellij/refactoring/inline/InlineOptionsDialog.java b/platform/lang-impl/src/com/intellij/refactoring/inline/InlineOptionsDialog.java
index 6b0819711bd9..a3743bc49602 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/inline/InlineOptionsDialog.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/inline/InlineOptionsDialog.java
@@ -22,13 +22,11 @@ import com.intellij.psi.PsiNameIdentifierOwner;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiSearchHelper;
import com.intellij.psi.search.searches.ReferencesSearch;
-import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.ui.RefactoringDialog;
import com.intellij.refactoring.util.RadioUpDownListener;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
-import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
diff --git a/platform/lang-impl/src/com/intellij/refactoring/move/FileReferenceContextUtil.java b/platform/lang-impl/src/com/intellij/refactoring/move/FileReferenceContextUtil.java
index e5fafd442a26..a15dfa42e4f2 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/move/FileReferenceContextUtil.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/move/FileReferenceContextUtil.java
@@ -22,7 +22,7 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReference;
import com.intellij.psi.impl.source.resolve.reference.impl.providers.FileReferenceOwner;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.HashMap;
import org.jetbrains.annotations.NotNull;
@@ -43,10 +43,10 @@ public class FileReferenceContextUtil {
element.accept(new PsiRecursiveElementWalkingVisitor(true) {
@Override public void visitElement(PsiElement element) {
if (element instanceof PsiLanguageInjectionHost) {
- InjectedLanguageUtil.enumerate(element, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
+ InjectedLanguageFacadeImpl.enumerate(element, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
public void visit(@NotNull final PsiFile injectedPsi, @NotNull final List places) {
encodeFileReferences(injectedPsi);
- }
+ }
});
}
@@ -89,7 +89,7 @@ public class FileReferenceContextUtil {
}
if (element instanceof PsiLanguageInjectionHost) {
- InjectedLanguageUtil.enumerate(element, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
+ InjectedLanguageFacadeImpl.enumerate(element, new PsiLanguageInjectionHost.InjectedPsiVisitor() {
public void visit(@NotNull final PsiFile injectedPsi, @NotNull final List places) {
decodeFileReferences(injectedPsi);
}
diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java b/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java
index c23fe24e664d..3b5c3f49bdfd 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/rename/PsiElementRenameHandler.java
@@ -31,7 +31,7 @@ import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.Condition;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.meta.PsiMetaOwner;
import com.intellij.psi.meta.PsiWritableMetaData;
import com.intellij.refactoring.RefactoringBundle;
@@ -57,7 +57,7 @@ public class PsiElementRenameHandler implements RenameHandler {
public void invoke(@NotNull Project project, Editor editor, PsiFile file, DataContext dataContext) {
PsiElement element = getElement(dataContext);
editor.getScrollingModel().scrollToCaret(ScrollType.MAKE_VISIBLE);
- final PsiElement nameSuggestionContext = InjectedLanguageUtil.findElementAtNoCommit(file, editor.getCaretModel().getOffset());
+ final PsiElement nameSuggestionContext = InjectedLanguageFacadeImpl.findElementAtNoCommit(file, editor.getCaretModel().getOffset());
invoke(element, project, nameSuggestionContext, editor);
}
@@ -127,7 +127,7 @@ public class PsiElementRenameHandler implements RenameHandler {
}
}
- if (InjectedLanguageUtil.isInInjectedLanguagePrefixSuffix(element)) {
+ if (InjectedLanguageFacadeImpl.isInInjectedLanguagePrefixSuffix(element)) {
final String message = RefactoringBundle.message("error.in.injected.lang.prefix.suffix", UsageViewUtil.getType(element));
return RefactoringBundle.getCannotRefactorMessage(message);
}
diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java
index f678387ef376..2064c37e185a 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/InplaceRefactoring.java
@@ -62,7 +62,7 @@ import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.util.*;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.ProjectScope;
import com.intellij.psi.search.PsiSearchHelper;
@@ -151,7 +151,7 @@ public abstract class InplaceRefactoring {
public boolean performInplaceRefactoring(final LinkedHashSet nameSuggestions) {
myNameSuggestions = nameSuggestions;
- if (InjectedLanguageUtil.isInInjectedLanguagePrefixSuffix(myElementToRename)) {
+ if (InjectedLanguageFacadeImpl.isInInjectedLanguagePrefixSuffix(myElementToRename)) {
return false;
}
@@ -274,7 +274,7 @@ public abstract class InplaceRefactoring {
}
else {
revertState();
- final TemplateState templateState = TemplateManagerImpl.getTemplateState(InjectedLanguageUtil.getTopLevelEditor(myEditor));
+ final TemplateState templateState = TemplateManagerImpl.getTemplateState(InjectedLanguageFacadeImpl.getTopLevelEditor(myEditor));
if (templateState != null) {
templateState.gotoEnd(true);
}
@@ -332,7 +332,7 @@ public abstract class InplaceRefactoring {
TextRange range = myScope.getTextRange();
assert range != null;
myHighlighters = new ArrayList();
- Editor topLevelEditor = InjectedLanguageUtil.getTopLevelEditor(myEditor);
+ Editor topLevelEditor = InjectedLanguageFacadeImpl.getTopLevelEditor(myEditor);
topLevelEditor.getCaretModel().moveToOffset(range.getStartOffset());
TemplateManager.getInstance(myProject).startTemplate(topLevelEditor, template, templateListener);
@@ -508,7 +508,7 @@ public abstract class InplaceRefactoring {
if (myOldName == null) return;
CommandProcessor.getInstance().executeCommand(myProject, new Runnable() {
public void run() {
- final Editor topLevelEditor = InjectedLanguageUtil.getTopLevelEditor(myEditor);
+ final Editor topLevelEditor = InjectedLanguageFacadeImpl.getTopLevelEditor(myEditor);
ApplicationManager.getApplication().runWriteAction(new Runnable() {
public void run() {
final TemplateState state = TemplateManagerImpl.getTemplateState(topLevelEditor);
@@ -751,7 +751,7 @@ public abstract class InplaceRefactoring {
finally {
if (!bind) {
try {
- ((EditorImpl)InjectedLanguageUtil.getTopLevelEditor(myEditor)).stopDumb();
+ ((EditorImpl)InjectedLanguageFacadeImpl.getTopLevelEditor(myEditor)).stopDumb();
}
finally {
FinishMarkAction.finish(myProject, myEditor, myMarkAction);
diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenameHandler.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenameHandler.java
index 45d74ff03420..f6a107357ad9 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenameHandler.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenameHandler.java
@@ -28,7 +28,7 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiNameIdentifierOwner;
import com.intellij.psi.PsiNamedElement;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.refactoring.rename.RenamePsiElementProcessor;
import org.jetbrains.annotations.NotNull;
@@ -73,7 +73,7 @@ public class MemberInplaceRenameHandler extends VariableInplaceRenameHandler {
else {
final InplaceRefactoring inplaceRefactoring = editor.getUserData(InplaceRefactoring.INPLACE_RENAMER);
if (inplaceRefactoring != null && inplaceRefactoring.getClass() == MemberInplaceRenamer.class) {
- final TemplateState templateState = TemplateManagerImpl.getTemplateState(InjectedLanguageUtil.getTopLevelEditor(editor));
+ final TemplateState templateState = TemplateManagerImpl.getTemplateState(InjectedLanguageFacadeImpl.getTopLevelEditor(editor));
if (templateState != null) {
templateState.gotoEnd(true);
}
diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java
index caf14daadbf3..062fc1aa8a65 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MemberInplaceRenamer.java
@@ -30,7 +30,7 @@ import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.ProjectScope;
import com.intellij.psi.search.SearchScope;
@@ -202,7 +202,7 @@ public class MemberInplaceRenamer extends VariableInplaceRenamer {
}
finally {
try {
- ((EditorImpl)InjectedLanguageUtil.getTopLevelEditor(myEditor)).stopDumb();
+ ((EditorImpl)InjectedLanguageFacadeImpl.getTopLevelEditor(myEditor)).stopDumb();
}
finally {
FinishMarkAction.finish(myProject, myEditor, markAction);
@@ -248,7 +248,7 @@ public class MemberInplaceRenamer extends VariableInplaceRenamer {
@Override
protected void revertStateOnFinish() {
- final Editor editor = InjectedLanguageUtil.getTopLevelEditor(myEditor);
+ final Editor editor = InjectedLanguageFacadeImpl.getTopLevelEditor(myEditor);
if (editor == FileEditorManager.getInstance(myProject).getSelectedTextEditor()) {
((EditorImpl)editor).startDumb();
}
diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MyLookupExpression.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MyLookupExpression.java
index 7db3a3693faf..70960742e739 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MyLookupExpression.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/MyLookupExpression.java
@@ -30,7 +30,7 @@ import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiNamedElement;
import com.intellij.psi.codeStyle.SuggestedNameInfo;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.refactoring.rename.NameSuggestionProvider;
import com.intellij.refactoring.rename.PreferrableNameSuggestionProvider;
@@ -78,7 +78,7 @@ public class MyLookupExpression extends Expression {
@Override
public void handleInsert(InsertionContext context, LookupElement item) {
if (shouldSelectAll) return;
- final Editor topLevelEditor = InjectedLanguageUtil.getTopLevelEditor(context.getEditor());
+ final Editor topLevelEditor = InjectedLanguageFacadeImpl.getTopLevelEditor(context.getEditor());
final TemplateState templateState = TemplateManagerImpl.getTemplateState(topLevelEditor);
if (templateState != null) {
final TextRange range = templateState.getCurrentVariableRange();
diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java
index f52e6635ef16..222ca0db8098 100644
--- a/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java
+++ b/platform/lang-impl/src/com/intellij/refactoring/rename/inplace/VariableInplaceRenamer.java
@@ -32,7 +32,7 @@ import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.*;
-import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageFacadeImpl;
import com.intellij.psi.util.PsiUtilCore;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.rename.AutomaticRenamingDialog;
@@ -249,7 +249,7 @@ public class VariableInplaceRenamer extends InplaceRefactoring {
}
finally {
try {
- ((EditorImpl)InjectedLanguageUtil.getTopLevelEditor(myEditor)).stopDumb();
+ ((EditorImpl)InjectedLanguageFacadeImpl.getTopLevelEditor(myEditor)).stopDumb();
}
finally {
FinishMarkAction.finish(myProject, myEditor, markAction);
@@ -298,7 +298,7 @@ public class VariableInplaceRenamer extends InplaceRefactoring {
revertStateOnFinish();
}
else {
- ((EditorImpl)InjectedLanguageUtil.getTopLevelEditor(myEditor)).stopDumb();
+ ((EditorImpl)InjectedLanguageFacadeImpl.getTopLevelEditor(myEditor)).stopDumb();
}
}
diff --git a/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java b/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java
index 7624d5bd6827..9dfb6f5b52a0 100644
--- a/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java
+++ b/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java
@@ -20,7 +20,7 @@
package com.intellij.ui;
import com.intellij.concurrency.Job;
-import com.intellij.concurrency.JobUtil;
+import com.intellij.concurrency.JobLauncher;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.project.IndexNotReadyException;
import com.intellij.openapi.util.Ref;
@@ -117,14 +117,15 @@ public class DeferredIconImpl implements DeferredIcon {
paintingParentRec.set(((PaintingParent)pp).getChildRec(c));
}
- JobUtil.submitToJobThread(Job.DEFAULT_PRIORITY, new Runnable() {
+ JobLauncher.getInstance().submitToJobThread(Job.DEFAULT_PRIORITY, new Runnable() {
@Override
public void run() {
int oldWidth = myDelegateIcon.getIconWidth();
final Icon result = evaluate();
myDelegateIcon = result;
- final boolean shouldRevalidate = Registry.is("ide.tree.deferredicon.invalidates.cache") && myDelegateIcon.getIconWidth() != oldWidth;
+ final boolean shouldRevalidate =
+ Registry.is("ide.tree.deferredicon.invalidates.cache") && myDelegateIcon.getIconWidth() != oldWidth;
//noinspection SSBasedInspection
SwingUtilities.invokeLater(new Runnable() {
diff --git a/platform/platform-api/src/com/intellij/openapi/ui/Messages.java b/platform/platform-api/src/com/intellij/openapi/ui/Messages.java
index cc69e4b78d7b..f7ac237dbc15 100644
--- a/platform/platform-api/src/com/intellij/openapi/ui/Messages.java
+++ b/platform/platform-api/src/com/intellij/openapi/ui/Messages.java
@@ -814,7 +814,7 @@ public class Messages {
textField.setText(textArea.getText());
}
});
- String s = textField.getText().replaceAll("[\\ ]*=[\\ ]*", "=");
+ String s = textField.getText().replaceAll("[ ]*=[ ]*", "=").replaceAll("\\-", "\\ \\-");
List lines = StringUtil.splitHonorQuotes(s, ' ');
textArea.setText(StringUtil.join(lines, "\n"));
InsertPathAction.copyFromTo(textField, textArea);
diff --git a/platform/platform-impl/src/com/intellij/concurrency/JobUtil.java b/platform/platform-impl/src/com/intellij/concurrency/JobLauncherImpl.java
similarity index 90%
rename from platform/platform-impl/src/com/intellij/concurrency/JobUtil.java
rename to platform/platform-impl/src/com/intellij/concurrency/JobLauncherImpl.java
index eea654bf9d0e..e5910b81012e 100644
--- a/platform/platform-impl/src/com/intellij/concurrency/JobUtil.java
+++ b/platform/platform-impl/src/com/intellij/concurrency/JobLauncherImpl.java
@@ -34,13 +34,10 @@ import java.util.concurrent.Future;
* @author cdr
*/
-public class JobUtil {
- private static final Logger LOG = Logger.getInstance("#com.intellij.concurrency.JobUtil");
+public class JobLauncherImpl extends JobLauncher {
+ private static final Logger LOG = Logger.getInstance("#com.intellij.concurrency.JobLauncher");
- private JobUtil() {
- }
-
- private static boolean invokeConcurrentlyForAll(@NotNull final List things,
+ private boolean invokeConcurrentlyForAll(@NotNull final List things,
boolean failFastOnAcquireReadAction,
@NotNull final Processor thingProcessor) throws ProcessCanceledException {
final Job job = new JobImpl(Job.DEFAULT_PRIORITY, failFastOnAcquireReadAction);
@@ -95,7 +92,8 @@ public class JobUtil {
* or we were unable to start read action in at least one thread
* @throws ProcessCanceledException if at least one task has thrown ProcessCanceledException
*/
- public static boolean invokeConcurrentlyUnderProgress(@NotNull List things,
+ @Override
+ public boolean invokeConcurrentlyUnderProgress(@NotNull List things,
ProgressIndicator progress,
boolean failFastOnAcquireReadAction,
@NotNull final Processor thingProcessor) throws ProcessCanceledException {
@@ -122,11 +120,8 @@ public class JobUtil {
});
}
- public static Job submitToJobThread(int priority, @NotNull final Runnable action) {
- return submitToJobThread(priority, action, null);
- }
-
- public static Job submitToJobThread(int priority, @NotNull final Runnable action, Consumer onDoneCallback) {
+ @Override
+ public Job submitToJobThread(int priority, @NotNull final Runnable action, Consumer onDoneCallback) {
final JobImpl job = new JobImpl(priority, false);
Callable callable = new Callable() {
public Void call() throws Exception {
diff --git a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/DirectoryBasedStorage.java b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/DirectoryBasedStorage.java
index 0fc2147f8a1a..7fd8d51578ae 100644
--- a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/DirectoryBasedStorage.java
+++ b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/DirectoryBasedStorage.java
@@ -116,7 +116,7 @@ public class DirectoryBasedStorage implements StateStorage, Disposable {
private DirectoryStorageData loadState() throws StateStorageException {
DirectoryStorageData storageData = new DirectoryStorageData();
- storageData.loadFrom(myDir, myPathMacroSubstitutor);
+ storageData.loadFrom(LocalFileSystem.getInstance().findFileByIoFile(myDir), myPathMacroSubstitutor);
return storageData;
}
@@ -289,7 +289,8 @@ public class DirectoryBasedStorage implements StateStorage, Disposable {
myPathMacroSubstitutor.collapsePaths(element);
}
- if (!StorageUtil.contentEquals(element, file)) {
+ VirtualFile virtualFile = LocalFileSystem.getInstance().findFileByIoFile(file);
+ if (virtualFile == null || !StorageUtil.contentEquals(element, virtualFile)) {
filesToSave.add(file);
}
}
diff --git a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileBasedStorage.java b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileBasedStorage.java
index 099dc37c6434..ce6cf2cae7f6 100644
--- a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileBasedStorage.java
+++ b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/FileBasedStorage.java
@@ -154,8 +154,10 @@ public class FileBasedStorage extends XmlElementStorage {
@Override
protected boolean physicalContentNeedsSave() {
- if (!myFile.exists()) return !myStorageData.isEmpty();
- return !StorageUtil.contentEquals(getDocumentToSave(), myFile);
+ VirtualFile file = getVirtualFile();
+ if (file == null || !file.exists())
+ return !myStorageData.isEmpty();
+ return !StorageUtil.contentEquals(getDocumentToSave(), file);
}
@Override
@@ -321,7 +323,8 @@ public class FileBasedStorage extends XmlElementStorage {
}
protected boolean physicalContentNeedsSave(final Document doc) {
- return !myFile.exists() || !StorageUtil.contentEquals(doc, myFile);
+ VirtualFile file = getVirtualFile();
+ return file == null || !file.exists() || !StorageUtil.contentEquals(doc, file);
}
@Nullable
diff --git a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/StorageUtil.java b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/StorageUtil.java
index 1d5f917b1990..9eed25697766 100644
--- a/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/StorageUtil.java
+++ b/platform/platform-impl/src/com/intellij/openapi/components/impl/stores/StorageUtil.java
@@ -100,7 +100,7 @@ public class StorageUtil {
try {
final Ref refIOException = Ref.create(null);
- final Pair pair = loadFile(file);
+ final Pair pair = loadFile(LocalFileSystem.getInstance().findFileByIoFile(file));
final byte[] text = JDOMUtil.writeParent(element, pair.second).getBytes(CharsetToolkit.UTF8);
if (file.exists()) {
if (new String(text).equals(pair.first)) return null;
@@ -184,17 +184,17 @@ public class StorageUtil {
/**
* @return pair.first - file contents (null if file does not exist), pair.second - file line separators
*/
- public static Pair loadFile(@NotNull final IFile file) throws IOException {
- if (!file.exists()) return Pair.create(null, SystemProperties.getLineSeparator());
+ public static Pair loadFile(@Nullable final VirtualFile file) throws IOException {
+ if (file == null || !file.exists()) return Pair.create(null, SystemProperties.getLineSeparator());
- String fileText = new String(file.loadBytes(), CharsetToolkit.UTF8);
+ String fileText = new String(file.contentsToByteArray(), CharsetToolkit.UTF8);
final int ndx = fileText.indexOf('\n');
return Pair.create(fileText, ndx == -1
? SystemProperties.getLineSeparator()
- : ndx - 1 >=0 ? fileText.charAt(ndx - 1) == '\r' ? "\r\n" : "\n" : "\n");
+ : ndx - 1 >= 0 ? fileText.charAt(ndx - 1) == '\r' ? "\r\n" : "\n" : "\n");
}
- public static boolean contentEquals(@NotNull final Document document, @NotNull final IFile file) {
+ public static boolean contentEquals(@NotNull final Document document, @NotNull final VirtualFile file) {
try {
final Pair pair = loadFile(file);
return pair.first != null && pair.first.equals(printDocumentToString(document, pair.second));
@@ -205,7 +205,7 @@ public class StorageUtil {
}
}
- public static boolean contentEquals(@NotNull final Element element, @NotNull final IFile file) {
+ public static boolean contentEquals(@NotNull final Element element, @NotNull final VirtualFile file) {
try {
final Pair pair = loadFile(file);
return pair.first != null && pair.first.equals(printElement(element, pair.second));
diff --git a/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForBaseRevision.java b/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForBaseRevision.java
index 63ddf87e0c60..7e16b694280c 100644
--- a/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForBaseRevision.java
+++ b/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForBaseRevision.java
@@ -19,7 +19,7 @@ import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Getter;
import com.intellij.openapi.util.TextRange;
-import com.intellij.psi.search.PsiSearchHelper;
+import com.intellij.psi.search.PsiTodoSearchHelper;
import com.intellij.psi.search.TodoItem;
import com.intellij.util.Consumer;
@@ -51,7 +51,7 @@ public class TodoForBaseRevision extends TodoForRanges {
protected TodoItem[] getTodoItems() {
final TodoItem[] items = (TodoItem[])myGetter.get();
if (items != null) return items;
- final TodoItem[] todoItems = getTodoForText(PsiSearchHelper.SERVICE.getInstance(myProject));
+ final TodoItem[] todoItems = getTodoForText(PsiTodoSearchHelper.SERVICE.getInstance(myProject));
if (todoItems != null) {
mySaver.consume(todoItems);
}
diff --git a/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForExistingFile.java b/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForExistingFile.java
index 5a0f02dae3bc..ae89b44687df 100644
--- a/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForExistingFile.java
+++ b/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForExistingFile.java
@@ -16,16 +16,14 @@
package com.intellij.openapi.vcs.changes;
import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.PsiManager;
-import com.intellij.psi.search.PsiSearchHelper;
+import com.intellij.psi.search.PsiTodoSearchHelper;
import com.intellij.psi.search.TodoItem;
import java.util.List;
@@ -53,7 +51,7 @@ public class TodoForExistingFile extends TodoForRanges {
return ApplicationManager.getApplication().runReadAction(new Computable() {
@Override
public TodoItem[] compute() {
- final PsiSearchHelper helper = PsiSearchHelper.SERVICE.getInstance(myProject);
+ final PsiTodoSearchHelper helper = PsiTodoSearchHelper.SERVICE.getInstance(myProject);
PsiFile psiFile = myFile == null ? null : PsiManager.getInstance(myProject).findFile(myFile);
if (psiFile != null) {
diff --git a/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForRanges.java b/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForRanges.java
index a6e65a39fa68..dac706fef5dd 100644
--- a/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForRanges.java
+++ b/platform/platform-impl/src/com/intellij/openapi/vcs/changes/TodoForRanges.java
@@ -26,7 +26,7 @@ import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vcs.checkin.StepIntersection;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
-import com.intellij.psi.search.PsiSearchHelper;
+import com.intellij.psi.search.PsiTodoSearchHelper;
import com.intellij.psi.search.TodoItem;
import com.intellij.util.containers.Convertor;
@@ -104,7 +104,7 @@ public abstract class TodoForRanges {
protected abstract TodoItem[] getTodoItems();
- protected TodoItem[] getTodoForText(PsiSearchHelper helper) {
+ protected TodoItem[] getTodoForText(PsiTodoSearchHelper helper) {
final PsiFile psiFile = ApplicationManager.getApplication().runReadAction(new Computable() {
@Override
public PsiFile compute() {
diff --git a/platform/platform-impl/src/com/intellij/ui/SlideComponent.java b/platform/platform-impl/src/com/intellij/ui/SlideComponent.java
index b331220ffd54..5b075f6fd2bf 100644
--- a/platform/platform-impl/src/com/intellij/ui/SlideComponent.java
+++ b/platform/platform-impl/src/com/intellij/ui/SlideComponent.java
@@ -122,7 +122,8 @@ class SlideComponent extends JComponent {
.setTextBg(HintUtil.INFORMATION_COLOR)
.setShowImmediately(true);
- myTooltipHint.show(this, point.x, point.y, (JComponent)KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(), hint);
+ final Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
+ myTooltipHint.show(this, point.x, point.y, owner instanceof JComponent ? (JComponent)owner : null, hint);
} else {
myTooltipHint.setLocation(new RelativePoint(this, point));
}
diff --git a/platform/platform-resources-en/src/messages/CodeInsightBundle.properties b/platform/platform-resources-en/src/messages/CodeInsightBundle.properties
index 355e2c4179e8..499bdaaebf18 100644
--- a/platform/platform-resources-en/src/messages/CodeInsightBundle.properties
+++ b/platform/platform-resources-en/src/messages/CodeInsightBundle.properties
@@ -190,9 +190,10 @@ intention.error.cannot.create.class.message=Cannot Create Class ''{0}''
intention.error.cannot.create.class.title=Failed to Create Class
intention.assign.field.from.parameter.text=Assign Parameter to Field ''{0}''
intention.assign.field.from.parameter.family=Assign Parameter to Field
-intention.create.field.from.parameter.text=Create Field For Parameter ''{0}''
-intention.create.fields.from.parameters.text=Create Fields For {0} Parameters
+intention.create.field.from.parameter.text=Create Field for Parameter ''{0}''
intention.create.field.from.parameter.family=Create Field for Parameter
+intention.create.assign.fields.from.parameters.text=Create/Assign Fields from {0} Parameters
+intention.create.assign.fields.from.parameters.family=Create/Assign Fields from Parameters
intention.implement.abstract.method.searching.for.descendants.progress=Searching For Descendants...
intention.implement.abstract.method.error.no.classes.message=There are no classes found where this method can be implemented
intention.implement.abstract.method.error.no.classes.title=No Classes Found
diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml
index 37b415652433..78eedf74f4ef 100644
--- a/platform/platform-resources/src/META-INF/LangExtensions.xml
+++ b/platform/platform-resources/src/META-INF/LangExtensions.xml
@@ -15,6 +15,9 @@
+
+
@@ -47,6 +50,8 @@
+
+
+
@@ -296,6 +304,8 @@
+
() {
- @Override
- public boolean process(Object o) {
- try {
- doAsyncRefreshTest();
- }
- catch (Throwable t) {
- ex[0] = t;
- }
- return true;
- }
- });
+ JobLauncher.getInstance().invokeConcurrentlyUnderProgress(Arrays.asList(new Object[8]), ProgressManager.getInstance().getProgressIndicator(), false,
+ new Processor