diff --git a/java/execution/impl/src/com/intellij/execution/application/AbstractApplicationConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/application/AbstractApplicationConfigurationProducer.java new file mode 100644 index 000000000000..8c895f232ac5 --- /dev/null +++ b/java/execution/impl/src/com/intellij/execution/application/AbstractApplicationConfigurationProducer.java @@ -0,0 +1,112 @@ +/* + * Copyright 2000-2009 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.execution.application; + +import com.intellij.codeInsight.TestFrameworks; +import com.intellij.execution.JavaExecutionUtil; +import com.intellij.execution.Location; +import com.intellij.execution.actions.ConfigurationContext; +import com.intellij.execution.configurations.ConfigurationUtil; +import com.intellij.execution.junit.JavaRunConfigurationProducerBase; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.Ref; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiMethod; +import com.intellij.psi.util.PsiMethodUtil; +import com.intellij.psi.util.PsiTreeUtil; +import org.jetbrains.annotations.Nullable; + +public abstract class AbstractApplicationConfigurationProducer extends JavaRunConfigurationProducerBase { + + public AbstractApplicationConfigurationProducer(final ApplicationConfigurationType configurationType) { + super(configurationType); + } + + @Override + protected boolean setupConfigurationFromContext(T configuration, ConfigurationContext context, Ref sourceElement) { + final Location contextLocation = context.getLocation(); + if (contextLocation == null) { + return false; + } + final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation); + if (location == null) { + return false; + } + final PsiElement element = location.getPsiElement(); + if (!element.isPhysical()) { + return false; + } + PsiElement currentElement = element; + PsiMethod method; + while ((method = findMain(currentElement)) != null) { + final PsiClass aClass = method.getContainingClass(); + if (ConfigurationUtil.MAIN_CLASS.value(aClass)) { + sourceElement.set(method); + setupConfiguration(configuration, aClass, context); + return true; + } + currentElement = method.getParent(); + } + final PsiClass aClass = ApplicationConfigurationType.getMainClass(element); + if (aClass == null) { + return false; + } + sourceElement.set(aClass); + setupConfiguration(configuration, aClass, context); + return true; + } + + private void setupConfiguration(T configuration, final PsiClass aClass, final ConfigurationContext context) { + configuration.MAIN_CLASS_NAME = JavaExecutionUtil.getRuntimeQualifiedName(aClass); + configuration.setGeneratedName(); + setupConfigurationModule(context, configuration); + } + + @Nullable + private static PsiMethod findMain(PsiElement element) { + PsiMethod method; + while ((method = PsiTreeUtil.getParentOfType(element, PsiMethod.class)) != null) { + if (PsiMethodUtil.isMainMethod(method)) return method; + else element = method.getParent(); + } + return null; + } + + @Override + public boolean isConfigurationFromContext(T appConfiguration, ConfigurationContext context) { + final PsiElement location = context.getPsiLocation(); + final PsiClass aClass = ApplicationConfigurationType.getMainClass(location); + if (aClass != null && Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(aClass), appConfiguration.MAIN_CLASS_NAME)) { + final PsiMethod method = PsiTreeUtil.getParentOfType(location, PsiMethod.class, false); + if (method != null && TestFrameworks.getInstance().isTestMethod(method)) { + return false; + } + + final Module configurationModule = appConfiguration.getConfigurationModule().getModule(); + if (Comparing.equal(context.getModule(), configurationModule)) return true; + + ApplicationConfiguration template = + (ApplicationConfiguration)context.getRunManager().getConfigurationTemplate(getConfigurationFactory()).getConfiguration(); + final Module predefinedModule = template.getConfigurationModule().getModule(); + if (Comparing.equal(predefinedModule, configurationModule)) { + return true; + } + } + return false; + } +} 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 52924eba31b8..6ac44307a751 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationProducer.java +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfigurationProducer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2015 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. @@ -15,98 +15,8 @@ */ package com.intellij.execution.application; -import com.intellij.codeInsight.TestFrameworks; -import com.intellij.execution.JavaExecutionUtil; -import com.intellij.execution.Location; -import com.intellij.execution.actions.ConfigurationContext; -import com.intellij.execution.configurations.ConfigurationUtil; -import com.intellij.execution.junit.JavaRunConfigurationProducerBase; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.Ref; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.util.PsiMethodUtil; -import com.intellij.psi.util.PsiTreeUtil; -import org.jetbrains.annotations.Nullable; - -public class ApplicationConfigurationProducer extends JavaRunConfigurationProducerBase { - - public ApplicationConfigurationProducer(final ApplicationConfigurationType configurationType) { - super(configurationType); - } - - @Override - protected boolean setupConfigurationFromContext(T configuration, ConfigurationContext context, Ref sourceElement) { - final Location contextLocation = context.getLocation(); - if (contextLocation == null) { - return false; - } - final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation); - if (location == null) { - return false; - } - final PsiElement element = location.getPsiElement(); - if (!element.isPhysical()) { - return false; - } - PsiElement currentElement = element; - PsiMethod method; - while ((method = findMain(currentElement)) != null) { - final PsiClass aClass = method.getContainingClass(); - if (ConfigurationUtil.MAIN_CLASS.value(aClass)) { - sourceElement.set(method); - setupConfiguration(configuration, aClass, context); - return true; - } - currentElement = method.getParent(); - } - final PsiClass aClass = ApplicationConfigurationType.getMainClass(element); - if (aClass == null) { - return false; - } - sourceElement.set(aClass); - setupConfiguration(configuration, aClass, context); - return true; - } - - private void setupConfiguration(T configuration, final PsiClass aClass, final ConfigurationContext context) { - configuration.MAIN_CLASS_NAME = JavaExecutionUtil.getRuntimeQualifiedName(aClass); - configuration.setGeneratedName(); - setupConfigurationModule(context, configuration); - } - - @Nullable - private static PsiMethod findMain(PsiElement element) { - PsiMethod method; - while ((method = PsiTreeUtil.getParentOfType(element, PsiMethod.class)) != null) { - if (PsiMethodUtil.isMainMethod(method)) return method; - else element = method.getParent(); - } - return null; - } - - @Override - public boolean isConfigurationFromContext(T appConfiguration, ConfigurationContext context) { - final PsiElement location = context.getPsiLocation(); - final PsiClass aClass = ApplicationConfigurationType.getMainClass(location); - if (aClass != null && Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(aClass), appConfiguration.MAIN_CLASS_NAME)) { - final PsiMethod method = PsiTreeUtil.getParentOfType(location, PsiMethod.class, false); - if (method != null && TestFrameworks.getInstance().isTestMethod(method)) { - return false; - } - - final Module configurationModule = appConfiguration.getConfigurationModule().getModule(); - if (Comparing.equal(context.getModule(), configurationModule)) return true; - - ApplicationConfiguration template = - (ApplicationConfiguration)context.getRunManager().getConfigurationTemplate(getConfigurationFactory()).getConfiguration(); - final Module predefinedModule = template.getConfigurationModule().getModule(); - if (Comparing.equal(predefinedModule, configurationModule)) { - return true; - } - } - return false; +public class ApplicationConfigurationProducer extends AbstractApplicationConfigurationProducer { + public ApplicationConfigurationProducer() { + super(ApplicationConfigurationType.getInstance()); } } diff --git a/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchConfigurationProducer.java index 6e716b31e13b..24f04d38ce71 100644 --- a/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchConfigurationProducer.java +++ b/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchConfigurationProducer.java @@ -19,7 +19,7 @@ import com.intellij.execution.JavaExecutionUtil; import com.intellij.execution.Location; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.ConfigurationFromContext; -import com.intellij.execution.application.ApplicationConfigurationProducer; +import com.intellij.execution.application.AbstractApplicationConfigurationProducer; import com.intellij.execution.application.ApplicationConfigurationType; import com.intellij.ide.scratch.ScratchFileType; import com.intellij.lang.java.JavaLanguage; @@ -35,7 +35,7 @@ import com.intellij.psi.PsiFile; * @author Eugene Zhuravlev * Date: 29-Sep-15 */ -public class JavaScratchConfigurationProducer extends ApplicationConfigurationProducer { +public class JavaScratchConfigurationProducer extends AbstractApplicationConfigurationProducer { public JavaScratchConfigurationProducer() { super(JavaScratchConfigurationType.getInstance()); @@ -59,7 +59,7 @@ public class JavaScratchConfigurationProducer extends ApplicationConfigurationPr @Override public boolean shouldReplace(ConfigurationFromContext self, ConfigurationFromContext other) { - return other.isProducedBy(ApplicationConfigurationProducer.class) && !other.isProducedBy(JavaScratchConfigurationProducer.class); + return other.isProducedBy(AbstractApplicationConfigurationProducer.class) && !other.isProducedBy(JavaScratchConfigurationProducer.class); } @Override 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 6fda6aea8d6f..f2f68b717e88 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/runner/GroovyScriptRunConfigurationProducer.java @@ -22,7 +22,6 @@ import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.ConfigurationFromContext; import com.intellij.execution.application.ApplicationConfigurationProducer; -import com.intellij.execution.application.ApplicationConfigurationType; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.configurations.RunConfigurationModule; import com.intellij.execution.junit.RuntimeConfigurationProducer; @@ -76,7 +75,7 @@ public class GroovyScriptRunConfigurationProducer extends RuntimeConfigurationPr } if (file.getText().contains("@Grab")) { - ApplicationConfigurationProducer producer = new ApplicationConfigurationProducer(ApplicationConfigurationType.getInstance()); + ApplicationConfigurationProducer producer = new ApplicationConfigurationProducer(); ConfigurationFromContext settings = producer.createConfigurationFromContext(context); if (settings != null) { PsiElement src = settings.getSourceElement();