8000 Fix origin of KSAnnotation by ting-yuan · Pull Request #2424 · google/ksp · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Fix origin of KSAnnotation #2424

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

Merged
merged 2 commits into from
Apr 22, 2025
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class KSAnnotationImpl private constructor(

override val arguments: List<KSValueArgument> by lazy {
val presentArgs = annotationApplication.arguments.map {
KSValueArgumentImpl.getCached(it, this, Origin.KOTLIN)
KSValueArgumentImpl.getCached(it, this, origin)
}
val presentNames = presentArgs.mapNotNull { it.name?.asString() }
val absentArgs = defaultArguments.filter {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class KSAnnotationResolvedImpl private constructor(
}
override val arguments: List<KSValueArgument> by lazy {
val presentArgs = annotationApplication.arguments.map {
KSValueArgumentImpl.getCached(it, this, Origin.KOTLIN)
KSValueArgumentImpl.getCached(it, this, origin)
}
val presentNames = presentArgs.mapNotNull { it.name?.asString() }
val absentArgs = analyze {
Expand Down Expand Up @@ -137,8 +137,7 @@ class KSAnnotationResolvedImpl private constructor(
}
}

// FIXME: use parent.origin
override val origin: Origin = Origin.KOTLIN_LIB
override val origin: Origin = parent?.origin ?: Origin.KOTLIN_LIB

override val location: Location by lazy {
NonExistLocation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -430,11 +430,10 @@ class KSPAATest : AbstractKSPAATest() {
runTest("../test-utils/testData/api/lateinitProperties.kt")
}

@Disabled
@TestMetadata("libOrigins.kt")
@Test
fun testLibOrigins() {
runTest("../test-utils/testData/api/libOrigins.kt")
runTest("../kotlin-analysis-api/testData/libOrigins.kt")
}

@TestMetadata("locations.kt")
Expand Down
113 changes: 113 additions & 0 deletions kotlin-analysis-api/testData/libOrigins.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
/*
* Copyright 2020 Google LLC
* Copyright 2010-2020 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: LibOriginsProcessor
// EXPECTED:
// Validating Anno1
// Validating Anno2
// Validating Anno3
// Validating Anno4
// Validating JavaLib
// Validating KotlinLibClass
// Exception: [KotlinLibClass, T1, Any?]: SYNTHETIC
// Exception: [KotlinLibClass, T1, Any?]: SYNTHETIC
// Validating kotlinLibFuntion
// Validating kotlinLibProperty
// Validating File: JavaSrc.java
// Exception: [File: JavaSrc.java, JavaSrc, synthetic constructor for JavaSrc, JavaSrc]: SYNTHETIC
// Exception: [File: JavaSrc.java, JavaSrc, synthetic constructor for JavaSrc]: SYNTHETIC
// Validating File: KotlinSrc.kt
// Exception: [File: KotlinSrc.kt, kotlinSrcProperty, kotlinSrcProperty.getter(), Short, Short]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, kotlinSrcProperty, kotlinSrcProperty.getter(), Short]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, kotlinSrcProperty, kotlinSrcProperty.getter()]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, KotlinSrcClass, Any]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, KotlinSrcClass, T3, Any?]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, KotlinSrcClass, q1, q1.getter(), Set<T3>]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, KotlinSrcClass, q1, q1.getter()]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, KotlinSrcClass, q2, q2.getter(), Short]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, KotlinSrcClass, q2, q2.getter()]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, KotlinSrcClass, q3, q3.getter(), Short, Short]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, KotlinSrcClass, q3, q3.getter(), Short]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, KotlinSrcClass, q3, q3.getter()]: SYNTHETIC
// Exception: [File: KotlinSrc.kt, KotlinSrcClass, T3, Any?]: SYNTHETIC
// END
// MODULE: module1
// FILE: KotlinLib.kt
package foo.bar

val kotlinLibProperty: Int = 0
fun kotlinLibFuntion(): Int = 0

annotation class Anno1
annotation class Anno2
annotation class Anno3
annotation class Anno4

@Anno1
class KotlinLibClass<T1>(val p1: List<T1>, val p2: Int) {
val p3: Int = 0
fun f1(p4: T1): Int = 0
fun f2(p5: List<T1>): Int = 0
fun f3(p6: List<Int>): Int = 0
}

// FILE: JavaLib.java
package foo.bar;

import java.util.ArrayList;

@Anno2
class JavaLib<T2> {
Byte javaLibField = 0;
Byte javaLibFunction() {
return 0;
}
Byte f1(T2 p0, ArrayList<T2> p1) {
return 0;
}
}

// MODULE: main(module1)
// FILE: KotlinSrc.kt
package foo.bar
val kotlinSrcProperty: Short = 0
fun kotlinSrcFuntion(): Short = 0

@Anno3
class KotlinSrcClass<T3>(val q1: Set<T3>, val q2: Short) {
val q3: Short = 0
fun g1(q4: T3): Short = 0
fun g2(q5: Set<T3>): Short = 0
fun g3(q6: Set<Short>): Short = 0
}

// FILE: JavaSrc.java
package foo.bar;

import java.util.LinkedList;

@Anno4
class JavaSrc {
Long javaSrcField = 0;
Long javaSrcFunction() {
return 0;
}
Long f2<T4>(T4 p0, LinkedList<T4> p1) {
return 0;
}
}

< 9693 /tr>
Original file line number Diff line number Diff line change
Expand Up @@ -25,51 +25,29 @@ import com.google.devtools.ksp.visitor.KSTopDownVisitor

class LibOriginsProcessor : AbstractTestProcessor() {
private val result = mutableListOf<String>()
private val visited = mutableSetOf<KSNode>()

override fun toResult(): List<String> {
return result
}

inner class MyCollector : KSTopDownVisitor<Unit, Unit>() {
override fun defaultHandler(node: KSNode, data: Unit) = Unit

override fun visitDeclaration(declaration: KSDeclaration, data: Unit) {
result.add(
"declaration: ${
declaration.qualifiedName?.asString() ?: declaration.simpleName.asString()
}: ${declaration.origin.name}"
)
super.visitDeclaration(declaration, data)
}

override fun visitAnnotation(annotation: KSAnnotation, data: Unit) {
result.add("annotation: ${annotation.shortName.asString()}: ${annotation.origin.name}")
super.visitAnnotation(annotation, data)
}

override fun visitTypeReference(typeReference: KSTypeReference, data: Unit) {
result.add("reference: $typeReference: ${typeReference.origin.name}")
super.visitTypeReference(typeReference, data)
}

override fun visitClassifierReference(reference: KSClassifierReference, data: Unit) {
result.add("classifier ref: $reference: ${reference.origin.name}")
super.visitClassifierReference(reference, data)
}

override fun visitValueParameter(valueParameter: KSValueParameter, data: Unit) {
result.add("value param: $valueParameter: ${valueParameter.origin.name}")
super.visitValueParameter(valueParameter, data)
}

override fun visitTypeArgument(typeArgument: KSTypeArgument, data: Unit) {
result.add("type arg: $typeArgument: ${typeArgument.origin.name}")
super.visitTypeArgument(typeArgument, data)
inner class MyCollector : KSTopDownVisitor<Origin, Unit>() {
private fun KSNode.pretty(): String {
val parents: MutableList<KSNode> = mutableListOf(this)
var curr: KSNode = this
while (curr.parent != null) {
curr = curr.parent!!
parents.add(curr)
}
parents.reverse()
return parents.toString()
}

override fun visitPropertyAccessor(accessor: KSPropertyAccessor, data: Unit) {
result.add("property accessor: $accessor: ${accessor.origin.name}")
super.visitPropertyAccessor(accessor, data)
override fun defaultHandler(node: KSNode, data: Origin) {
if (node.origin != data && !visited.contains(node)) {
visited.add(node)
result.add("Exception: ${node.pretty()}: ${node.origin}")
}
}
}

Expand All @@ -78,17 +56,18 @@ class LibOriginsProcessor : AbstractTestProcessor() {
val visitor = MyCollector()

// FIXME: workaround for https://github.com/google/ksp/issues/418
resolver.getDeclarationsFromPackage("foo.bar").forEach {
if (it.containingFile == null) {
it.accept(visitor, Unit)
resolver.getDeclarationsFromPackage("foo.bar").sortedBy { it.simpleName.asString() }.forEach {
if (it.containingFile == null || it.containingFile.toString().endsWith(".class")) {
result.add("Validating $it")
it.accept(visitor, it.origin)
}
}

resolver.getNewFiles().forEach {
it.accept(visitor, Unit)
resolver.getNewFiles().sortedBy { it.fileName }.forEach {
result.add("Validating $it")
it.accept(visitor, it.origin)
}

result.sort()
return emptyList()
}
}
Loading
Loading
0