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