Skip to content

Commit 00ca0ea

Browse files
committed
Disable test generation for private nested classes in plugin
1 parent 861b9aa commit 00ca0ea

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
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.idea.core.getPackage
1818
import org.jetbrains.kotlin.idea.core.util.toPsiDirectory
1919
import org.jetbrains.kotlin.idea.core.util.toPsiFile
2020
import org.utbot.intellij.plugin.util.extractFirstLevelMembers
21+
import org.utbot.intellij.plugin.util.isVisible
2122
import java.util.*
2223

2324
class GenerateTestsAction : AnAction() {
@@ -43,7 +44,7 @@ class GenerateTestsAction : AnAction() {
4344

4445
if (psiElementHandler.isCreateTestActionAvailable(element)) {
4546
val srcClass = psiElementHandler.containingClass(element) ?: return null
46-
if (srcClass.isInterface) return null
47+
if (srcClass.isInterface || !srcClass.isVisible) return null
4748
val srcSourceRoot = srcClass.getSourceRoot() ?: return null
4849
val srcMembers = srcClass.extractFirstLevelMembers(false)
4950
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)