JetJUnitConfigurationProducer: J2K
This commit is contained in:
committed by
Nikolay Krasko
parent
2a48a97853
commit
a206ff7406
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user