Skip to content

Commit 7a59f54

Browse files
Suggest tests for nested classes & static methods inside abstracts #1400 (#1406)
Suggest tests for nested classes & static methods inside abstracts Co-authored-by: Vassiliy Kudryashov <[email protected]>
1 parent 95d6cb0 commit 7a59f54

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/language/JavaLanguage.kt

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import org.jetbrains.kotlin.utils.addIfNotNull
2828
import org.utbot.framework.plugin.api.util.LockFile
2929
import org.utbot.intellij.plugin.models.packageName
3030
import org.utbot.intellij.plugin.ui.InvalidClassNotifier
31-
import org.utbot.intellij.plugin.util.isAbstract
3231
import org.utbot.intellij.plugin.language.agnostic.LanguageAssistant
3332
import org.utbot.intellij.plugin.util.findSdkVersionOrNull
3433

@@ -170,12 +169,6 @@ object JvmLanguageAssistant : LanguageAssistant() {
170169
return true
171170
}
172171

173-
val isAbstractOrInterface = this.isInterface || this.isAbstract
174-
if (isAbstractOrInterface) {
175-
if (withWarnings) InvalidClassNotifier.notify("abstract class or interface ${this.name}")
176-
return true
177-
}
178-
179172
val isInvisible = !this.isVisible
180173
if (isInvisible) {
181174
if (withWarnings) InvalidClassNotifier.notify("private or protected class ${this.name}")

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/util/PsiClassHelper.kt

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.utbot.intellij.plugin.util
22

33
import com.intellij.psi.PsiClass
44
import com.intellij.psi.PsiMember
5+
import com.intellij.psi.PsiMethod
56
import com.intellij.psi.PsiModifier
67
import com.intellij.psi.SyntheticElement
78
import com.intellij.refactoring.util.classMembers.MemberInfo
@@ -17,6 +18,9 @@ import org.utbot.framework.UtSettings
1718
val PsiMember.isAbstract: Boolean
1819
get() = modifierList?.hasModifierProperty(PsiModifier.ABSTRACT)?: false
1920

21+
val PsiMember.isStatic: Boolean
22+
get() = modifierList?.hasModifierProperty(PsiModifier.STATIC)?: false
23+
2024
private val PsiMember.isKotlinGetterOrSetter: Boolean
2125
get() {
2226
if (this !is KtLightMethod)
@@ -32,11 +36,20 @@ private val PsiMember.isKotlinAndProtected: Boolean
3236
private val PsiMember.isKotlinAutogeneratedMethod: Boolean
3337
get() = this is KtLightMethod && navigationElement is KtClass
3438

35-
fun Iterable<MemberInfo>.filterTestableMethods(): List<MemberInfo> = this
39+
private val PsiMethod.canBeCalledStatically: Boolean
40+
get() = isStatic || containingClass?.isStatic ?: throw IllegalStateException("No containing class found for method $this")
41+
42+
private val PsiMethod.isUntestableMethodOfAbstractOrInterface: Boolean
43+
get() {
44+
val hasAbstractContext = generateSequence(containingClass) { it.containingClass }.any { it.isAbstract || it.isInterface }
45+
return hasAbstractContext && !canBeCalledStatically
46+
}
47+
48+
private fun Iterable<MemberInfo>.filterTestableMethods(): List<MemberInfo> = this
3649
.filterWhen(UtSettings.skipTestGenerationForSyntheticAndImplicitlyDeclaredMethods) {
3750
it.member !is SyntheticElement && !it.member.isKotlinAutogeneratedMethod
3851
}
39-
.filterNot { it.member.isAbstract }
52+
.filterNot { (it.member as PsiMethod).isUntestableMethodOfAbstractOrInterface }
4053
.filterNot { it.member.isKotlinGetterOrSetter }
4154
.filterNot { it.member.isKotlinAndProtected }
4255

0 commit comments

Comments
 (0)