package com.company.detekt import io.gitlab.arturbosch.detekt.api.* import org.jetbrains.kotlin.com.intellij.openapi.util.Conditions import org.jetbrains.kotlin.com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.lexer.KtModifierKeywordToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClass import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtProperty import org.jetbrains.kotlin.psi.psiUtil.isPrivate class PrivateVariablesInTest(config: Config = Config.Companion.empty) : Rule(config) { override val issue = Issue(javaClass.simpleName, Severity.Style, "", Debt.Companion.FIVE_MINS) override fun visitCondition(root: KtFile): Boolean { return root.name.matches(Regex(".*Test.kt")) } override fun visitProperty(property: KtProperty) { val clazz = PsiTreeUtil.findFirstParent(property, Conditions.instanceOf(KtClass::class.java)) as? KtClass report(CodeSmell(issue, Entity.Companion.from(property))) clazz?.name?.let { if (it.matches(Regex(".*Test"))) { if (!property.isPrivate() && !property.isLocal) { report(CodeSmell(issue, Entity.Companion.from(property))) withAutoCorrect { property.addModifier(KtModifierKeywordToken.keywordModifier(KtTokens.PRIVATE_KEYWORD.value)) } } } } } }