Skip to content

Commit f70f418

Browse files
authored
Fix detekt rule for PsiUtilCore (#2608)
1 parent e40f6d1 commit f70f418

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

detekt-rules/src/main/kotlin/software/aws/toolkits/gradle/detekt/rules/BannedPatternRule.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,20 @@ class BannedPatternRule(private val patterns: List<BannedPattern>) : Rule() {
1515
override val issue = Issue("BannedPattern", Severity.Defect, "Banned calls", Debt.FIVE_MINS)
1616

1717
override fun visitKtFile(file: KtFile) {
18-
super.visitKtFile(file)
18+
var offset = 0
1919
file.text.split("\n").forEachIndexed { line, text ->
2020
patterns.forEach { pattern ->
2121
val match = pattern.regex.find(text) ?: return@forEach
2222
report(
2323
CodeSmell(
2424
issue,
25-
Entity.from(file),
26-
message = "[${line + 1}:${match.range.first + 1}] ${pattern.message}"
25+
Entity.from(file, offset + match.range.first),
26+
message = pattern.message
2727
)
2828
)
2929
}
30+
// account for delimiter
31+
offset += text.length + 1
3032
}
3133
}
3234

@@ -42,7 +44,7 @@ class BannedPatternRule(private val patterns: List<BannedPattern>) : Rule() {
4244
"PsiUtil (java-api.jar) is not available in all IDEs, use PsiManager.getInstance(project).findFile() instead"
4345
),
4446
BannedPattern(
45-
"""com\.intellij\.psi\.util\.PsiUtil""".toRegex(),
47+
"""com\.intellij\.psi\.util\.PsiUtil$""".toRegex(),
4648
"PsiUtil (java-api.jar) is not available in all IDEs, use PsiUtilCore or PsiManager instead (platform-api.jar)"
4749
)
4850
)

detekt-rules/src/test/kotlin/BannedPatternRuleTest.kt

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ class BannedPatternRuleTest {
2121
)
2222
)
2323
.hasOnlyOneElementSatisfying {
24-
it.id == "BannedPattern" && it.message == "[2:5] Use of method blah() is banned."
24+
it.id == "BannedPattern" && it.message == "Use of method blah() is banned." &&
25+
it.location.source.line == 2 &&
26+
it.location.source.column == 5
2527
}
2628
}
2729

@@ -30,7 +32,7 @@ class BannedPatternRuleTest {
3032
val rule = BannedPatternRule(BannedPatternRule.DEFAULT_PATTERNS)
3133
assertThat(
3234
rule.lint(
33-
"""
35+
"""
3436
import com.intellij.psi.util.PsiUtil
3537
class DockerfileParser(private val project: Project) {
3638
fun parse(virtualFile: VirtualFile): DockerfileDetails? {
@@ -43,11 +45,33 @@ class BannedPatternRuleTest {
4345
.hasSize(2)
4446
.anyMatch {
4547
it.id == "BannedPattern" &&
46-
it.message == "[1:8] PsiUtil (java-api.jar) is not available in all IDEs, use PsiUtilCore or PsiManager instead (platform-api.jar)"
48+
it.message == "PsiUtil (java-api.jar) is not available in all IDEs, use PsiUtilCore or PsiManager instead (platform-api.jar)" &&
49+
it.location.source.line == 1 &&
50+
it.location.source.column == 8
4751
}
4852
.anyMatch {
4953
it.id == "BannedPattern" &&
50-
it.message == "[4:23] PsiUtil (java-api.jar) is not available in all IDEs, use PsiManager.getInstance(project).findFile() instead"
54+
it.message == "PsiUtil (java-api.jar) is not available in all IDEs, use PsiManager.getInstance(project).findFile() instead" &&
55+
it.location.source.line == 4 &&
56+
it.location.source.column == 23
5157
}
5258
}
59+
60+
@Test
61+
fun allowPsiUtilCore() {
62+
val rule = BannedPatternRule(BannedPatternRule.DEFAULT_PATTERNS)
63+
assertThat(
64+
rule.lint(
65+
"""
66+
import com.intellij.psi.util.PsiUtilCore
67+
class DockerfileParser(private val project: Project) {
68+
fun parse(virtualFile: VirtualFile): DockerfileDetails? {
69+
val psiFile = PsiUtilCore.getPsiFile(project, virtualFile)
70+
}
71+
}
72+
""".trimIndent()
73+
)
74+
)
75+
.hasSize(0)
76+
}
5377
}

0 commit comments

Comments
 (0)