Skip to content

Commit

Permalink
Add ending line and column to Location.kt
Browse files Browse the repository at this point in the history
  • Loading branch information
VitalyVPinchuk committed Jul 3, 2022
1 parent 6edf6bb commit dacb224
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 15 deletions.
12 changes: 8 additions & 4 deletions detekt-api/api/detekt-api.api
Expand Up @@ -353,20 +353,24 @@ public final class io/gitlab/arturbosch/detekt/api/LazyRegex : kotlin/properties

public final class io/gitlab/arturbosch/detekt/api/Location : io/gitlab/arturbosch/detekt/api/Compactable {
public static final field Companion Lio/gitlab/arturbosch/detekt/api/Location$Companion;
public fun <init> (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Lio/github/detekt/psi/FilePath;)V
public fun <init> (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Lio/github/detekt/psi/FilePath;Lio/gitlab/arturbosch/detekt/api/SourceLocation;)V
public synthetic fun <init> (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Lio/github/detekt/psi/FilePath;Lio/gitlab/arturbosch/detekt/api/SourceLocation;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;)V
public fun <init> (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;)V
public synthetic fun <init> (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;Lio/gitlab/arturbosch/detekt/api/SourceLocation;)V
public synthetic fun <init> (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;Lio/gitlab/arturbosch/detekt/api/SourceLocation;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun <init> (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Ljava/lang/String;)V
public fun compact ()Ljava/lang/String;
public fun compactWithSignature ()Ljava/lang/String;
public final fun component1 ()Lio/gitlab/arturbosch/detekt/api/SourceLocation;
public final fun component2 ()Lio/gitlab/arturbosch/detekt/api/TextLocation;
public final fun component3 ()Ljava/lang/String;
public final fun component4 ()Lio/github/detekt/psi/FilePath;
public final fun copy (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;)Lio/gitlab/arturbosch/detekt/api/Location;
public static synthetic fun copy$default (Lio/gitlab/arturbosch/detekt/api/Location;Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;ILjava/lang/Object;)Lio/gitlab/arturbosch/detekt/api/Location;
public final fun component5 ()Lio/gitlab/arturbosch/detekt/api/SourceLocation;
public final fun copy (Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;Lio/gitlab/arturbosch/detekt/api/SourceLocation;)Lio/gitlab/arturbosch/detekt/api/Location;
public static synthetic fun copy$default (Lio/gitlab/arturbosch/detekt/api/Location;Lio/gitlab/arturbosch/detekt/api/SourceLocation;Lio/gitlab/arturbosch/detekt/api/TextLocation;Ljava/lang/String;Lio/github/detekt/psi/FilePath;Lio/gitlab/arturbosch/detekt/api/SourceLocation;ILjava/lang/Object;)Lio/gitlab/arturbosch/detekt/api/Location;
public fun equals (Ljava/lang/Object;)Z
public final fun getEndSource ()Lio/gitlab/arturbosch/detekt/api/SourceLocation;
public final fun getFile ()Ljava/lang/String;
public final fun getFilePath ()Lio/github/detekt/psi/FilePath;
public final fun getSource ()Lio/gitlab/arturbosch/detekt/api/SourceLocation;
Expand Down
Expand Up @@ -24,15 +24,17 @@ data class Location @Deprecated("Consider relative path by passing a [FilePath]"
)
)
val file: String,
val filePath: FilePath = FilePath.fromAbsolute(Paths.get(file))
val filePath: FilePath = FilePath.fromAbsolute(Paths.get(file)),
val endSource: SourceLocation = SourceLocation(-1, -1)
) : Compactable {

@Suppress("DEPRECATION")
constructor(
source: SourceLocation,
text: TextLocation,
filePath: FilePath
) : this(source, text, filePath.absolutePath.toString(), filePath)
filePath: FilePath,
endSource: SourceLocation = SourceLocation(-1, -1)
) : this(source, text, filePath.absolutePath.toString(), filePath, endSource)

@Suppress("DEPRECATION")
@Deprecated(
Expand Down Expand Up @@ -62,20 +64,33 @@ data class Location @Deprecated("Consider relative path by passing a [FilePath]"
fun from(element: PsiElement, offset: Int = 0): Location {
val start = startLineAndColumn(element, offset)
val sourceLocation = SourceLocation(start.line, start.column)
val end = endLineAndColumn(element, offset)
val endSourceLocation = SourceLocation(end.line, end.column)
val textLocation = TextLocation(element.startOffset + offset, element.endOffset + offset)
return Location(sourceLocation, textLocation, element.containingFile.toFilePath())
return Location(sourceLocation, textLocation, element.containingFile.toFilePath(), endSourceLocation)
}

/**
* Determines the line and column of a [PsiElement] in the source file.
* Determines the start line and column of a [PsiElement] in the source file.
*/
fun startLineAndColumn(element: PsiElement, offset: Int = 0): PsiDiagnosticUtils.LineAndColumn {
fun startLineAndColumn(element: PsiElement, offset: Int = 0): PsiDiagnosticUtils.LineAndColumn =
lineAndColumn(
element,
TextRange(element.textRange.startOffset + offset, element.textRange.endOffset + offset)
)

/**
* Determines the end line and column of a [PsiElement] in the source file.
*/
private fun endLineAndColumn(element: PsiElement, offset: Int = 0): PsiDiagnosticUtils.LineAndColumn =
lineAndColumn(
element,
TextRange(element.textRange.endOffset + offset, element.textRange.endOffset + offset)
)

private fun lineAndColumn(element: PsiElement, range: TextRange): PsiDiagnosticUtils.LineAndColumn {
return try {
val range = element.textRange
DiagnosticUtils.getLineAndColumnInPsiFile(
element.containingFile,
TextRange(range.startOffset + offset, range.endOffset + offset)
)
DiagnosticUtils.getLineAndColumnInPsiFile(element.containingFile, range)
} catch (@Suppress("SwallowedException", "TooGenericExceptionCaught") e: IndexOutOfBoundsException) {
// #3317 If any rule mutates the PsiElement, searching the original PsiElement may throw exception.
PsiDiagnosticUtils.LineAndColumn(-1, -1, null)
Expand Down

0 comments on commit dacb224

Please sign in to comment.