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> <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;
} }
} }