@@ -2,6 +2,7 @@ package org.utbot.intellij.plugin.util
2
2
3
3
import com.intellij.psi.PsiClass
4
4
import com.intellij.psi.PsiMember
5
+ import com.intellij.psi.PsiMethod
5
6
import com.intellij.psi.PsiModifier
6
7
import com.intellij.psi.SyntheticElement
7
8
import com.intellij.refactoring.util.classMembers.MemberInfo
@@ -17,6 +18,9 @@ import org.utbot.framework.UtSettings
17
18
val PsiMember .isAbstract: Boolean
18
19
get() = modifierList?.hasModifierProperty(PsiModifier .ABSTRACT )? : false
19
20
21
+ val PsiMember .isStatic: Boolean
22
+ get() = modifierList?.hasModifierProperty(PsiModifier .STATIC )? : false
23
+
20
24
private val PsiMember .isKotlinGetterOrSetter: Boolean
21
25
get() {
22
26
if (this !is KtLightMethod )
@@ -32,11 +36,20 @@ private val PsiMember.isKotlinAndProtected: Boolean
32
36
private val PsiMember .isKotlinAutogeneratedMethod: Boolean
33
37
get() = this is KtLightMethod && navigationElement is KtClass
34
38
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
36
49
.filterWhen(UtSettings .skipTestGenerationForSyntheticAndImplicitlyDeclaredMethods) {
37
50
it.member !is SyntheticElement && ! it.member.isKotlinAutogeneratedMethod
38
51
}
39
- .filterNot { it.member.isAbstract }
52
+ .filterNot { ( it.member as PsiMethod ).isUntestableMethodOfAbstractOrInterface }
40
53
.filterNot { it.member.isKotlinGetterOrSetter }
41
54
.filterNot { it.member.isKotlinAndProtected }
42
55
0 commit comments