This commit is contained in:
Dmitry Jemerov
2018-03-26 19:00:27 +02:00
parent 20cd193030
commit 6bee25cad2
@@ -1,17 +1,6 @@
/* /*
* Copyright 2010-2017 JetBrains s.r.o. * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* * that can be found in the license/LICENSE.txt file.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/ */
package org.jetbrains.kotlin.idea.run package org.jetbrains.kotlin.idea.run
@@ -43,8 +32,10 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
return other.isProducedBy(JUnitConfigurationProducer::class.java) || other.isProducedBy(PatternConfigurationProducer::class.java) return other.isProducedBy(JUnitConfigurationProducer::class.java) || other.isProducedBy(PatternConfigurationProducer::class.java)
} }
override fun isConfigurationFromContext(configuration: JUnitConfiguration, override fun isConfigurationFromContext(
context: ConfigurationContext): Boolean { configuration: JUnitConfiguration,
context: ConfigurationContext
): Boolean {
if (RunConfigurationProducer.getInstance(PatternConfigurationProducer::class.java).isMultipleElementsSelected(context)) { if (RunConfigurationProducer.getInstance(PatternConfigurationProducer::class.java).isMultipleElementsSelected(context)) {
return false return false
} }
@@ -74,9 +65,11 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
return configurationModule == context.location?.module || configurationModule == predefinedModule return configurationModule == context.location?.module || configurationModule == predefinedModule
} }
override fun setupConfigurationFromContext(configuration: JUnitConfiguration, override fun setupConfigurationFromContext(
context: ConfigurationContext, configuration: JUnitConfiguration,
sourceElement: Ref<PsiElement>): Boolean { context: ConfigurationContext,
sourceElement: Ref<PsiElement>
): Boolean {
if (DumbService.getInstance(context.project).isDumb) return false if (DumbService.getInstance(context.project).isDumb) return false
val location = context.location ?: return false val location = context.location ?: return false
@@ -131,14 +124,14 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
} }
// TODO: use TestClassConfigurationProducer when constructor becomes public // TODO: use TestClassConfigurationProducer when constructor becomes public
return object : AbstractTestClassConfigurationProducer(JUnitConfigurationType.getInstance()){} return object : AbstractTestClassConfigurationProducer(JUnitConfigurationType.getInstance()){}
.onFirstRun(fromContextSubstitute, context, performRunnable) .onFirstRun(fromContextSubstitute, context, performRunnable)
} }
super.onFirstRun(fromContext, context, performRunnable) super.onFirstRun(fromContext, context, performRunnable)
} }
companion object { companion object {
fun getTestClass(leaf: PsiElement): PsiClass? { fun getTestClass(leaf: PsiElement): PsiClass? {
val containingFile = leaf.containingFile as? KtFile ?: return null val containingFile = leaf.containingFile as? KtFile ?: return null
var ktClass = leaf.getParentOfType<KtClass>(false) var ktClass = leaf.getParentOfType<KtClass>(false)
if (!ktClass.isJUnitTestClass()) { if (!ktClass.isJUnitTestClass()) {
@@ -163,9 +156,9 @@ class KotlinJUnitRunConfigurationProducer : RunConfigurationProducer<JUnitConfig
} }
private fun KtClass?.isJUnitTestClass() = private fun KtClass?.isJUnitTestClass() =
this?.toLightClass()?.let { JUnitUtil.isTestClass(it, false, true) } ?: false this?.toLightClass()?.let { JUnitUtil.isTestClass(it, false, true) } ?: false
private fun getTestClassInFile(ktFile: KtFile) = private fun getTestClassInFile(ktFile: KtFile) =
ktFile.declarations.filterIsInstance<KtClass>().singleOrNull { it.isJUnitTestClass() } ktFile.declarations.filterIsInstance<KtClass>().singleOrNull { it.isJUnitTestClass() }
} }
} }