From 9abeb8b373ae758eb67e3e4009c96f48f0b918ce Mon Sep 17 00:00:00 2001 From: anna Date: Thu, 13 May 2010 18:10:52 +0400 Subject: [PATCH] get rid of LoactableConfigurationTYpe (I) --- .../applet/AppletConfigurationProducer.java | 121 ++++++++++++++++++ .../applet/AppletConfigurationType.java | 65 +--------- .../ApplicationConfigurationProducer.java | 33 +++++ .../ApplicationConfigurationType.java | 33 +---- .../junit/RuntimeConfigurationProducer.java | 37 ++++-- .../GroovyScriptRunConfigurationProducer.java | 84 +++++++++++- .../GroovyScriptRunConfigurationType.java | 84 +----------- .../junit/JUnitConfigurationProducer.java | 44 +++++++ .../junit/JUnitConfigurationType.java | 37 +----- .../intellij/execution/junit/TestClass.java | 15 ++- .../intellij/execution/junit/TestMethod.java | 16 ++- .../intellij/execution/junit/TestObject.java | 13 +- .../intellij/execution/junit/TestPackage.java | 19 +-- .../execution/MavenConfigurationProducer.java | 86 +++++++++++++ .../execution/MavenRunConfigurationType.java | 30 +---- .../src/main/resources/META-INF/plugin.xml | 1 + .../TestNGConfigurationProducer.java | 34 +++++ .../TestNGConfigurationType.java | 8 +- .../xslt/run/XsltConfigurationProducer.java | 89 +++++++++++++ .../xpath/xslt/run/XsltRunConfigType.java | 39 +----- .../xpath/xpath-view/src/META-INF/plugin.xml | 1 + resources/src/META-INF/IdeaPlugin.xml | 1 + 22 files changed, 582 insertions(+), 308 deletions(-) create mode 100644 java/execution/impl/src/com/intellij/execution/applet/AppletConfigurationProducer.java create mode 100644 plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenConfigurationProducer.java create mode 100644 plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltConfigurationProducer.java diff --git a/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurationProducer.java new file mode 100644 index 000000000000..b91b358e9c71 --- /dev/null +++ b/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurationProducer.java @@ -0,0 +1,121 @@ +/* + * 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: 13-May-2010 + */ +package com.intellij.execution.applet; + +import com.intellij.execution.JavaExecutionUtil; +import com.intellij.execution.Location; +import com.intellij.execution.RunManagerEx; +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; +import com.intellij.execution.junit.JUnitUtil; +import com.intellij.execution.junit.JavaRuntimeConfigurationProducerBase; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Comparing; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiManager; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.util.PsiClassUtil; +import org.jetbrains.annotations.NotNull; + +public class AppletConfigurationProducer extends JavaRuntimeConfigurationProducerBase { + private PsiClass myPsiClass; + + protected AppletConfigurationProducer() { + super(AppletConfigurationType.getInstance()); + } + + @Override + public PsiElement getSourceElement() { + return myPsiClass; + } + + @Override + protected RunnerAndConfigurationSettingsImpl createConfigurationByElement(Location location, ConfigurationContext context) { + location = JavaExecutionUtil.stepIntoSingleClass(location); + final Project project = location.getProject(); + final PsiElement element = location.getPsiElement(); + myPsiClass = getAppletClass(element, PsiManager.getInstance(project)); + if (myPsiClass == null) return null; + RunnerAndConfigurationSettings settings = RunManagerEx.getInstanceEx(project).createConfiguration("", getConfigurationFactory()); + final AppletConfiguration configuration = (AppletConfiguration)settings.getConfiguration(); + configuration.MAIN_CLASS_NAME = JavaExecutionUtil.getRuntimeQualifiedName(myPsiClass); + configuration.setModule(new JUnitUtil.ModuleOfClass().convert(myPsiClass)); + configuration.setName(configuration.getGeneratedName()); + return (RunnerAndConfigurationSettingsImpl)settings; + } + + public int compareTo(Object o) { + return PREFERED; + } + + + private static PsiClass getAppletClass(PsiElement element, final PsiManager manager) { + while (element != null) { + if (element instanceof PsiClass) { + final PsiClass aClass = (PsiClass)element; + if (isAppletClass(aClass, manager)){ + return aClass; + } + } + element = element.getParent(); + } + return null; + } + + + private static boolean isAppletClass(final PsiClass aClass, final PsiManager manager) { + if (!PsiClassUtil.isRunnableClass(aClass, true)) return false; + + final Module module = JavaExecutionUtil.findModule(aClass); + final GlobalSearchScope scope = module != null + ? GlobalSearchScope.moduleWithLibrariesScope(module) + : GlobalSearchScope.projectScope(manager.getProject()); + PsiClass appletClass = JavaPsiFacade.getInstance(manager.getProject()).findClass("java.applet.Applet", scope); + if (appletClass != null) { + if (aClass.isInheritor(appletClass, true)) return true; + } + appletClass = JavaPsiFacade.getInstance(manager.getProject()).findClass("javax.swing.JApplet", scope); + if (appletClass != null) { + if (aClass.isInheritor(appletClass, true)) return true; + } + return false; + } + + @Override + protected RunnerAndConfigurationSettingsImpl findExistingByElement(Location location, + @NotNull RunnerAndConfigurationSettingsImpl[] existingConfigurations + ) { + final PsiClass aClass = getAppletClass(location.getPsiElement(), PsiManager.getInstance(location.getProject())); + if (aClass != null) { + for (RunnerAndConfigurationSettingsImpl existingConfiguration : existingConfigurations) { + if (Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(aClass), + ((AppletConfiguration)existingConfiguration.getConfiguration()).MAIN_CLASS_NAME)) { + return existingConfiguration; + } + } + } + return null; + } +} diff --git a/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurationType.java b/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurationType.java index a6d5652ea3e6..3e03e6e8b1d1 100644 --- a/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurationType.java +++ b/java/execution/impl/src/com/intellij/execution/applet/AppletConfigurationType.java @@ -15,28 +15,19 @@ */ package com.intellij.execution.applet; -import com.intellij.execution.*; +import com.intellij.execution.ExecutionBundle; import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.RunConfiguration; -import com.intellij.execution.junit.JUnitUtil; import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.IconLoader; -import com.intellij.psi.JavaPsiFacade; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiManager; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.util.PsiClassUtil; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import javax.swing.*; -public class AppletConfigurationType implements LocatableConfigurationType { +public class AppletConfigurationType implements ConfigurationType { private final ConfigurationFactory myFactory; private static final Icon ICON = IconLoader.getIcon("/runConfigurations/applet.png"); @@ -65,56 +56,8 @@ public class AppletConfigurationType implements LocatableConfigurationType { return new ConfigurationFactory[]{myFactory}; } - public RunnerAndConfigurationSettings createConfigurationByLocation(Location location) { - location = JavaExecutionUtil.stepIntoSingleClass(location); - final Project project = location.getProject(); - final PsiElement element = location.getPsiElement(); - final PsiClass aClass = getAppletClass(element, PsiManager.getInstance(project)); - if (aClass == null) return null; - RunnerAndConfigurationSettings settings = RunManagerEx.getInstanceEx(project).createConfiguration("", getConfigurationFactories()[0]); - final AppletConfiguration configuration = (AppletConfiguration)settings.getConfiguration(); - configuration.MAIN_CLASS_NAME = JavaExecutionUtil.getRuntimeQualifiedName(aClass); - configuration.setModule(new JUnitUtil.ModuleOfClass().convert(aClass)); - configuration.setName(configuration.getGeneratedName()); - return settings; - } - public boolean isConfigurationByLocation(final RunConfiguration configuration, Location location) { - final PsiClass aClass = getAppletClass(location.getPsiElement(), PsiManager.getInstance(location.getProject())); - return aClass != null && - Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(aClass), ((AppletConfiguration)configuration).MAIN_CLASS_NAME); - } - private static PsiClass getAppletClass(PsiElement element, final PsiManager manager) { - while (element != null) { - if (element instanceof PsiClass) { - final PsiClass aClass = (PsiClass)element; - if (isAppletClass(aClass, manager)){ - return aClass; - } - } - element = element.getParent(); - } - return null; - } - - private static boolean isAppletClass(final PsiClass aClass, final PsiManager manager) { - if (!PsiClassUtil.isRunnableClass(aClass, true)) return false; - - final Module module = JavaExecutionUtil.findModule(aClass); - final GlobalSearchScope scope = module != null - ? GlobalSearchScope.moduleWithLibrariesScope(module) - : GlobalSearchScope.projectScope(manager.getProject()); - PsiClass appletClass = JavaPsiFacade.getInstance(manager.getProject()).findClass("java.applet.Applet", scope); - if (appletClass != null) { - if (aClass.isInheritor(appletClass, true)) return true; - } - appletClass = JavaPsiFacade.getInstance(manager.getProject()).findClass("javax.swing.JApplet", scope); - if (appletClass != null) { - if (aClass.isInheritor(appletClass, true)) return true; - } - return false; - } @NotNull @@ -125,4 +68,4 @@ public class AppletConfigurationType implements LocatableConfigurationType { public static AppletConfigurationType getInstance() { return ContainerUtil.findInstance(Extensions.getExtensions(CONFIGURATION_TYPE_EP), AppletConfigurationType.class); } -} \ No newline at end of file +} diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationProducer.java index 69f0c8e39241..527c976b0e60 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationProducer.java +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationProducer.java @@ -18,16 +18,21 @@ package com.intellij.execution.application; import com.intellij.execution.JavaExecutionUtil; import com.intellij.execution.Location; import com.intellij.execution.RunConfigurationExtension; +import com.intellij.execution.RunManagerEx; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.configurations.ConfigurationUtil; +import com.intellij.execution.impl.RunManagerImpl; import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; import com.intellij.execution.junit.JavaRuntimeConfigurationProducerBase; import com.intellij.execution.junit.RuntimeConfigurationProducer; +import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Comparing; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; import com.intellij.psi.util.PsiMethodUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class ApplicationConfigurationProducer extends JavaRuntimeConfigurationProducerBase implements Cloneable { @@ -86,4 +91,32 @@ public class ApplicationConfigurationProducer extends JavaRuntimeConfigurationPr public int compareTo(final Object o) { return PREFERED; } + + @Override + protected RunnerAndConfigurationSettingsImpl findExistingByElement(Location location, + @NotNull RunnerAndConfigurationSettingsImpl[] existingConfigurations + ) { + final PsiClass aClass = ApplicationConfigurationType.getMainClass(location.getPsiElement()); + if (aClass == null) { + return null; + } + final Module predefinedModule = + ((ApplicationConfiguration)((RunManagerImpl)RunManagerEx.getInstanceEx(location.getProject())) + .getConfigurationTemplate(getConfigurationFactory()) + .getConfiguration()).getConfigurationModule().getModule(); + for (RunnerAndConfigurationSettingsImpl existingConfiguration : existingConfigurations) { + final ApplicationConfiguration appConfiguration = (ApplicationConfiguration)existingConfiguration.getConfiguration(); + if (Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(aClass), appConfiguration.MAIN_CLASS_NAME)) { + if (Comparing.equal(location.getModule(), appConfiguration.getConfigurationModule().getModule())) { + return existingConfiguration; + } + final Module configurationModule = appConfiguration.getConfigurationModule().getModule(); + if (Comparing.equal(location.getModule(), configurationModule)) return existingConfiguration; + if (Comparing.equal(predefinedModule, configurationModule)) { + return existingConfiguration; + } + } + } + return null; + } } diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationType.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationType.java index f457a826bcdd..dc3961a0bdf2 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationType.java +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationType.java @@ -15,14 +15,13 @@ */ package com.intellij.execution.application; -import com.intellij.execution.*; +import com.intellij.execution.ExecutionBundle; +import com.intellij.execution.RunConfigurationExtension; import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.RunConfiguration; -import com.intellij.execution.impl.RunManagerImpl; import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.IconLoader; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; @@ -35,7 +34,7 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; -public class ApplicationConfigurationType implements LocatableConfigurationType { +public class ApplicationConfigurationType implements ConfigurationType { private final ConfigurationFactory myFactory; private static final Icon ICON = IconLoader.getIcon("/runConfigurations/application.png"); @@ -70,30 +69,6 @@ public class ApplicationConfigurationType implements LocatableConfigurationType return new ConfigurationFactory[]{myFactory}; } - public RunnerAndConfigurationSettings createConfigurationByLocation(final Location location) { - return null; - } - - public boolean isConfigurationByLocation(final RunConfiguration configuration, final Location location) { - final PsiClass aClass = getMainClass(location.getPsiElement()); - if (aClass == null) { - return false; - } - if (Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(aClass), ((ApplicationConfiguration)configuration).MAIN_CLASS_NAME)) { - if (Comparing.equal(location.getModule(), ((ApplicationConfiguration)configuration).getConfigurationModule().getModule())) { - return true; - } - final Module configurationModule = ((ApplicationConfiguration)configuration).getConfigurationModule().getModule(); - if (Comparing.equal(location.getModule(), configurationModule)) return true; - - final Module predefinedModule = - ((ApplicationConfiguration)((RunManagerImpl)RunManagerEx.getInstanceEx(location.getProject())).getConfigurationTemplate(myFactory) - .getConfiguration()).getConfigurationModule().getModule(); - return Comparing.equal(predefinedModule, configurationModule); - } - return false; - } - public static PsiClass getMainClass(PsiElement element) { while (element != null) { if (element instanceof PsiClass) { diff --git a/platform/lang-impl/src/com/intellij/execution/junit/RuntimeConfigurationProducer.java b/platform/lang-impl/src/com/intellij/execution/junit/RuntimeConfigurationProducer.java index 22711037dcbb..f088aa243e0e 100644 --- a/platform/lang-impl/src/com/intellij/execution/junit/RuntimeConfigurationProducer.java +++ b/platform/lang-impl/src/com/intellij/execution/junit/RuntimeConfigurationProducer.java @@ -16,7 +16,10 @@ package com.intellij.execution.junit; -import com.intellij.execution.*; +import com.intellij.execution.LocatableConfigurationType; +import com.intellij.execution.Location; +import com.intellij.execution.PsiLocation; +import com.intellij.execution.RunManagerEx; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationType; @@ -28,6 +31,7 @@ import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Comparator; @@ -57,16 +61,12 @@ public abstract class RuntimeConfigurationProducer implements Comparable { final Location _location = PsiLocation.fromPsiElement(psiElement, location != null ? location.getModule() : null); if (_location != null) { // replace with existing configuration if any + final RunManagerEx runManager = RunManagerEx.getInstanceEx(context.getProject()); final ConfigurationType type = result.myConfiguration.getType(); - if (type instanceof LocatableConfigurationType) { - final RunManagerEx runManager = RunManagerEx.getInstanceEx(context.getProject()); - final RunnerAndConfigurationSettingsImpl[] configurations = runManager.getConfigurationSettings(type); - for (final RunnerAndConfigurationSettingsImpl configuration : configurations) { - if (((LocatableConfigurationType)type).isConfigurationByLocation(configuration.getConfiguration(), _location)) { - result.myConfiguration = configuration; - break; - } - } + final RunnerAndConfigurationSettingsImpl[] configurations = runManager.getConfigurationSettings(type); + final RunnerAndConfigurationSettingsImpl configuration = findExistingByElement(_location, configurations); + if (configuration != null) { + result.myConfiguration = configuration; } } } @@ -83,6 +83,23 @@ public abstract class RuntimeConfigurationProducer implements Comparable { @Nullable protected abstract RunnerAndConfigurationSettingsImpl createConfigurationByElement(Location location, ConfigurationContext context); + @Nullable + protected RunnerAndConfigurationSettingsImpl findExistingByElement(final Location location, + @NotNull final RunnerAndConfigurationSettingsImpl[] existingConfigurations) { + if (existingConfigurations.length > 0) { + ConfigurationType type = existingConfigurations[0].getType(); + if (type instanceof LocatableConfigurationType) { + for (final RunnerAndConfigurationSettingsImpl configuration : existingConfigurations) { + if (((LocatableConfigurationType)type).isConfigurationByLocation(configuration.getConfiguration(), location)) { + return configuration; + } + } + } + } + + return null; + } + public RuntimeConfigurationProducer clone() { try { return (RuntimeConfigurationProducer)super.clone(); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java index 6c366ffb65da..82c26ddd41c6 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java @@ -15,13 +15,22 @@ */ package org.jetbrains.plugins.groovy.runner; +import com.intellij.execution.JavaExecutionUtil; import com.intellij.execution.Location; +import com.intellij.execution.RunManagerEx; import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.configurations.RunConfigurationModule; import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; import com.intellij.execution.junit.RuntimeConfigurationProducer; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.*; +import com.intellij.psi.search.GlobalSearchScope; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.extensions.GroovyScriptType; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; @@ -49,7 +58,9 @@ public class GroovyScriptRunConfigurationProducer extends RuntimeConfigurationPr GroovyFile groovyFile = (GroovyFile)file; if (groovyFile.isScript()) { mySourceElement = element; - final RunnerAndConfigurationSettings settings = GroovyScriptRunConfigurationType.getInstance().createConfigurationByLocation(location); + final PsiClass scriptClass = getScriptClass(location.getPsiElement()); + if (scriptClass == null) return null; + final RunnerAndConfigurationSettings settings = createConfiguration(scriptClass); if (settings != null) { final GroovyScriptRunConfiguration configuration = (GroovyScriptRunConfiguration)settings.getConfiguration(); GroovyScriptType.getScriptType(groovyFile).tuneConfiguration(groovyFile, configuration, location); @@ -60,7 +71,74 @@ public class GroovyScriptRunConfigurationProducer extends RuntimeConfigurationPr return null; } + @Override + protected RunnerAndConfigurationSettingsImpl findExistingByElement(Location location, + @NotNull RunnerAndConfigurationSettingsImpl[] existingConfigurations + ) { + for (RunnerAndConfigurationSettingsImpl existingConfiguration : existingConfigurations) { + final RunConfiguration configuration = existingConfiguration.getConfiguration(); + final String path = ((GroovyScriptRunConfiguration)configuration).scriptPath; + if (path != null) { + final PsiFile file = location.getPsiElement().getContainingFile(); + if (file != null) { + final VirtualFile vfile = file.getVirtualFile(); + if (vfile != null && FileUtil.toSystemIndependentName(path).equals(vfile.getPath())) { + return existingConfiguration; + } + } + } + } + return null; + } + + public int compareTo(final Object o) { return PREFERED; } + + private RunnerAndConfigurationSettings createConfiguration(final PsiClass aClass) { + final Project project = aClass.getProject(); + RunnerAndConfigurationSettings settings = RunManagerEx.getInstanceEx(project).createConfiguration("", getConfigurationFactory()); + final GroovyScriptRunConfiguration configuration = (GroovyScriptRunConfiguration) settings.getConfiguration(); + final PsiFile file = aClass.getContainingFile(); + final PsiDirectory dir = file.getContainingDirectory(); + assert dir != null; + configuration.setWorkDir(dir.getVirtualFile().getPath()); + final VirtualFile vFile = file.getVirtualFile(); + assert vFile != null; + configuration.scriptPath = vFile.getPath(); + RunConfigurationModule module = configuration.getConfigurationModule(); + + + String name = getConfigurationName(aClass, module); + configuration.setName(name); + configuration.setModule(JavaExecutionUtil.findModule(aClass)); + return settings; + } + + private static String getConfigurationName(PsiClass aClass, RunConfigurationModule module) { + String qualifiedName = aClass.getQualifiedName(); + Project project = module.getProject(); + if (qualifiedName != null) { + PsiClass psiClass = JavaPsiFacade.getInstance(project).findClass(qualifiedName.replace('$', '.'), GlobalSearchScope.projectScope(project)); + if (psiClass != null) { + return psiClass.getName(); + } else { + int lastDot = qualifiedName.lastIndexOf('.'); + if (lastDot == -1 || lastDot == qualifiedName.length() - 1) { + return qualifiedName; + } + return qualifiedName.substring(lastDot + 1, qualifiedName.length()); + } + } + return module.getModuleName(); + } + + @Nullable + private static PsiClass getScriptClass(PsiElement element) { + final PsiFile file = element.getContainingFile(); + if (!(file instanceof GroovyFile)) return null; + return ((GroovyFile) file).getScriptClass(); + } + } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationType.java index bbbce7d9eb4b..f49c21352aa7 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationType.java @@ -16,25 +16,18 @@ package org.jetbrains.plugins.groovy.runner; -import com.intellij.execution.*; import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.ConfigurationTypeUtil; import com.intellij.execution.configurations.RunConfiguration; -import com.intellij.execution.configurations.RunConfigurationModule; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.*; -import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.GroovyIcons; -import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import javax.swing.*; -public class GroovyScriptRunConfigurationType implements LocatableConfigurationType { +public class GroovyScriptRunConfigurationType implements ConfigurationType { private final GroovyFactory myConfigurationFactory; public GroovyScriptRunConfigurationType() { @@ -63,83 +56,12 @@ public class GroovyScriptRunConfigurationType implements LocatableConfigurationT return new ConfigurationFactory[]{myConfigurationFactory}; } - public RunnerAndConfigurationSettings createConfigurationByLocation(Location location) { - final PsiElement element = location.getPsiElement(); - final PsiClass clazz = getScriptClass(element); - if (clazz == null) return null; - return createConfiguration(clazz); - } - - public boolean isConfigurationByLocation(RunConfiguration configuration, Location location) { - final String path = ((GroovyScriptRunConfiguration)configuration).scriptPath; - if (path == null) { - return false; - } - - final PsiFile file = location.getPsiElement().getContainingFile(); - if (file == null) { - return false; - } - - final VirtualFile vfile = file.getVirtualFile(); - if (vfile == null) { - return false; - } - - return FileUtil.toSystemIndependentName(path).equals(vfile.getPath()); - } - - private RunnerAndConfigurationSettings createConfiguration(final PsiClass aClass) { - final Project project = aClass.getProject(); - RunnerAndConfigurationSettings settings = RunManagerEx.getInstanceEx(project).createConfiguration("", myConfigurationFactory); - final GroovyScriptRunConfiguration configuration = (GroovyScriptRunConfiguration) settings.getConfiguration(); - final PsiFile file = aClass.getContainingFile(); - final PsiDirectory dir = file.getContainingDirectory(); - assert dir != null; - configuration.setWorkDir(dir.getVirtualFile().getPath()); - final VirtualFile vFile = file.getVirtualFile(); - assert vFile != null; - configuration.scriptPath = vFile.getPath(); - RunConfigurationModule module = configuration.getConfigurationModule(); - - - String name = getConfigurationName(aClass, module); - configuration.setName(name); - configuration.setModule(JavaExecutionUtil.findModule(aClass)); - return settings; - } - - private static String getConfigurationName(PsiClass aClass, RunConfigurationModule module) { - String qualifiedName = aClass.getQualifiedName(); - Project project = module.getProject(); - if (qualifiedName != null) { - PsiClass psiClass = JavaPsiFacade.getInstance(project).findClass(qualifiedName.replace('$', '.'), GlobalSearchScope.projectScope(project)); - if (psiClass != null) { - return psiClass.getName(); - } else { - int lastDot = qualifiedName.lastIndexOf('.'); - if (lastDot == -1 || lastDot == qualifiedName.length() - 1) { - return qualifiedName; - } - return qualifiedName.substring(lastDot + 1, qualifiedName.length()); - } - } - return module.getModuleName(); - } - - @Nullable - private static PsiClass getScriptClass(PsiElement element) { - final PsiFile file = element.getContainingFile(); - if (!(file instanceof GroovyFile)) return null; - return ((GroovyFile) file).getScriptClass(); - } - public static GroovyScriptRunConfigurationType getInstance() { return ConfigurationTypeUtil.findConfigurationType(GroovyScriptRunConfigurationType.class); } public static class GroovyFactory extends ConfigurationFactory { - public GroovyFactory(LocatableConfigurationType type) { + public GroovyFactory(ConfigurationType type) { super(type); } diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java index b9b992e128d8..02b66c131637 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationProducer.java @@ -16,6 +16,15 @@ package com.intellij.execution.junit; +import com.intellij.execution.Location; +import com.intellij.execution.RunManagerEx; +import com.intellij.execution.impl.RunManagerImpl; +import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.util.Comparing; +import com.intellij.psi.*; +import org.jetbrains.annotations.NotNull; + public abstract class JUnitConfigurationProducer extends JavaRuntimeConfigurationProducerBase implements Cloneable { public static final RuntimeConfigurationProducer[] PROTOTYPES = new RuntimeConfigurationProducer[]{ new AllInPackageConfigurationProducer(), @@ -31,4 +40,39 @@ public abstract class JUnitConfigurationProducer extends JavaRuntimeConfiguratio if (o instanceof TestMethodConfigurationProducer) return -PREFERED; return PREFERED; } + + @Override + protected RunnerAndConfigurationSettingsImpl findExistingByElement(@NotNull Location location, + @NotNull RunnerAndConfigurationSettingsImpl[] existingConfigurations + ) { + final Module predefinedModule = + ((JUnitConfiguration)((RunManagerImpl)RunManagerEx.getInstanceEx(location.getProject())) + .getConfigurationTemplate(getConfigurationFactory()) + .getConfiguration()).getConfigurationModule().getModule(); + final PsiElement element = location.getPsiElement(); + final PsiClass testClass = JUnitUtil.getTestClass(element); + final PsiMethod testMethod = JUnitUtil.getTestMethod(element); + final PsiPackage testPackage; + if (element instanceof PsiPackage) { + testPackage = (PsiPackage)element; + } else if (element instanceof PsiDirectory){ + testPackage = JavaDirectoryService.getInstance().getPackage(((PsiDirectory)element)); + } else { + testPackage = null; + } + for (RunnerAndConfigurationSettingsImpl existingConfiguration : existingConfigurations) { + final JUnitConfiguration unitConfiguration = (JUnitConfiguration)existingConfiguration.getConfiguration(); + final TestObject testobject = unitConfiguration.getTestObject(); + if (testobject != null) { + if (testobject.isConfiguredByElement(unitConfiguration, testClass, testMethod, testPackage)) { + final Module configurationModule = unitConfiguration.getConfigurationModule().getModule(); + if (Comparing.equal(location.getModule(), configurationModule)) return existingConfiguration; + if (Comparing.equal(predefinedModule, configurationModule)) { + return existingConfiguration; + } + } + } + } + return null; + } } diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationType.java b/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationType.java index 37bc86820bd6..00eedbb85d07 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationType.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitConfigurationType.java @@ -16,23 +16,21 @@ package com.intellij.execution.junit; -import com.intellij.execution.*; +import com.intellij.execution.ExecutionBundle; +import com.intellij.execution.RunConfigurationExtension; import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.RunConfiguration; -import com.intellij.execution.impl.RunManagerImpl; import com.intellij.openapi.extensions.Extensions; -import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.IconLoader; -import com.intellij.psi.PsiElement; import com.intellij.util.containers.ContainerUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -public class JUnitConfigurationType implements LocatableConfigurationType { +public class JUnitConfigurationType implements ConfigurationType { private static final Icon ICON = IconLoader.getIcon("/runConfigurations/junit.png"); private final ConfigurationFactory myFactory; @@ -66,33 +64,6 @@ public class JUnitConfigurationType implements LocatableConfigurationType { return new ConfigurationFactory[]{myFactory}; } - public RunnerAndConfigurationSettings createConfigurationByLocation(final Location location) { - return null; - } - - public boolean isConfigurationByLocation(final RunConfiguration configuration, final Location location) { - final JUnitConfiguration unitConfiguration = (JUnitConfiguration)configuration; - final TestObject testobject = unitConfiguration.getTestObject(); - if (testobject == null) { - return false; - } - else { - final PsiElement element = location.getPsiElement(); - if (testobject.isConfiguredByElement(unitConfiguration, element)) { - final Module configurationModule = unitConfiguration.getConfigurationModule().getModule(); - if (Comparing.equal(location.getModule(), configurationModule)) return true; - - final Module predefinedModule = - ((JUnitConfiguration)((RunManagerImpl)RunManagerEx.getInstanceEx(location.getProject())).getConfigurationTemplate(myFactory) - .getConfiguration()).getConfigurationModule().getModule(); - return Comparing.equal(predefinedModule, configurationModule); - } - else { - return false; - } - } - } - @NotNull public String getId() { return "JUnit"; diff --git a/plugins/junit/src/com/intellij/execution/junit/TestClass.java b/plugins/junit/src/com/intellij/execution/junit/TestClass.java index 31be7eab4c6c..25acd5c5fa45 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestClass.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestClass.java @@ -23,6 +23,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiPackage; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.rt.execution.junit.JUnitStarter; @@ -56,17 +57,19 @@ class TestClass extends TestObject { return RefactoringListeners.getClassOrPackageListener(element, configuration.myClass); } - public boolean isConfiguredByElement(final JUnitConfiguration configuration, final PsiElement element) { - final PsiClass aClass = JUnitUtil.getTestClass(element); - if (aClass == null) { + public boolean isConfiguredByElement(final JUnitConfiguration configuration, + PsiClass testClass, + PsiMethod testMethod, + PsiPackage testPackage) { + + if (testClass == null) { return false; } - final PsiMethod method = JUnitUtil.getTestMethod(element); - if (method != null) { + if (testMethod != null) { // 'test class' configuration is not equal to the 'test method' configuration! return false; } - return Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(aClass), configuration.getPersistentData().getMainClassName()); + return Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(testClass), configuration.getPersistentData().getMainClassName()); } public void checkConfiguration() throws RuntimeConfigurationException { diff --git a/plugins/junit/src/com/intellij/execution/junit/TestMethod.java b/plugins/junit/src/com/intellij/execution/junit/TestMethod.java index 0f78064323fa..5ad9dbf38108 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestMethod.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestMethod.java @@ -24,6 +24,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiPackage; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.rt.execution.junit.JUnitStarter; @@ -99,15 +100,16 @@ class TestMethod extends TestObject { } - public boolean isConfiguredByElement(final JUnitConfiguration configuration, final PsiElement element) { - final PsiClass aClass = JUnitUtil.getTestClass(element); - if (aClass == null) return false; - final PsiMethod method = JUnitUtil.getTestMethod(element); - if (method == null) return false; + public boolean isConfiguredByElement(final JUnitConfiguration configuration, + PsiClass testClass, + PsiMethod testMethod, + PsiPackage testPackage) { + if (testClass == null) return false; + if (testMethod == null) return false; final JUnitConfiguration.Data data = configuration.getPersistentData(); return - Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(aClass), data.getMainClassName()) && - Comparing.equal(method.getName(), data.getMethodName()); + Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(testClass), data.getMainClassName()) && + Comparing.equal(testMethod.getName(), data.getMethodName()); } public void checkConfiguration() throws RuntimeConfigurationException { diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java index 851af6aef40c..520f20d8bbad 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java @@ -49,7 +49,10 @@ import com.intellij.openapi.util.Disposer; import com.intellij.openapi.util.Getter; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiMethod; +import com.intellij.psi.PsiPackage; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.rt.execution.junit.IDEAJUnitListener; import com.intellij.rt.execution.junit.JUnitStarter; @@ -120,7 +123,10 @@ public abstract class TestObject implements JavaCommandLine { public abstract RefactoringElementListener getListener(PsiElement element, JUnitConfiguration configuration); - public abstract boolean isConfiguredByElement(JUnitConfiguration configuration, PsiElement element); + public abstract boolean isConfiguredByElement(JUnitConfiguration configuration, + PsiClass testClass, + PsiMethod testMethod, + PsiPackage testPackage); protected void configureModule(final JavaParameters parameters, final RunConfigurationModule configurationModule, final String mainClassName) throws CantRunException { @@ -138,7 +144,10 @@ public abstract class TestObject implements JavaCommandLine { throw new RuntimeException(String.valueOf(myConfiguration)); } - public boolean isConfiguredByElement(final JUnitConfiguration configuration, final PsiElement element) { + public boolean isConfiguredByElement(final JUnitConfiguration configuration, + PsiClass testClass, + PsiMethod testMethod, + PsiPackage testPackage) { return false; } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestPackage.java b/plugins/junit/src/com/intellij/execution/junit/TestPackage.java index d56a1242fdc1..4dca76e48e5b 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestPackage.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestPackage.java @@ -165,19 +165,12 @@ public class TestPackage extends TestObject { return RefactoringListeners.getListener((PsiPackage)element, configuration.myPackage); } - public boolean isConfiguredByElement(final JUnitConfiguration configuration, final PsiElement element) { - final PsiPackage aPackage; - if (element instanceof PsiPackage) { - aPackage = (PsiPackage)element; - } - else if (element instanceof PsiDirectory) { - aPackage = JavaDirectoryService.getInstance().getPackage(((PsiDirectory)element)); - } - else { - return false; - } - return aPackage != null - && Comparing.equal(aPackage.getQualifiedName(), configuration.getPersistentData().getPackageName()); + public boolean isConfiguredByElement(final JUnitConfiguration configuration, + PsiClass testClass, + PsiMethod testMethod, + PsiPackage testPackage) { + return testPackage != null + && Comparing.equal(testPackage.getQualifiedName(), configuration.getPersistentData().getPackageName()); } public void checkConfiguration() throws RuntimeConfigurationException { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenConfigurationProducer.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenConfigurationProducer.java new file mode 100644 index 000000000000..00be0afb5e7d --- /dev/null +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenConfigurationProducer.java @@ -0,0 +1,86 @@ +/* + * 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: 13-May-2010 + */ +package org.jetbrains.idea.maven.execution; + +import com.intellij.execution.Location; +import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; +import com.intellij.execution.junit.RuntimeConfigurationProducer; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.idea.maven.project.MavenProjectsManager; + +import java.util.Collection; +import java.util.List; + +public class MavenConfigurationProducer extends RuntimeConfigurationProducer{ + private PsiElement myPsiElement; + + public MavenConfigurationProducer() { + super(MavenRunConfigurationType.getInstance()); + } + + @Override + public PsiElement getSourceElement() { + return myPsiElement; + } + + @Override + protected RunnerAndConfigurationSettingsImpl createConfigurationByElement(Location location, ConfigurationContext context) { + myPsiElement = location.getPsiElement(); + final MavenRunnerParameters params = createBuildParameters(location); + if (params == null) return null; + return (RunnerAndConfigurationSettingsImpl)MavenRunConfigurationType.createRunnerAndConfigurationSettings(null, null, params, location.getProject()); + } + + @Override + protected RunnerAndConfigurationSettingsImpl findExistingByElement(Location location, + @NotNull RunnerAndConfigurationSettingsImpl[] existingConfigurations + ) { + + final MavenRunnerParameters runnerParameters = createBuildParameters(location); + for (RunnerAndConfigurationSettingsImpl existingConfiguration : existingConfigurations) { + final RunConfiguration configuration = existingConfiguration.getConfiguration(); + if (configuration instanceof MavenRunConfiguration && + ((MavenRunConfiguration)configuration).getRunnerParameters().equals(runnerParameters)) { + return existingConfiguration; + } + } + return null; + } + + private static MavenRunnerParameters createBuildParameters(Location l) { + if (!(l instanceof MavenGoalLocation)) return null; + + VirtualFile f = ((PsiFile)l.getPsiElement()).getVirtualFile(); + List goals = ((MavenGoalLocation)l).getGoals(); + Collection profiles = MavenProjectsManager.getInstance(l.getProject()).getExplicitProfiles(); + + return new MavenRunnerParameters(true, f.getParent().getPath(), goals, profiles); + } + + public int compareTo(Object o) { + return PREFERED; //To change body of implemented methods use File | Settings | File Templates. + } +} diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java index 7bbb18257359..0fae9fccfe1c 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/execution/MavenRunConfigurationType.java @@ -18,6 +18,7 @@ package org.jetbrains.idea.maven.execution; import com.intellij.compiler.options.CompileStepBeforeRun; import com.intellij.execution.*; import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.ConfigurationTypeUtil; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.executors.DefaultRunExecutor; @@ -31,7 +32,6 @@ import com.intellij.openapi.util.Key; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -41,17 +41,20 @@ import org.jetbrains.idea.maven.project.MavenProjectsManager; import org.jetbrains.idea.maven.utils.MavenUtil; import javax.swing.*; -import java.util.Collection; import java.util.List; /** * @author Vladislav.Kaznacheev */ -public class MavenRunConfigurationType implements LocatableConfigurationType { +public class MavenRunConfigurationType implements ConfigurationType { private final ConfigurationFactory myFactory; private static final Icon ICON = IconLoader.getIcon("/images/phase.png"); private static final int MAX_NAME_LENGTH = 40; + public static MavenRunConfigurationType getInstance() { + return ConfigurationTypeUtil.findConfigurationType(MavenRunConfigurationType.class); + } + /** * reflection */ @@ -142,26 +145,7 @@ public class MavenRunConfigurationType implements LocatableConfigurationType { return null; } - public RunnerAndConfigurationSettings createConfigurationByLocation(Location l) { - final MavenRunnerParameters params = createBuildParameters(l); - if (params == null) return null; - return createRunnerAndConfigurationSettings(null, null, params, l.getProject()); - } - public boolean isConfigurationByLocation(RunConfiguration configuration, Location location) { - return configuration instanceof MavenRunConfiguration && - ((MavenRunConfiguration)configuration).getRunnerParameters().equals(createBuildParameters(location)); - } - - private static MavenRunnerParameters createBuildParameters(Location l) { - if (!(l instanceof MavenGoalLocation)) return null; - - VirtualFile f = ((PsiFile)l.getPsiElement()).getVirtualFile(); - List goals = ((MavenGoalLocation)l).getGoals(); - Collection profiles = MavenProjectsManager.getInstance(l.getProject()).getExplicitProfiles(); - - return new MavenRunnerParameters(true, f.getParent().getPath(), goals, profiles); - } public static void runConfiguration(Project project, MavenRunnerParameters params, @@ -195,7 +179,7 @@ public class MavenRunConfigurationType implements LocatableConfigurationType { } } - private static RunnerAndConfigurationSettings createRunnerAndConfigurationSettings(MavenGeneralSettings generalSettings, + static RunnerAndConfigurationSettings createRunnerAndConfigurationSettings(MavenGeneralSettings generalSettings, MavenRunnerSettings runnerSettings, MavenRunnerParameters params, Project project) { diff --git a/plugins/maven/src/main/resources/META-INF/plugin.xml b/plugins/maven/src/main/resources/META-INF/plugin.xml index 9dbc9160afb8..48f63d089a7d 100644 --- a/plugins/maven/src/main/resources/META-INF/plugin.xml +++ b/plugins/maven/src/main/resources/META-INF/plugin.xml @@ -26,6 +26,7 @@ + diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java index d9283765c6c4..878a1e326b19 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationProducer.java @@ -20,11 +20,45 @@ */ package com.theoryinpractice.testng.configuration; +import com.intellij.execution.Location; +import com.intellij.execution.RunManagerEx; +import com.intellij.execution.impl.RunManagerImpl; +import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; import com.intellij.execution.junit.JavaRuntimeConfigurationProducerBase; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.util.Comparing; +import com.intellij.psi.PsiElement; +import com.theoryinpractice.testng.model.TestData; +import org.jetbrains.annotations.NotNull; public abstract class TestNGConfigurationProducer extends JavaRuntimeConfigurationProducerBase implements Cloneable { public TestNGConfigurationProducer() { super(TestNGConfigurationType.getInstance()); } + + @Override + protected RunnerAndConfigurationSettingsImpl findExistingByElement(Location location, + @NotNull RunnerAndConfigurationSettingsImpl[] existingConfigurations + ) { + final Module predefinedModule = + ((TestNGConfiguration)((RunManagerImpl)RunManagerEx.getInstanceEx(location.getProject())) + .getConfigurationTemplate(getConfigurationFactory()) + .getConfiguration()).getConfigurationModule().getModule(); + for (RunnerAndConfigurationSettingsImpl existingConfiguration : existingConfigurations) { + TestNGConfiguration config = (TestNGConfiguration)existingConfiguration.getConfiguration(); + TestData testobject = config.getPersistantData(); + if (testobject != null){ + final PsiElement element = location.getPsiElement(); + if (testobject.isConfiguredByElement(element)) { + final Module configurationModule = config.getConfigurationModule().getModule(); + if (Comparing.equal(location.getModule(), configurationModule)) return existingConfiguration; + if(Comparing.equal(predefinedModule, configurationModule)) { + return existingConfiguration; + } + } + } + } + return null; + } } \ No newline at end of file diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationType.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationType.java index 24799710f90f..d3a70ee22127 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationType.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationType.java @@ -22,8 +22,12 @@ */ package com.theoryinpractice.testng.configuration; -import com.intellij.execution.*; +import com.intellij.execution.Location; +import com.intellij.execution.RunConfigurationExtension; +import com.intellij.execution.RunManagerEx; +import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.ConfigurationTypeUtil; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.impl.RunManagerImpl; @@ -38,7 +42,7 @@ import org.jetbrains.annotations.NotNull; import javax.swing.*; -public class TestNGConfigurationType implements LocatableConfigurationType +public class TestNGConfigurationType implements ConfigurationType { private static final Logger LOGGER = Logger.getInstance("TestNG Runner"); private static final Icon ICON = IconLoader.getIcon("/resources/testNG.png"); diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltConfigurationProducer.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltConfigurationProducer.java new file mode 100644 index 000000000000..7cb859be5e99 --- /dev/null +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltConfigurationProducer.java @@ -0,0 +1,89 @@ +/* + * 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: 13-May-2010 + */ +package org.intellij.lang.xpath.xslt.run; + +import com.intellij.execution.Location; +import com.intellij.execution.RunManager; +import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.configurations.ConfigurationTypeUtil; +import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl; +import com.intellij.execution.junit.RuntimeConfigurationProducer; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiElement; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.psi.xml.XmlFile; +import org.intellij.lang.xpath.xslt.XsltSupport; +import org.jetbrains.annotations.NotNull; + +import java.io.File; + +public class XsltConfigurationProducer extends RuntimeConfigurationProducer{ + private XmlFile myFile; + + public XsltConfigurationProducer() { + super(ConfigurationTypeUtil.findConfigurationType(XsltRunConfigType.class)); + } + + @Override + public PsiElement getSourceElement() { + return myFile; + } + + @Override + protected RunnerAndConfigurationSettingsImpl createConfigurationByElement(Location location, ConfigurationContext context) { + final XmlFile file = PsiTreeUtil.getParentOfType(location.getPsiElement(), XmlFile.class, false); + if (file != null && file.isPhysical() && XsltSupport.isXsltFile(file)) { + myFile = file; + final Project project = myFile.getProject(); + final RunnerAndConfigurationSettings settings = + RunManager.getInstance(project).createRunConfiguration(myFile.getName(), getConfigurationFactory()); + ((XsltRunConfiguration)settings.getConfiguration()).initFromFile(myFile); + return (RunnerAndConfigurationSettingsImpl)settings; + } + return null; + } + + public int compareTo(Object o) { + return PREFERED; + } + + + @Override + protected RunnerAndConfigurationSettingsImpl findExistingByElement(Location location, + @NotNull RunnerAndConfigurationSettingsImpl[] existingConfigurations + ) { + final XmlFile file = PsiTreeUtil.getParentOfType(location.getPsiElement(), XmlFile.class, false); + if (file != null && file.isPhysical() && XsltSupport.isXsltFile(file)) { + for (RunnerAndConfigurationSettingsImpl existingConfiguration : existingConfigurations) { + final RunConfiguration configuration = existingConfiguration.getConfiguration(); + if (configuration instanceof XsltRunConfiguration) { + if (file.getVirtualFile().getPath().replace('/', File.separatorChar) + .equals(((XsltRunConfiguration)configuration).getXsltFile())) { + return existingConfiguration; + } + } + } + } + return null; + } +} \ No newline at end of file diff --git a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfigType.java b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfigType.java index c6af6fa61d1c..422736808db5 100644 --- a/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfigType.java +++ b/plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/run/XsltRunConfigType.java @@ -15,27 +15,17 @@ */ package org.intellij.lang.xpath.xslt.run; -import com.intellij.execution.LocatableConfigurationType; -import com.intellij.execution.Location; -import com.intellij.execution.RunManager; -import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.IconLoader; -import com.intellij.psi.PsiElement; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.xml.XmlFile; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import org.intellij.lang.xpath.xslt.XsltSupport; - import javax.swing.*; -import java.io.File; -public class XsltRunConfigType implements ConfigurationType, LocatableConfigurationType { +public class XsltRunConfigType implements ConfigurationType { private final ConfigurationFactory myFactory = new MyConfigurationFactory(); public String getDisplayName() { @@ -70,32 +60,5 @@ public class XsltRunConfigType implements ConfigurationType, LocatableConfigurat } } - @SuppressWarnings({"RawUseOfParameterizedType"}) - public RunnerAndConfigurationSettings createConfigurationByLocation(Location location) { - final XmlFile file = PsiTreeUtil.getParentOfType(location.getPsiElement(), XmlFile.class, false); - if (file != null) { - if (file.isPhysical() && XsltSupport.isXsltFile(file)) { - final Project project = file.getProject(); - final RunnerAndConfigurationSettings settings = RunManager.getInstance(project).createRunConfiguration(file.getName(), myFactory); - ((XsltRunConfiguration)settings.getConfiguration()).initFromFile(file); - return settings; - } - } - return null; - } - public boolean isConfigurationByLocation(RunConfiguration runConfiguration, Location location) { - return isConfigurationByElement(runConfiguration, location.getPsiElement()); - } - - public boolean isConfigurationByElement(RunConfiguration configuration, PsiElement element) { - final XmlFile file = PsiTreeUtil.getParentOfType(element, XmlFile.class, false); - if (configuration instanceof XsltRunConfiguration) { - if (file != null && file.isPhysical() && XsltSupport.isXsltFile(file)) { - //noinspection ConstantConditions - return file.getVirtualFile().getPath().replace('/', File.separatorChar).equals(((XsltRunConfiguration)configuration).getXsltFile()); - } - } - return false; - } } diff --git a/plugins/xpath/xpath-view/src/META-INF/plugin.xml b/plugins/xpath/xpath-view/src/META-INF/plugin.xml index b98eb3565368..07ac30258dc4 100644 --- a/plugins/xpath/xpath-view/src/META-INF/plugin.xml +++ b/plugins/xpath/xpath-view/src/META-INF/plugin.xml @@ -50,6 +50,7 @@ + +