Skip to content

Commit f53b7f6

Browse files
authored
Disable test generation for private nested classes in plugin #864 (#865)
Disable test generation for private nested classes in plugin
1 parent 1787b42 commit f53b7f6

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/ui/actions/GenerateTestsAction.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.idea.core.getPackage
2222
import org.jetbrains.kotlin.idea.core.util.toPsiDirectory
2323
import org.jetbrains.kotlin.idea.core.util.toPsiFile
2424
import org.utbot.intellij.plugin.util.extractFirstLevelMembers
25+
import org.utbot.intellij.plugin.util.isVisible
2526
import java.util.*
2627
import org.jetbrains.kotlin.j2k.getContainingClass
2728
import org.jetbrains.kotlin.utils.addIfNotNull
@@ -52,7 +53,7 @@ class GenerateTestsAction : AnAction(), UpdateInBackground {
5253

5354
if (psiElementHandler.isCreateTestActionAvailable(element)) {
5455
val srcClass = psiElementHandler.containingClass(element) ?: return null
55-
if (srcClass.isInterface) return null
56+
if (srcClass.isInterface || !srcClass.isVisible) return null
5657
val srcSourceRoot = srcClass.getSourceRoot() ?: return null
5758
val srcMembers = srcClass.extractFirstLevelMembers(false)
5859
val focusedMethod = focusedMethodOrNull(element, srcMembers, psiElementHandler)

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

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,24 @@ private fun Iterable<MemberInfo>.filterTestableMethods(): List<MemberInfo> = thi
1717
.filterWhen(UtSettings.skipTestGenerationForSyntheticMethods) { it.member !is SyntheticElement }
1818
.filterNot { it.isAbstract }
1919

20+
private val PsiClass.isPrivateOrProtected: Boolean
21+
get() = this.modifierList?.let {
22+
hasModifierProperty(PsiModifier.PRIVATE) || hasModifierProperty(PsiModifier.PROTECTED)
23+
} ?: false
24+
25+
2026
// TODO: maybe we need to delete [includeInherited] param here (always false when calling)?
21-
fun PsiClass.extractClassMethodsIncludingNested(includeInherited: Boolean): List<MemberInfo> =
22-
TestIntegrationUtils.extractClassMethods(this, includeInherited)
23-
.filterTestableMethods() + innerClasses.flatMap { it.extractClassMethodsIncludingNested(includeInherited) }
27+
fun PsiClass.extractClassMethodsIncludingNested(includeInherited: Boolean): List<MemberInfo> {
28+
val ourMethods = TestIntegrationUtils.extractClassMethods(this, includeInherited)
29+
.filterTestableMethods()
30+
31+
val methodsFromNestedClasses =
32+
innerClasses
33+
.filter { !it.isPrivateOrProtected }
34+
.flatMap { it.extractClassMethodsIncludingNested(includeInherited) }
35+
36+
return ourMethods + methodsFromNestedClasses
37+
}
2438

2539
fun PsiClass.extractFirstLevelMembers(includeInherited: Boolean): List<MemberInfo> {
2640
val methods = TestIntegrationUtils.extractClassMethods(this, includeInherited)
@@ -29,5 +43,8 @@ fun PsiClass.extractFirstLevelMembers(includeInherited: Boolean): List<MemberInf
2943
allInnerClasses
3044
else
3145
innerClasses
32-
return methods + classes.map { MemberInfo(it) }
33-
}
46+
return methods + classes.filter { !it.isPrivateOrProtected }.map { MemberInfo(it) }
47+
}
48+
49+
val PsiClass.isVisible: Boolean
50+
get() = generateSequence(this) { it.containingClass }.none { it.isPrivateOrProtected }

0 commit comments

Comments
 (0)