Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove getLineAndColumnInPsiFile function #7261

Merged
merged 2 commits into from
May 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 0 additions & 1 deletion config/detekt/detekt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -212,7 +212,6 @@ style:
- 'java.net.URL.openStream'
- 'java.lang.Class.getResourceAsStream'
- 'java.lang.ClassLoader.getResourceAsStream'
- 'org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnInPsiFile'
ForbiddenVoid:
active: true
ignoreOverridden: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ package io.gitlab.arturbosch.detekt.api

import dev.drewhamilton.poko.Poko
import io.github.detekt.psi.absolutePath
import io.github.detekt.psi.getLineAndColumnInPsiFile
import org.jetbrains.kotlin.com.intellij.openapi.util.TextRange
import org.jetbrains.kotlin.com.intellij.psi.PsiElement
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnInPsiFile
import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.psiUtil.endOffset
Expand Down Expand Up @@ -58,10 +58,12 @@ class Location(
TextRange(element.textRange.endOffset + offset, element.textRange.endOffset + offset)
)

private fun lineAndColumn(element: PsiElement, range: TextRange): PsiDiagnosticUtils.LineAndColumn {
return getLineAndColumnInPsiFile(element.containingFile, range)
?: PsiDiagnosticUtils.LineAndColumn(1, 1, null)
}
private fun lineAndColumn(element: PsiElement, range: TextRange): PsiDiagnosticUtils.LineAndColumn =
if (element.containingFile.text.isNotEmpty()) {
getLineAndColumnInPsiFile(element.containingFile, range)
Fixed Show fixed Hide fixed
} else {
PsiDiagnosticUtils.LineAndColumn(1, 1, null)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
package io.github.detekt.metrics

import io.github.detekt.psi.getLineAndColumnInPsiFile
import org.jetbrains.kotlin.com.intellij.lang.ASTNode
import org.jetbrains.kotlin.com.intellij.psi.PsiComment
import org.jetbrains.kotlin.com.intellij.psi.PsiElement
import org.jetbrains.kotlin.com.intellij.psi.PsiWhiteSpace
import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.LeafElement
import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.PsiCommentImpl
import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.PsiWhiteSpaceImpl
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.kdoc.psi.api.KDoc
import org.jetbrains.kotlin.kdoc.psi.api.KDocElement
import org.jetbrains.kotlin.kdoc.psi.impl.KDocElementImpl
Expand Down Expand Up @@ -41,7 +41,7 @@ fun KtElement.linesOfCode(inFile: KtFile = this.containingKtFile): Int =
.distinct()
.count()

fun ASTNode.line(inFile: KtFile): Int = getLineAndColumnInPsiFile(inFile, this.textRange)?.line ?: -1
fun ASTNode.line(inFile: KtFile): Int = DiagnosticUtils.getLineAndColumnInPsiFile(inFile, this.textRange).line
Fixed Show fixed Hide fixed

private val comments: Set<Class<out PsiElement>> = setOf(
PsiWhiteSpace::class.java,
Expand Down
1 change: 0 additions & 1 deletion detekt-psi-utils/api/detekt-psi-utils.api
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ public final class io/github/detekt/psi/KtFilesKt {
public static final fun absolutePath (Lorg/jetbrains/kotlin/psi/KtFile;)Ljava/nio/file/Path;
public static final fun fileNameWithoutSuffix (Lorg/jetbrains/kotlin/com/intellij/psi/PsiFile;Ljava/util/List;)Ljava/lang/String;
public static synthetic fun fileNameWithoutSuffix$default (Lorg/jetbrains/kotlin/com/intellij/psi/PsiFile;Ljava/util/List;ILjava/lang/Object;)Ljava/lang/String;
public static final fun getLineAndColumnInPsiFile (Lorg/jetbrains/kotlin/com/intellij/psi/PsiFile;Lorg/jetbrains/kotlin/com/intellij/openapi/util/TextRange;)Lorg/jetbrains/kotlin/diagnostics/PsiDiagnosticUtils$LineAndColumn;
}

public final class io/gitlab/arturbosch/detekt/rules/AllowedExceptionNamePatternKt {
Expand Down
15 changes: 0 additions & 15 deletions detekt-psi-utils/src/main/kotlin/io/github/detekt/psi/KtFiles.kt
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package io.github.detekt.psi

import org.jetbrains.kotlin.com.intellij.openapi.util.TextRange
import org.jetbrains.kotlin.com.intellij.psi.PsiFile
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils
import org.jetbrains.kotlin.psi.KtFile
import java.nio.file.Path
import kotlin.io.path.Path
Expand All @@ -30,17 +27,5 @@ fun PsiFile.absolutePath(): Path = Path(virtualFile.path)
// KtFile.virtualFilePath is cached so should be a tiny bit more performant when called repeatedly for the same file.
fun KtFile.absolutePath(): Path = Path(virtualFilePath)

// #3317 If any rule mutates the PsiElement, searching the original PsiElement may throw an exception.
fun getLineAndColumnInPsiFile(file: PsiFile, range: TextRange): PsiDiagnosticUtils.LineAndColumn? {
return if (file.textLength == 0) {
null
} else {
runCatching {
@Suppress("ForbiddenMethodCall")
DiagnosticUtils.getLineAndColumnInPsiFile(file, range)
}.getOrNull()
}
}

private fun buildPlatformSpecificSuffixes(platforms: List<String>): List<String> =
platforms.map { platform -> ".$platform.kt" }
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.gitlab.arturbosch.detekt.rules.style

import io.github.detekt.psi.absolutePath
import io.github.detekt.psi.getLineAndColumnInPsiFile
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.Config
import io.gitlab.arturbosch.detekt.api.Configuration
Expand All @@ -12,6 +11,7 @@ import io.gitlab.arturbosch.detekt.api.SourceLocation
import io.gitlab.arturbosch.detekt.api.TextLocation
import io.gitlab.arturbosch.detekt.api.config
import org.jetbrains.kotlin.com.intellij.psi.PsiFile
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtLiteralStringTemplateEntry
import org.jetbrains.kotlin.psi.KtStringTemplateEntry
Expand Down Expand Up @@ -75,7 +75,7 @@ class MultilineRawStringIndentation(config: Config) : Rule(
return
}

val lineAndColumn = getLineAndColumnInPsiFile(expression.containingFile, expression.textRange) ?: return
val lineAndColumn = DiagnosticUtils.getLineAndColumnInPsiFile(expression.containingFile, expression.textRange)
Fixed Show fixed Hide fixed
val lineCount = expression.text.lines().count()

expression.checkIndentation(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.gitlab.arturbosch.detekt.rules.style

import io.github.detekt.psi.absolutePath
import io.github.detekt.psi.getLineAndColumnInPsiFile
import io.gitlab.arturbosch.detekt.api.ActiveByDefault
import io.gitlab.arturbosch.detekt.api.CodeSmell
import io.gitlab.arturbosch.detekt.api.Config
Expand All @@ -11,6 +10,7 @@ import io.gitlab.arturbosch.detekt.api.Rule
import io.gitlab.arturbosch.detekt.api.SourceLocation
import io.gitlab.arturbosch.detekt.api.TextLocation
import org.jetbrains.kotlin.com.intellij.openapi.util.TextRange
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.psiUtil.endOffset

Expand All @@ -26,11 +26,11 @@ class NewLineAtEndOfFile(config: Config) : Rule(
override fun visitKtFile(file: KtFile) {
val text = file.text
if (text.isNotEmpty() && !text.endsWith('\n')) {
val coords = getLineAndColumnInPsiFile(
val coords = DiagnosticUtils.getLineAndColumnInPsiFile(
file,
TextRange(file.endOffset, file.endOffset)
)
val sourceLocation = SourceLocation(coords?.line ?: 0, coords?.column ?: 0)
val sourceLocation = SourceLocation(coords.line, coords.column)
val textLocation = TextLocation(file.endOffset, file.endOffset)
val location = Location(
source = sourceLocation,
Expand Down