Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -28,89 +28,94 @@
import consulo.language.psi.util.PsiTreeUtil;
import consulo.module.Module;
import consulo.util.lang.Comparing;
import consulo.util.lang.ref.Ref;

import consulo.util.lang.ref.SimpleReference;
import jakarta.annotation.Nullable;

public abstract class AbstractApplicationConfigurationProducer<T extends ApplicationConfiguration> extends JavaRunConfigurationProducerBase<T> {
public AbstractApplicationConfigurationProducer(final ApplicationConfigurationType configurationType) {
super(configurationType);
}

@Override
protected boolean setupConfigurationFromContext(T configuration, ConfigurationContext context, Ref<PsiElement> sourceElement) {
final Location contextLocation = context.getLocation();
if (contextLocation == null) {
return false;
}
final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation);
if (location == null) {
return false;
public AbstractApplicationConfigurationProducer(ApplicationConfigurationType configurationType) {
super(configurationType);
}
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.test(aClass)) {
sourceElement.set(method);

@Override
protected boolean setupConfigurationFromContext(
T configuration,
ConfigurationContext context,
SimpleReference<PsiElement> sourceElement
) {
Location contextLocation = context.getLocation();
if (contextLocation == null) {
return false;
}
Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation);
if (location == null) {
return false;
}
PsiElement element = location.getPsiElement();
if (!element.isPhysical()) {
return false;
}
PsiElement currentElement = element;
PsiMethod method;
while ((method = findMain(currentElement)) != null) {
PsiClass aClass = method.getContainingClass();
if (ConfigurationUtil.MAIN_CLASS.test(aClass)) {
sourceElement.set(method);
setupConfiguration(configuration, aClass, context);
return true;
}
currentElement = method.getParent();
}
PsiClass aClass = ApplicationConfigurationType.getMainClass(element);
if (aClass == null) {
return false;
}
sourceElement.set(aClass);
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);
}
private void setupConfiguration(T configuration, PsiClass aClass, 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();
}
@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;
}
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;
}
@Override
public boolean isConfigurationFromContext(T appConfiguration, ConfigurationContext context) {
PsiElement location = context.getPsiLocation();
PsiClass aClass = ApplicationConfigurationType.getMainClass(location);
if (aClass != null && Comparing.equal(JavaExecutionUtil.getRuntimeQualifiedName(aClass), appConfiguration.MAIN_CLASS_NAME)) {
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;
}
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;
}
ApplicationConfiguration template =
(ApplicationConfiguration)context.getRunManager().getConfigurationTemplate(getConfigurationFactory()).getConfiguration();
Module predefinedModule = template.getConfigurationModule().getModule();
if (Comparing.equal(predefinedModule, configurationModule)) {
return true;
}
}
return false;
}
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

@ExtensionImpl
public class ApplicationConfigurationProducer extends AbstractApplicationConfigurationProducer<ApplicationConfiguration> {
public ApplicationConfigurationProducer() {
super(ApplicationConfigurationType.getInstance());
}
public ApplicationConfigurationProducer() {
super(ApplicationConfigurationType.getInstance());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,45 +21,48 @@
import consulo.execution.action.RunConfigurationProducer;
import consulo.language.psi.PsiElement;
import consulo.util.io.FileUtil;
import consulo.util.lang.ref.Ref;
import consulo.util.lang.ref.SimpleReference;
import consulo.virtualFileSystem.VirtualFile;

import jakarta.annotation.Nullable;

/**
* @author nik
*/
@ExtensionImpl
public class JarApplicationConfigurationProducer extends RunConfigurationProducer<JarApplicationConfiguration> {
public JarApplicationConfigurationProducer() {
super(JarApplicationConfigurationType.getInstance());
}

@Override
protected boolean setupConfigurationFromContext(JarApplicationConfiguration configuration, ConfigurationContext context, Ref<PsiElement> sourceElement) {
VirtualFile file = getJarFileFromContext(context);
if (file != null) {
configuration.setName(file.getName());
configuration.setJarPath(file.getPath());
return true;
public JarApplicationConfigurationProducer() {
super(JarApplicationConfigurationType.getInstance());
}
return false;
}

@Nullable
private static VirtualFile getJarFileFromContext(ConfigurationContext context) {
Location location = context.getLocation();
if (location == null) {
return null;
@Override
protected boolean setupConfigurationFromContext(
JarApplicationConfiguration configuration,
ConfigurationContext context,
SimpleReference<PsiElement> sourceElement
) {
VirtualFile file = getJarFileFromContext(context);
if (file != null) {
configuration.setName(file.getName());
configuration.setJarPath(file.getPath());
return true;
}
return false;
}

VirtualFile file = location.getVirtualFile();
return file != null && FileUtil.extensionEquals(file.getName(), "jar") ? file : null;
}
@Nullable
private static VirtualFile getJarFileFromContext(ConfigurationContext context) {
Location location = context.getLocation();
if (location == null) {
return null;
}

@Override
public boolean isConfigurationFromContext(JarApplicationConfiguration configuration, ConfigurationContext context) {
VirtualFile file = getJarFileFromContext(context);
return file != null && FileUtil.pathsEqual(file.getPath(), configuration.getJarPath());
}
VirtualFile file = location.getVirtualFile();
return file != null && FileUtil.extensionEquals(file.getName(), "jar") ? file : null;
}

@Override
public boolean isConfigurationFromContext(JarApplicationConfiguration configuration, ConfigurationContext context) {
VirtualFile file = getJarFileFromContext(context);
return file != null && FileUtil.pathsEqual(file.getPath(), configuration.getJarPath());
}
}
Loading
Loading