JetJUnitConfigurationProducer: J2K

This commit is contained in:
Dmitry Jemerov
2015-07-02 15:34:29 +02:00
committed by Nikolay Krasko
parent 2a48a97853
commit a206ff7406
3 changed files with 81 additions and 89 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
<idea-plugin>
<extensions defaultExtensionNs="com.intellij">
<configurationProducer implementation="org.jetbrains.kotlin.idea.run.JetJUnitConfigurationProducer"/>
<configurationProducer implementation="org.jetbrains.kotlin.idea.run.KotlinJUnitRunConfigurationProducer"/>
</extensions>
</idea-plugin>
@@ -90,7 +90,7 @@ public class JetTestNgConfigurationProducer extends TestNGConfigurationProducer
JetClass jetClass = PsiTreeUtil.getParentOfType(leaf, JetClass.class, false);
if (jetClass == null) {
jetClass = JetJUnitConfigurationProducer.getClassDeclarationInFile(jetFile);
jetClass = KotlinJUnitRunConfigurationProducer.Companion.getClassDeclarationInFile(jetFile);
}
if (jetClass == null) {
@@ -14,142 +14,134 @@
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.run;
package org.jetbrains.kotlin.idea.run
import com.intellij.execution.JavaRunConfigurationExtensionManager;
import com.intellij.execution.Location;
import com.intellij.execution.PsiLocation;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.actions.ConfigurationContext;
import com.intellij.execution.junit.JUnitConfiguration;
import com.intellij.execution.junit.JUnitConfigurationType;
import com.intellij.execution.junit.JUnitUtil;
import com.intellij.execution.junit.RuntimeConfigurationProducer;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.DumbService;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.asJava.LightClassUtil;
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil;
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil;
import org.jetbrains.kotlin.psi.*;
import com.intellij.execution.JavaRunConfigurationExtensionManager
import com.intellij.execution.Location
import com.intellij.execution.PsiLocation
import com.intellij.execution.RunnerAndConfigurationSettings
import com.intellij.execution.actions.ConfigurationContext
import com.intellij.execution.junit.JUnitConfiguration
import com.intellij.execution.junit.JUnitConfigurationType
import com.intellij.execution.junit.JUnitUtil
import com.intellij.execution.junit.RuntimeConfigurationProducer
import com.intellij.openapi.module.Module
import com.intellij.openapi.project.DumbService
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiMethod
import com.intellij.psi.util.PsiTreeUtil
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.idea.project.ProjectStructureUtil
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.psi.*
public class JetJUnitConfigurationProducer extends RuntimeConfigurationProducer {
private JetElement myElement;
public class KotlinJUnitRunConfigurationProducer : RuntimeConfigurationProducer(JUnitConfigurationType.getInstance()) {
private var myElement: JetElement? = null
public JetJUnitConfigurationProducer() {
super(JUnitConfigurationType.getInstance());
override fun getSourceElement(): PsiElement? {
return myElement
}
@Override
public PsiElement getSourceElement() {
return myElement;
}
override fun createConfigurationByElement(location: Location<*>, context: ConfigurationContext): RunnerAndConfigurationSettings? {
if (DumbService.getInstance(location.getProject()).isDumb()) return null
@Override
protected RunnerAndConfigurationSettings createConfigurationByElement(Location location, ConfigurationContext context) {
if (DumbService.getInstance(location.getProject()).isDumb()) return null;
PsiElement leaf = location.getPsiElement();
val leaf = location.getPsiElement()
if (!ProjectRootsUtil.isInProjectOrLibSource(leaf)) {
return null;
return null
}
if (!(leaf.getContainingFile() instanceof JetFile)) {
return null;
if (leaf.getContainingFile() !is JetFile) {
return null
}
JetFile jetFile = (JetFile) leaf.getContainingFile();
val jetFile = leaf.getContainingFile() as JetFile
if (ProjectStructureUtil.isJsKotlinModule(jetFile)) {
return null;
return null
}
JetNamedFunction function = PsiTreeUtil.getParentOfType(leaf, JetNamedFunction.class, false);
val function = PsiTreeUtil.getParentOfType(leaf, javaClass<JetNamedFunction>(), false)
if (function != null) {
myElement = function;
myElement = function
@SuppressWarnings("unchecked")
JetElement owner = PsiTreeUtil.getParentOfType(function, JetFunction.class, JetClass.class);
val owner = PsiTreeUtil.getParentOfType(function, javaClass<JetFunction>(), javaClass<JetClass>())
if (owner instanceof JetClass) {
PsiClass delegate = LightClassUtil.getPsiClass((JetClass) owner);
if (owner is JetClass) {
val delegate = LightClassUtil.getPsiClass(owner)
if (delegate != null) {
for (PsiMethod method : delegate.getMethods()) {
if (method.getNavigationElement() == function) {
Location<PsiMethod> methodLocation = PsiLocation.fromPsiElement(method);
for (method in delegate.getMethods()) {
if (method.getNavigationElement() === function) {
val methodLocation = PsiLocation.fromPsiElement(method)
if (JUnitUtil.isTestMethod(methodLocation, false)) {
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(context.getProject(), context);
JUnitConfiguration configuration = (JUnitConfiguration) settings.getConfiguration();
val settings = cloneTemplateConfiguration(context.getProject(), context)
val configuration = settings.getConfiguration() as JUnitConfiguration
Module originalModule = configuration.getConfigurationModule().getModule();
configuration.beMethodConfiguration(methodLocation);
configuration.restoreOriginalModule(originalModule);
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location);
val originalModule = configuration.getConfigurationModule().getModule()
configuration.beMethodConfiguration(methodLocation)
configuration.restoreOriginalModule(originalModule)
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location)
return settings;
return settings
}
break;
break
}
}
}
}
}
JetClass jetClass = PsiTreeUtil.getParentOfType(leaf, JetClass.class, false);
var jetClass = PsiTreeUtil.getParentOfType(leaf, javaClass<JetClass>(), false)
if (jetClass == null) {
jetClass = getClassDeclarationInFile(jetFile);
jetClass = getClassDeclarationInFile(jetFile)
}
if (jetClass != null) {
myElement = jetClass;
PsiClass delegate = LightClassUtil.getPsiClass(jetClass);
myElement = jetClass
val delegate = LightClassUtil.getPsiClass(jetClass)
if (delegate != null && JUnitUtil.isTestClass(delegate)) {
RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(context.getProject(), context);
JUnitConfiguration configuration = (JUnitConfiguration) settings.getConfiguration();
val settings = cloneTemplateConfiguration(context.getProject(), context)
val configuration = settings.getConfiguration() as JUnitConfiguration
Module originalModule = configuration.getConfigurationModule().getModule();
configuration.beClassConfiguration(delegate);
configuration.restoreOriginalModule(originalModule);
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location);
val originalModule = configuration.getConfigurationModule().getModule()
configuration.beClassConfiguration(delegate)
configuration.restoreOriginalModule(originalModule)
JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location)
return settings;
return settings
}
}
return null;
return null
}
@Nullable
static JetClass getClassDeclarationInFile(JetFile jetFile) {
JetClass tempSingleDeclaration = null;
override fun compareTo(o: Any?): Int {
return 0
}
for (JetDeclaration jetDeclaration : jetFile.getDeclarations()) {
if (jetDeclaration instanceof JetClass) {
JetClass declaration = (JetClass) jetDeclaration;
companion object {
if (tempSingleDeclaration == null) {
tempSingleDeclaration = declaration;
}
else {
// There are several class declarations in file
return null;
fun getClassDeclarationInFile(jetFile: JetFile): JetClass? {
var tempSingleDeclaration: JetClass? = null
for (jetDeclaration in jetFile.getDeclarations()) {
if (jetDeclaration is JetClass) {
if (tempSingleDeclaration == null) {
tempSingleDeclaration = jetDeclaration
}
else {
// There are several class declarations in file
return null
}
}
}
return tempSingleDeclaration
}
return tempSingleDeclaration;
}
@Override
public int compareTo(@NotNull Object o) {
return 0;
}
}