Skip to content

Commit

Permalink
Tests for KSNode.location()
Browse files Browse the repository at this point in the history
  • Loading branch information
ting-yuan committed Aug 23, 2024
1 parent 631b9ff commit 384cf76
Show file tree
Hide file tree
Showing 5 changed files with 217 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -363,6 +363,12 @@ class KSPCompilerPluginTest : AbstractKSPCompilerPluginTest() {
runTest("../test-utils/testData/api/libOrigins.kt")
}

@TestMetadata("locations.kt")
@Test
fun testLocations() {
runTest("../test-utils/testData/api/locations.kt")
}

@TestMetadata("makeNullable.kt")
@Test
fun testMakeNullable() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,12 @@ class KSPAATest : AbstractKSPAATest() {
runTest("../test-utils/testData/api/libOrigins.kt")
}

@TestMetadata("locations.kt")
@Test
fun testLocations() {
runTest("../kotlin-analysis-api/testData/locations.kt")
}

@TestMetadata("makeNullable.kt")
@Test
fun testMakeNullable() {
Expand Down
83 changes: 83 additions & 0 deletions kotlin-analysis-api/testData/locations.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* Copyright 2022 Google LLC
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

// 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
// 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
// END

// FILE: Location.kt

annotation class Location

// FILE: K.kt

@file:Location

@Location
typealias A = K

@Location
class K<@Location T>(
@Location val v1: Int,
@Location p1: String,
) {
@Location val v2: Int

@Location
fun f1(@Location p2: Int) = Unit

@get:Location
@set:Location
var v3: List<Double>
get() = TODO()
set(v: List<Double>) = Unit
}

// FILE: J.java

@Location
class K<@Location T> {
@Location int v2 = 0;

@Location
void f1(@Location int p2) {

}

@Location
List<Double> v3 = List<double>()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.google.devtools.ksp.processor

import com.google.devtools.ksp.processing.Resolver
import com.google.devtools.ksp.processing.SymbolProcessor
import com.google.devtools.ksp.processing.SymbolProcessorEnvironment
import com.google.devtools.ksp.symbol.FileLocation
import com.google.devtools.ksp.symbol.KSAnnotated
import com.google.devtools.ksp.symbol.NonExistLocation
import java.io.File

class LocationsProcessor : AbstractTestProcessor() {
val result = mutableListOf<String>()
override fun toResult(): List<String> {
return result.sorted()
}

var round = 0
override fun process(resolver: Resolver): List<KSAnnotated> {
if (round++ == 0) {
resolver.getSymbolsWithAnnotation("Location").forEach {
when (val location = it.location) {
is FileLocation -> {
val filename = File(location.filePath).name
val line = location.lineNumber
result.add("$it:$filename:$line")
}
is NonExistLocation -> result.add("$it:NonExistLocation")
}
}
}

return emptyList()
}

lateinit var env: SymbolProcessorEnvironment

override fun create(environment: SymbolProcessorEnvironment): SymbolProcessor {
env = environment
return this
}
}
81 changes: 81 additions & 0 deletions test-utils/testData/api/locations.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
* Copyright 2022 Google LLC
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

// 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
// END

// FILE: Location.kt

annotation class Location

// FILE: K.kt

@file:Location

@Location
typealias A = K

@Location
class K<@Location T>(
@Location val v1: Int,
@Location p1: String,
) {
@Location val v2: Int

@Location
fun f1(@Location p2: Int) = Unit

@get:Location
@set:Location
var v3: List<Double>
get() = TODO()
set(v: List<Double>) = Unit
}

// FILE: J.java

@Location
class K<@Location T> {
@Location int v2 = 0;

@Location
void f1(@Location int p2) {

}

@Location
List<Double> v3 = List<double>()
}

0 comments on commit 384cf76

Please sign in to comment.