8000 Track end line numbers and column information by viluon · Pull Request #2499 · google/ksp · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Track end line numbers and column information #2499

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

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions api/api.base
Original file line number Diff line number Diff line change
Expand Up @@ -256,12 +256,21 @@ package com.google.devtools.ksp.symbol {
}

public final class FileLocation extends com.google.devtools.ksp.symbol.Location {
ctor public FileLocation(@NonNull String filePath, int lineNumber);
ctor public FileLocation(@NonNull String filePath, int lineNumber, int column, int endLineNumber, int endColumn);
method @NonNull public String component1();
method public int component2();
method @NonNull public com.google.devtools.ksp.symbol.FileLocation copy(@NonNull String filePath, int lineNumber);
method public int component3();
method public int component4();
method public int component5();
method @NonNull public com.google.devtools.ksp.symbol.FileLocation copy(@NonNull String filePath, int lineNumber, int column, int endLineNumber, int endColumn);
method public int getColumn();
method public int getEndColumn();
method public int getEndLineNumber();
method @NonNull public String getFilePath();
method public int getLineNumber();
property public final int column;
property public final int endColumn;
property public final int endLineNumber;
property @NonNull public final String filePath;
property public final int lineNumber;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,12 @@ package com.google.devtools.ksp.symbol

sealed class Location

data class FileLocation(val filePath: String, val lineNumber: Int) : Location()
data class FileLocation(
val filePath: String,
val lineNumber: Int,
val column: Int,
val endLineNumber: Int,
val endColumn: Int,
) : Location()

object NonExistLocation : Location()
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ import org.jetbrains.kotlin.load.kotlin.getContainingKotlinJvmBinaryClass
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.endOffset
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.getOwnerForEffectiveDispatchReceiverParameter
Expand Down Expand Up @@ -101,7 +102,16 @@ fun PsiElement.findParentDeclaration(): KSDeclaration? {
fun PsiElement.toLocation(): Location {
val file = this.containingFile
val document = ResolverImpl.instance!!.psiDocumentManager.getDocument(file) ?: return NonExistLocation
return FileLocation(file.virtualFile.path, document.getLineNumber(this.textOffset) + 1)
val lineNumber = document.getLineNumber(textOffset)
val endLineNumber = document.getLineNumber(endOffset)

return FileLocation(
filePath = file.virtualFile.path,
lineNumber = lineNumber + 1,
column = textOffset - document.getLineStartOffset(lineNumber),
endLineNumber = endLineNumber + 1,
endColumn = document.getLineEndOffset(endLineNumber) - document.getLineStartOffset(endLineNumber),
)
}

// TODO: handle local functions/classes correctly
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ import org.jetbrains.kotlin.name.JvmStandardClassIds.JVM_WILDCARD_ANNOTATION_FQ_
import org.jetbrains.kotlin.psi.KtAnnotated
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtParameter
import org.jetbrains.kotlin.psi.psiUtil.endOffset
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.types.getEffectiveVariance
import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments
Expand Down Expand Up @@ -231,7 +232,16 @@ internal fun PsiElement?.toLocation(): Location {
}
val file = this.containingFile
val document = KSPCoreEnvironment.instance.psiDocumentManager.getDocument(file) ?: return NonExistLocation
return FileLocation(file.virtualFile.path, document.getLineNumber(this.textOffset) + 1)
val lineNumber = document.getLineNumber(textOffset)
val endLineNumber = document.getLineNumber(endOffset)

return FileLocation(
filePath = file.virtualFile.path,
lineNumber = lineNumber + 1,
column = textOffset - document.getLineStartOffset(lineNumber),
endLineNumber = endLineNumber + 1,
endColumn = document.getLineEndOffset(endLineNumber) - document.getLineStartOffset(endLineNumber),
)
}

internal fun KaSymbol.toContainingFile(): KSFile? {
Expand Down
38 changes: 19 additions & 19 deletions kotlin-analysis-api/testData/locations.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,25 +17,25 @@

// TEST PROCESSOR: LocationsProcessor
// EXPECTED:
// A:K.kt:51
// File: K.kt:K.kt:1
// K:J.java:73
// K:K.kt:54
// T:J.java:73
// T:J.java:73
// T:K.kt:54
// f1:J.java:77
// f1:K.kt:61
// p1:K.kt:56
// p2:J.java:77
// p2:K.kt:61
// v1:K.kt:55
// v1:K.kt:55
// v2:J.java:74
// v2:K.kt:58
// v3.getter():K.kt:66
// v3.setter():K.kt:67
// v3:J.java:82
// A:K.kt:51,10-51,15
// File: K.kt:K.kt:1,0-70,0
// K:J.java:73,6-83,1
// K:K.kt:54,6-68,1
// T:J.java:73,8-73,22
// T:J.java:73,8-73,22
// T:K.kt:54,18-54,21
// f1:J.java:77,9-79,5
// f1:K.kt:61,8-61,36
// p1:K.kt:56,14-56,25
// p2:J.java:77,26-77,31
// p2:K.kt:61,21-61,36
// v1:K.kt:55,18-55,26
// v1:K.kt:55,18-55,26
// v2:J.java:74,18-74,25
// v2:K.kt:58,18-58,25
// v3.getter():K.kt:66,8-66,22
// v3.setter():K.kt:67,8-67,35
// v3:J.java:82,17-82,36
// END


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,13 @@ class LocationsProcessor : AbstractTestProcessor() {
is FileLocation -> {
val filename = File(location.filePath).name
val line = location.lineNumber
result.add("$it:$filename:$line")
val endLine = location.endLineNumber
val column = location.column
val endColumn = location.endColumn

result += "$it:$filename:$line,$column-$endLine,$endColumn"
}
is NonExistLocation -> result.add("$it:NonExistLocation")
is NonExistLocation -> result += "$it:NonExistLocation"
}
}
}
Expand Down
36 changes: 18 additions & 18 deletions test-utils/testData/api/locations.kt
Original file line number Diff line number Diff line change
Expand Up @@ -17,24 +17,24 @@

// TEST PROCESSOR: LocationsProcessor
// EXPECTED:
// A:K.kt:49
// File: K.kt:K.kt:1
// K:J.java:71
// K:K.kt:52
// T:J.java:71
// T:K.kt:52
// f1:J.java:75
// f1:K.kt:59
// p1:K.kt:54
// p2:J.java:75
// p2:K.kt:59
// v1:K.kt:53
// v1:K.kt:53
// v2:J.java:72
// v2:K.kt:56
// v3.getter():K.kt:64
// v3.setter():K.kt:65
// v3:J.java:80
// A:K.kt:49,10-49,15
// File: K.kt:K.kt:1,0-68,0
// K:J.java:71,6-81,1
// K:K.kt:52,6-66,1
// T:J.java:71,8-71,22
// T:K.kt:52,18-52,21
// f1:J.java:75,9-77,5
// f1:K.kt:59,8-59,36
// p1:K.kt:54,14-54,25
// p2:J.java:75,26-75,31
// p2:K.kt:59,21-59,36
// v1:K.kt:53,18-53,26
// v1:K.kt:53,18-53,26
// v2:J.java:72,18-72,25
// v2:K.kt:56,18-56,25
// v3.getter():K.kt:64,8-64,22
// v3.setter():K.kt:65,8-65,35
// v3:J.java:80,17-80,36
// END

// FILE: Location.kt
Expand Down
0