Method JUnit configuration.

This commit is contained in:
Maxim Shafirov
2012-02-20 16:10:59 +04:00
parent 1e2ef9fbf1
commit ef514738df
@@ -21,20 +21,20 @@ package org.jetbrains.jet.plugin.run;
import com.intellij.execution.JavaRunConfigurationExtensionManager; import com.intellij.execution.JavaRunConfigurationExtensionManager;
import com.intellij.execution.Location; import com.intellij.execution.Location;
import com.intellij.execution.PsiLocation;
import com.intellij.execution.RunnerAndConfigurationSettings; import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.junit.JUnitConfiguration; import com.intellij.execution.junit.JUnitConfiguration;
import com.intellij.execution.junit.JUnitConfigurationType; import com.intellij.execution.junit.JUnitConfigurationType;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.execution.junit.RuntimeConfigurationProducer; import com.intellij.execution.junit.RuntimeConfigurationProducer;
import com.intellij.openapi.module.Module; import com.intellij.openapi.module.Module;
import com.intellij.psi.PsiClass; import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.jet.asJava.JetLightClass; import org.jetbrains.jet.asJava.JetLightClass;
import org.jetbrains.jet.lang.psi.JetClass; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.psi.JetElement;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
public class JetJUnitConfigurationProducer extends RuntimeConfigurationProducer { public class JetJUnitConfigurationProducer extends RuntimeConfigurationProducer {
private JetElement myElement; private JetElement myElement;
@@ -50,27 +50,58 @@ public class JetJUnitConfigurationProducer extends RuntimeConfigurationProducer
@Override @Override
protected RunnerAndConfigurationSettings createConfigurationByElement(Location location, ConfigurationContext context) { protected RunnerAndConfigurationSettings createConfigurationByElement(Location location, ConfigurationContext context) {
PsiElement leaf = location.getPsiElement(); PsiElement leaf = location.getPsiElement();
JetNamedFunction function = PsiTreeUtil.getParentOfType(leaf, JetNamedFunction.class);
if (function != null) {
myElement = function;
JetElement owner = PsiTreeUtil.getParentOfType(function, JetFunction.class, JetClass.class);
if (owner instanceof JetClass) {
JetLightClass delegate = wrapDelegate((JetClass) owner);
for (PsiMethod method : delegate.getMethods()) {
if (method.getNavigationElement() == function) {
Location<PsiMethod> methodLocation = PsiLocation.fromPsiElement(method);
if (JUnitUtil.isTestMethod(methodLocation, false)) {
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(context.getProject(), context);
final JUnitConfiguration configuration = (JUnitConfiguration)settings.getConfiguration();
final Module originalModule = configuration.getConfigurationModule().getModule();
configuration.beMethodConfiguration(methodLocation);
configuration.restoreOriginalModule(originalModule);
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location);
return settings;
}
break;
}
}
}
}
JetClass jetClass = PsiTreeUtil.getParentOfType(leaf, JetClass.class); JetClass jetClass = PsiTreeUtil.getParentOfType(leaf, JetClass.class);
if (jetClass != null) { if (jetClass != null) {
myElement = jetClass; myElement = jetClass;
PsiClass delegate = new JetLightClass(jetClass.getManager(), (JetFile) jetClass.getContainingFile(), JetPsiUtil.getFQName(jetClass)); PsiClass delegate = wrapDelegate(jetClass);
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(jetClass.getProject(), context); if (JUnitUtil.isTestClass(delegate)) {
final JUnitConfiguration configuration = (JUnitConfiguration)settings.getConfiguration(); RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(context.getProject(), context);
final JUnitConfiguration configuration = (JUnitConfiguration)settings.getConfiguration();
final Module originalModule = configuration.getConfigurationModule().getModule(); final Module originalModule = configuration.getConfigurationModule().getModule();
configuration.beClassConfiguration(delegate); configuration.beClassConfiguration(delegate);
configuration.restoreOriginalModule(originalModule); configuration.restoreOriginalModule(originalModule);
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location); JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location);
return settings; return settings;
}
} }
return null; return null;
} }
private static JetLightClass wrapDelegate(JetClass jetClass) {
return new JetLightClass(jetClass.getManager(), (JetFile) jetClass.getContainingFile(), JetPsiUtil.getFQName(jetClass));
}
@Override @Override
public int compareTo(Object o) { public int compareTo(Object o) {
return 0; return 0;