Console: correctly navigate to sources using the corresponding scopes
authorAnton Makeev <Anton.Makeev@jetbrains.com>
Thu, 11 Mar 2010 14:28:59 +0000 (17:28 +0300)
committerAnton Makeev <Anton.Makeev@jetbrains.com>
Thu, 11 Mar 2010 14:28:59 +0000 (17:28 +0300)
java/execution/impl/src/com/intellij/execution/filters/DefaultConsoleFiltersProvider.java
platform/lang-api/src/com/intellij/execution/filters/ConsoleFilterProviderEx.java [new file with mode: 0644]
platform/lang-api/src/com/intellij/execution/filters/TextConsoleBuilderFactory.java
platform/lang-impl/src/com/intellij/execution/filters/TextConsoleBuilderFactoryImpl.java
platform/lang-impl/src/com/intellij/execution/filters/TextConsoleBuilderImpl.java
platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java
platform/testRunner/src/com/intellij/execution/testframework/TestConsoleProperties.java
platform/testRunner/src/com/intellij/execution/testframework/ui/BaseTestsOutputConsoleView.java
plugins/junit/src/com/intellij/execution/junit2/ui/properties/JUnitConsoleProperties.java
plugins/testng/src/com/theoryinpractice/testng/model/TestNGConsoleProperties.java

index d96ce227762c9d2ea51cd84e6112e89ffe8dd938..1f85d105a237e53d53ad14be4c09f2d8a51c5d67 100644 (file)
 package com.intellij.execution.filters;
 
 import com.intellij.openapi.project.Project;
+import com.intellij.psi.search.GlobalSearchScope;
 import org.jetbrains.annotations.NotNull;
 
-public class DefaultConsoleFiltersProvider implements ConsoleFilterProvider{
+public class DefaultConsoleFiltersProvider implements ConsoleFilterProviderEx {
   public Filter[] getDefaultFilters(@NotNull Project project) {
     return new Filter[]{new ExceptionFilter(project), new YourkitFilter(project)};
   }
+
+  public Filter[] getDefaultFilters(@NotNull Project project, @NotNull GlobalSearchScope scope) {
+    return new Filter[]{new ExceptionFilter(scope), new YourkitFilter(project)};
+  }
 }
\ No newline at end of file
diff --git a/platform/lang-api/src/com/intellij/execution/filters/ConsoleFilterProviderEx.java b/platform/lang-api/src/com/intellij/execution/filters/ConsoleFilterProviderEx.java
new file mode 100644 (file)
index 0000000..ab4bcb5
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2000-2010 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.
+ */
+
+/*
+ * User: anna
+ * Date: 20-Aug-2007
+ */
+package com.intellij.execution.filters;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.search.GlobalSearchScope;
+import org.jetbrains.annotations.NotNull;
+
+public interface ConsoleFilterProviderEx extends ConsoleFilterProvider {
+  Filter[] getDefaultFilters(@NotNull Project project, @NotNull GlobalSearchScope scope);
+}
\ No newline at end of file
index 11589504725e54c6420a9664f193e11500c61502..569df7ce6353af0fa333a2a0905d051b0ec4124a 100644 (file)
@@ -24,6 +24,7 @@ package com.intellij.execution.filters;
 
 import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.project.Project;
+import com.intellij.psi.search.GlobalSearchScope;
 
 /**
  * @author dyoma
@@ -31,6 +32,8 @@ import com.intellij.openapi.project.Project;
 public abstract class TextConsoleBuilderFactory {
   public abstract TextConsoleBuilder createBuilder(Project project);
 
+  public abstract TextConsoleBuilder createBuilder(Project project, GlobalSearchScope scope);
+
   public static TextConsoleBuilderFactory getInstance() {
     return ServiceManager.getService(TextConsoleBuilderFactory.class);
   }
index d649c60f1457916dd5da5ec51c3ff268883d2a3b..2e5d71a387e73408c1174aadb681d22ffc7ad6ac 100644 (file)
@@ -23,6 +23,7 @@
 package com.intellij.execution.filters;
 
 import com.intellij.openapi.project.Project;
+import com.intellij.psi.search.GlobalSearchScope;
 
 /**
  * @author dyoma
@@ -32,4 +33,8 @@ public class TextConsoleBuilderFactoryImpl extends TextConsoleBuilderFactory {
     return new TextConsoleBuilderImpl(project);
   }
 
+  @Override
+  public TextConsoleBuilder createBuilder(Project project, GlobalSearchScope scope) {
+    return new TextConsoleBuilderImpl(project, scope);
+  }
 }
\ No newline at end of file
index f90743efe786f34fb2de6338168530fbd26a080c..35719ed127266400fc7b29e2200740f30511c101 100644 (file)
@@ -19,6 +19,7 @@ package com.intellij.execution.filters;
 import com.intellij.execution.impl.ConsoleViewImpl;
 import com.intellij.execution.ui.ConsoleView;
 import com.intellij.openapi.project.Project;
+import com.intellij.psi.search.GlobalSearchScope;
 
 import java.util.ArrayList;
 
@@ -27,11 +28,17 @@ import java.util.ArrayList;
  */
 public class TextConsoleBuilderImpl extends TextConsoleBuilder {
   private final Project myProject;
+  private final GlobalSearchScope myScope;
   private final ArrayList<Filter> myFilters = new ArrayList<Filter>();
   private boolean myViewer;
 
   public TextConsoleBuilderImpl(final Project project) {
+    this(project, GlobalSearchScope.allScope(project));
+  }
+
+  public TextConsoleBuilderImpl(final Project project, GlobalSearchScope scope) {
     myProject = project;
+    myScope = scope;
   }
 
   public ConsoleView getConsole() {
@@ -43,7 +50,7 @@ public class TextConsoleBuilderImpl extends TextConsoleBuilder {
   }
 
   protected ConsoleViewImpl createConsole() {
-    return new ConsoleViewImpl(myProject, myViewer);
+    return new ConsoleViewImpl(myProject, myScope, myViewer, null);
   }
 
   public void addFilter(final Filter filter) {
index d5e20a06b5dd672c7ad475c8b8025408fad6d961..ee8a304c5bfda4baa37bb9cd28e0b6470a6b23a2 100644 (file)
@@ -68,6 +68,7 @@ import com.intellij.pom.Navigatable;
 import com.intellij.psi.PsiDocumentManager;
 import com.intellij.psi.PsiFile;
 import com.intellij.psi.PsiFileFactory;
+import com.intellij.psi.search.GlobalSearchScope;
 import com.intellij.psi.tree.IElementType;
 import com.intellij.util.Alarm;
 import com.intellij.util.EditorPopupHandler;
@@ -237,6 +238,11 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
   }
 
   public ConsoleViewImpl(final Project project, boolean viewer, FileType fileType) {
+    this(project, GlobalSearchScope.allScope(project), viewer, fileType);
+  }
+
+
+  public ConsoleViewImpl(final Project project, GlobalSearchScope searchScope, boolean viewer, FileType fileType) {
     super(new BorderLayout());
     isViewer = viewer;
     myPsiDisposedCheck = new DisposedPsiManagerCheck(project);
@@ -245,8 +251,11 @@ public class ConsoleViewImpl extends JPanel implements ConsoleView, ObservableCo
 
     myCustomFilter = new CompositeFilter(project);
     myPredefinedMessageFilter = new CompositeFilter(project);
-    for (ConsoleFilterProvider filterProvider : Extensions.getExtensions(ConsoleFilterProvider.FILTER_PROVIDERS)) {
-      for (Filter filter : filterProvider.getDefaultFilters(project)) {
+    for (ConsoleFilterProvider eachProvider : Extensions.getExtensions(ConsoleFilterProvider.FILTER_PROVIDERS)) {
+      Filter[] filters = eachProvider instanceof ConsoleFilterProviderEx
+                         ? ((ConsoleFilterProviderEx)eachProvider).getDefaultFilters(project, searchScope)
+                         : eachProvider.getDefaultFilters(project);
+      for (Filter filter : filters) {
         myPredefinedMessageFilter.addFilter(filter);
       }
     }
index 3393e0c4a6b2eb55b7105efbcd58e618b13f955f..74d432d106a76fb7feae51802d765dc7618d4bdd 100644 (file)
@@ -25,7 +25,9 @@ import com.intellij.execution.ui.ConsoleView;
 import com.intellij.execution.ui.ExecutionConsole;
 import com.intellij.execution.util.StoringPropertyContainer;
 import com.intellij.openapi.Disposable;
+import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
+import com.intellij.psi.search.GlobalSearchScope;
 import com.intellij.util.config.AbstractProperty;
 import com.intellij.util.config.BooleanProperty;
 import com.intellij.util.config.Storage;
@@ -46,14 +48,28 @@ public abstract class TestConsoleProperties extends StoringPropertyContainer imp
   private final Project myProject;
   private ConsoleView myConsole;
 
-  protected final HashMap<AbstractProperty, ArrayList<TestFrameworkPropertyListener>> myListeners = new HashMap<AbstractProperty, ArrayList<TestFrameworkPropertyListener>>();
+  protected final HashMap<AbstractProperty, ArrayList<TestFrameworkPropertyListener>> myListeners =
+    new HashMap<AbstractProperty, ArrayList<TestFrameworkPropertyListener>>();
 
   public TestConsoleProperties(final Storage storage, Project project) {
     super(storage);
     myProject = project;
   }
 
-  public Project getProject() { return myProject; }
+  public Project getProject() {
+    return myProject;
+  }
+
+  public GlobalSearchScope getScope() {
+    Module[] modules = getConfiguration().getModules();
+    if (modules.length == 0) return GlobalSearchScope.allScope(myProject);
+   
+    GlobalSearchScope scope = GlobalSearchScope.EMPTY_SCOPE;
+    for (Module each : modules) {
+      scope = scope.uniteWith(GlobalSearchScope.moduleRuntimeScope(each, true));
+    }
+    return scope;
+  }
 
   public <T> void addListener(final AbstractProperty<T> property, final TestFrameworkPropertyListener<T> listener) {
     ArrayList<TestFrameworkPropertyListener> listeners = myListeners.get(property);
index 6d473e2d84934743afb9146bd28912efd906c8ba..6e1880baecc866bae4fdacc4a829c07f7edc9ed6 100644 (file)
@@ -40,7 +40,7 @@ public abstract class BaseTestsOutputConsoleView implements ConsoleView, Observa
 
   public BaseTestsOutputConsoleView(final TestConsoleProperties properties) {
     myProperties = properties;
-    myConsole = TextConsoleBuilderFactory.getInstance().createBuilder(properties.getProject()).getConsole();
+    myConsole = TextConsoleBuilderFactory.getInstance().createBuilder(properties.getProject(), myProperties.getScope()).getConsole();
     myPrinter = new TestsOutputConsolePrinter(myConsole, properties);
     myProperties.setConsole(this);
 
index 495fd82e4d250a1495f50b05f0c795b7b9d12d02..c5793c32088db833971d367db3f6d745f9d7c751 100644 (file)
@@ -19,6 +19,7 @@ package com.intellij.execution.junit2.ui.properties;
 import com.intellij.execution.junit.JUnitConfiguration;
 import com.intellij.execution.testframework.JavaAwareTestConsoleProperties;
 import com.intellij.ide.util.PropertiesComponent;
+import com.intellij.psi.search.GlobalSearchScope;
 import com.intellij.util.config.Storage;
 import org.jetbrains.annotations.NonNls;
 import org.jetbrains.annotations.NotNull;
@@ -39,4 +40,8 @@ public class JUnitConsoleProperties extends JavaAwareTestConsoleProperties {
 
   public JUnitConfiguration getConfiguration() { return myConfiguration; }
 
+  @Override
+  public GlobalSearchScope getScope() {
+    return myConfiguration.getPersistentData().getScope().getSourceScope(myConfiguration).getLibrariesScope();
+  }
 }
index 517c2590fb45826e67c437900d956b203e89500d..ed87ce72230c40ec9adc7cb36c4e4db101589554 100644 (file)
@@ -17,6 +17,7 @@ package com.theoryinpractice.testng.model;
 
 import com.intellij.execution.testframework.JavaAwareTestConsoleProperties;
 import com.intellij.ide.util.PropertiesComponent;
+import com.intellij.psi.search.GlobalSearchScope;
 import com.intellij.util.config.Storage;
 import com.theoryinpractice.testng.configuration.TestNGConfiguration;
 import org.jetbrains.annotations.NonNls;
@@ -35,4 +36,9 @@ public class TestNGConsoleProperties extends JavaAwareTestConsoleProperties {
     {
         return myConfiguration;
     }
+
+  @Override
+  public GlobalSearchScope getScope() {
+    return myConfiguration.getPersistantData().getScope().getSourceScope(myConfiguration).getLibrariesScope();
+  }
 }