Skip to content

Commit e99509f

Browse files
committed
Reverse dependencies of test-utils
by splitting and merging it into compiler-plugin and kotlin-analysis-api. (cherry picked from commit 9d33227)
1 parent f34f279 commit e99509f

23 files changed

+727
-104
lines changed

compiler-plugin/build.gradle.kts

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ description = "Kotlin Symbol Processing"
77
val intellijVersion: String by project
88
val kotlinBaseVersion: String by project
99

10+
val junitVersion: String by project
11+
val junit5Version: String by project
12+
val junitPlatformVersion: String by project
13+
val libsForTesting by configurations.creating
14+
val libsForTestingCommon by configurations.creating
15+
1016
tasks.withType<KotlinCompile> {
1117
compilerOptions.freeCompilerArgs.add("-Xjvm-default=all-compatibility")
1218
}
@@ -36,6 +42,8 @@ dependencies {
3642
"com.jetbrains.intellij.platform:core",
3743
"com.jetbrains.intellij.platform:core-impl",
3844
"com.jetbrains.intellij.platform:extensions",
45+
"com.jetbrains.intellij.java:java-frontback-psi",
46+
"com.jetbrains.intellij.java:java-frontback-psi-impl",
3947
"com.jetbrains.intellij.java:java-psi",
4048
"com.jetbrains.intellij.java:java-psi-impl",
4149
).forEach {
@@ -48,6 +56,20 @@ dependencies {
4856

4957
implementation(project(":api"))
5058
implementation(project(":common-util"))
59+
60+
testImplementation("junit:junit:$junitVersion")
61+
testImplementation("org.junit.jupiter:junit-jupiter-api:$junit5Version")
62+
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junit5Version")
63+
testRuntimeOnly("org.junit.jupiter:junit-jupiter-params:$junit5Version")
64+
testRuntimeOnly("org.junit.platform:junit-platform-suite:$junitPlatformVersion")
65+
testImplementation("org.jetbrains.kotlin:kotlin-compiler:$kotlinBaseVersion")
66+
testImplementation("org.jetbrains.kotlin:kotlin-compiler-internal-test-framework:$kotlinBaseVersion")
67+
testImplementation(project(":test-utils"))
68+
69+
libsForTesting(kotlin("stdlib", kotlinBaseVersion))
70+
libsForTesting(kotlin("test", kotlinBaseVersion))
71+
libsForTesting(kotlin("script-runtime", kotlinBaseVersion))
72+
libsForTestingCommon(kotlin("stdlib-common", kotlinBaseVersion))
5173
}
5274

5375
val dokkaJavadocJar by tasks.register<Jar>("dokkaJavadocJar") {
@@ -57,3 +79,46 @@ val dokkaJavadocJar by tasks.register<Jar>("dokkaJavadocJar") {
5779
from(project(":common-util").tasks.dokkaJavadoc.flatMap { it.outputDirectory })
5880
archiveClassifier.set("javadoc")
5981
}
82+
83+
tasks.register<Copy>("CopyLibsForTesting") {
84+
from(configurations.get("libsForTesting"))
85+
into("dist/kotlinc/lib")
86+
val escaped = Regex.escape(kotlinBaseVersion)
87+
rename("(.+)-$escaped\\.jar", "$1.jar")
88+
}
89+
90+
tasks.register<Copy>("CopyLibsForTestingCommon") {
91+
from(configurations.get("libsForTestingCommon"))
92+
into("dist/common")
93+
val escaped = Regex.escape(kotlinBaseVersion)
94+
rename("(.+)-$escaped\\.jar", "$1.jar")
95+
}
96+
97+
tasks.test {
98+
dependsOn("CopyLibsForTesting")
99+
dependsOn("CopyLibsForTestingCommon")
100+
maxHeapSize = "2g"
101+
102+
useJUnitPlatform()
103+
104+
systemProperty("idea.is.unit.test", "true")
105+
systemProperty("java.awt.headless", "true")
106+
environment("NO_FS_ROOTS_ACCESS_CHECK", "true")
107+
108+
testLogging {
109+
events("passed", "skipped", "failed")
110+
}
111+
112+
lateinit var tempTestDir: File
113+
doFirst {
114+
val ideaHomeDir = buildDir.resolve("tmp/ideaHome").takeIf { it.exists() || it.mkdirs() }!!
115+
jvmArgumentProviders.add(com.google.devtools.ksp.RelativizingPathProvider("idea.home.path", ideaHomeDir))
116+
117+
tempTestDir = createTempDir()
118+
jvmArgumentProviders.add(com.google.devtools.ksp.RelativizingPathProvider("java.io.tmpdir", tempTestDir))
119+
}
120+
121+
doLast {
122+
delete(tempTestDir)
123+
}
124+
}
Binary file not shown.

test-utils/src/main/kotlin/com/google/devtools/ksp/processor/RecordJavaAsMemberOfProcessor.kt renamed to compiler-plugin/src/test/kotlin/com/google/devtools/ksp/processor/RecordJavaAsMemberOfProcessor.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package com.google.devtools.ksp.processor
1919

20-
import com.google.devtools.ksp.impl.ResolverAAImpl
2120
import com.google.devtools.ksp.processing.Resolver
2221
import com.google.devtools.ksp.processing.impl.ResolverImpl
2322
import com.google.devtools.ksp.symbol.*
@@ -56,7 +55,6 @@ class RecordJavaAsMemberOfProcessor : AbstractTestProcessor() {
5655

5756
val m = when (resolver) {
5857
is ResolverImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
59-
is ResolverAAImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
6058
else -> throw IllegalStateException("Unknown Resolver: $resolver")
6159
}
6260
m.forEach { symbol, files ->

test-utils/src/main/kotlin/com/google/devtools/ksp/processor/RecordJavaGetAllMembersProcessor.kt renamed to compiler-plugin/src/test/kotlin/com/google/devtools/ksp/processor/RecordJavaGetAllMembersProcessor.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package com.google.devtools.ksp.processor
1919

20-
import com.google.devtools.ksp.impl.ResolverAAImpl
2120
import com.google.devtools.ksp.processing.Resolver
2221
import com.google.devtools.ksp.processing.impl.ResolverImpl
2322
import com.google.devtools.ksp.symbol.*
@@ -44,7 +43,6 @@ class RecordJavaGetAllMembersProcessor : AbstractTestProcessor() {
4443

4544
val m = when (resolver) {
4645
is ResolverImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
47-
is ResolverAAImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
4846
else -> throw IllegalStateException("Unknown Resolver: $resolver")
4947
}
5048
m.forEach { symbol, files ->

test-utils/src/main/kotlin/com/google/devtools/ksp/processor/RecordJavaOverridesProcessor.kt renamed to compiler-plugin/src/test/kotlin/com/google/devtools/ksp/processor/RecordJavaOverridesProcessor.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package com.google.devtools.ksp.processor
1919

20-
import com.google.devtools.ksp.impl.ResolverAAImpl
2120
import com.google.devtools.ksp.processing.Resolver
2221
import com.google.devtools.ksp.processing.impl.ResolverImpl
2322
import com.google.devtools.ksp.symbol.*
@@ -61,7 +60,6 @@ class RecordJavaOverridesProcessor : AbstractTestProcessor() {
6160

6261
val m = when (resolver) {
6362
is ResolverImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
64-
is ResolverAAImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
6563
else -> throw IllegalStateException("Unknown Resolver: $resolver")
6664
}
6765
m.forEach { symbol, files ->

test-utils/src/main/kotlin/com/google/devtools/ksp/processor/RecordJavaProcessor.kt renamed to compiler-plugin/src/test/kotlin/com/google/devtools/ksp/processor/RecordJavaProcessor.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package com.google.devtools.ksp.processor
1919

20-
import com.google.devtools.ksp.impl.ResolverAAImpl
2120
import com.google.devtools.ksp.processing.Resolver
2221
import com.google.devtools.ksp.processing.impl.ResolverImpl
2322
import com.google.devtools.ksp.symbol.*
@@ -40,7 +39,6 @@ class RecordJavaProcessor : AbstractTestProcessor() {
4039
}
4140
val m = when (resolver) {
4241
is ResolverImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
43-
is ResolverAAImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
4442
else -> throw IllegalStateException("Unknown Resolver: $resolver")
4543
}
4644
m.forEach { symbol, files ->

test-utils/src/main/kotlin/com/google/devtools/ksp/processor/RecordJavaSupertypesProcessor.kt renamed to compiler-plugin/src/test/kotlin/com/google/devtools/ksp/processor/RecordJavaSupertypesProcessor.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
package com.google.devtools.ksp.processor
1919

20-
import com.google.devtools.ksp.impl.ResolverAAImpl
2120
import com.google.devtools.ksp.processing.Resolver
2221
import com.google.devtools.ksp.processing.impl.ResolverImpl
2322
import com.google.devtools.ksp.symbol.*
@@ -41,7 +40,6 @@ class RecordJavaSupertypesProcessor : AbstractTestProcessor() {
4140
}
4241
val m = when (resolver) {
4342
is ResolverImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
44-
is ResolverAAImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
4543
else -> throw IllegalStateException("Unknown Resolver: $resolver")
4644
}
4745
m.forEach { symbol, files ->

kotlin-analysis-api/build.gradle.kts

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ val signingPassword: String? by project
88

99
val kotlinBaseVersion: String by project
1010

11+
val junitVersion: String by project
12+
val junit5Version: String by project
13+
val junitPlatformVersion: String by project
14+
val libsForTesting by configurations.creating
15+
val libsForTestingCommon by configurations.creating
16+
1117
val aaKotlinBaseVersion: String by project
1218
val aaIntellijVersion: String by project
1319
val aaGuavaVersion: String by project
@@ -27,6 +33,7 @@ plugins {
2733

2834
val depSourceJars by configurations.creating
2935
val depJarsForCheck by configurations.creating
36+
val compilerJar by configurations.creating
3037

3138
dependencies {
3239
listOf(
@@ -99,10 +106,26 @@ dependencies {
99106
implementation(project(":common-util"))
100107

101108
testImplementation(kotlin("stdlib", aaKotlinBaseVersion))
109+
testImplementation("junit:junit:$junitVersion")
110+
testImplementation("org.junit.jupiter:junit-jupiter-api:$junit5Version")
111+
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:$junit5Version")
112+
testRuntimeOnly("org.junit.jupiter:junit-jupiter-params:$junit5Version")
113+
testRuntimeOnly("org.junit.platform:junit-platform-suite:$junitPlatformVersion")
114+
testImplementation("org.jetbrains.kotlin:kotlin-compiler:$aaKotlinBaseVersion")
115+
testImplementation("org.jetbrains.kotlin:kotlin-compiler-internal-test-framework:$aaKotlinBaseVersion")
116+
testImplementation(project(":common-deps"))
117+
testImplementation(project(":test-utils"))
118+
119+
libsForTesting(kotlin("stdlib", aaKotlinBaseVersion))
120+
libsForTesting(kotlin("test", aaKotlinBaseVersion))
121+
libsForTesting(kotlin("script-runtime", aaKotlinBaseVersion))
122+
libsForTestingCommon(kotlin("stdlib-common", aaKotlinBaseVersion))
102123

103124
depJarsForCheck("org.jetbrains.kotlin", "kotlin-stdlib", kotlinBaseVersion)
104125
depJarsForCheck(project(":api"))
105126
depJarsForCheck(project(":common-deps"))
127+
128+
compilerJar("org.jetbrains.kotlin:kotlin-compiler-common-for-ide:$aaKotlinBaseVersion")
106129
}
107130

108131
sourceSets.main {
@@ -229,3 +252,46 @@ kotlin {
229252
freeCompilerArgs.add("-Xcontext-receivers")
230253
}
231254
}
255+
256+
tasks.register<Copy>("CopyLibsForTesting") {
257+
from(configurations.get("libsForTesting"))
258+
into("dist/kotlinc/lib")
259+
val escaped = Regex.escape(aaKotlinBaseVersion)
260+
rename("(.+)-$escaped\\.jar", "$1.jar")
261+
}
262+
263+
tasks.register<Copy>("CopyLibsForTestingCommon") {
264+
from(configurations.get("libsForTestingCommon"))
265+
into("dist/common")
266+
val escaped = Regex.escape(aaKotlinBaseVersion)
267+
rename("(.+)-$escaped\\.jar", "$1.jar")
268+
}
269+
270+
tasks.test {
271+
dependsOn("CopyLibsForTesting")
272+
dependsOn("CopyLibsForTestingCommon")
273+
maxHeapSize = "2g"
274+
275+
useJUnitPlatform()
276+
277+
systemProperty("idea.is.unit.test", "true")
278+
systemProperty("java.awt.headless", "true")
279+
environment("NO_FS_ROOTS_ACCESS_CHECK", "true")
280+
281+
testLogging {
282+
events("passed", "skipped", "failed")
283+
}
284+
285+
lateinit var tempTestDir: File
286+
doFirst {
287+
val ideaHomeDir = buildDir.resolve("tmp/ideaHome").takeIf { it.exists() || it.mkdirs() }!!
288+
jvmArgumentProviders.add(com.google.devtools.ksp.RelativizingPathProvider("idea.home.path", ideaHomeDir))
289+
290+
tempTestDir = createTempDir()
291+
jvmArgumentProviders.add(com.google.devtools.ksp.RelativizingPathProvider("java.io.tmpdir", tempTestDir))
292+
}
293+
294+
doLast {
295+
delete(tempTestDir)
296+
}
297+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<idea-plugin>
2+
<id>org.jetbrains.kotlin</id>
3+
4+
<extensionPoints>
5+
<extensionPoint qualifiedName="org.jetbrains.kotlin.analyzeCompleteHandlerExtension"
6+
interface="org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension"
7+
area="IDEA_PROJECT"/>
8+
<extensionPoint qualifiedName="org.jetbrains.kotlin.extensions.internal.callResolutionInterceptorExtension"
9+
interface="org.jetbrains.kotlin.extensions.internal.CallResolutionInterceptorExtension"
10+
area="IDEA_PROJECT"/>
11+
<extensionPoint qualifiedName="org.jetbrains.kotlin.extensions.internal.typeResolutionInterceptorExtension"
12+
interface="org.jetbrains.kotlin.extensions.internal.TypeResolutionInterceptorExtension"
13+
area="IDEA_PROJECT"/>
14+
<extensionPoint qualifiedName="org.jetbrains.kotlin.extensions.typeAttributeTranslatorExtension"
15+
interface="org.jetbrains.kotlin.extensions.TypeAttributeTranslatorExtension"
16+
area="IDEA_PROJECT"/>
17+
<extensionPoint qualifiedName="org.jetbrains.kotlin.diagnosticSuppressor"
18+
interface="org.jetbrains.kotlin.resolve.diagnostics.DiagnosticSuppressor"
19+
area="IDEA_PROJECT" dynamic="true"/>
20+
<extensionPoint qualifiedName="org.jetbrains.kotlin.expressionCodegenExtension"
21+
interface="org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension"
22+
area="IDEA_PROJECT" dynamic="true"/>
23+
<extensionPoint qualifiedName="org.jetbrains.kotlin.syntheticResolveExtension"
24+
interface="org.jetbrains.kotlin.resolve.extensions.SyntheticResolveExtension"
25+
area="IDEA_PROJECT" dynamic="true"/>
26+
<extensionPoint qualifiedName="org.jetbrains.kotlin.assignResolutionAltererExtension"
27+
interface="org.jetbrains.kotlin.resolve.extensions.AssignResolutionAltererExtension"
28+
area="IDEA_PROJECT" dynamic="true"/>
29+
<extensionPoint qualifiedName="org.jetbrains.kotlin.jsSyntheticTranslateExtension"
30+
interface="org.jetbrains.kotlin.js.translate.extensions.JsSyntheticTranslateExtension"
31+
area="IDEA_PROJECT" dynamic="true"/>
32+
<extensionPoint qualifiedName="org.jetbrains.kotlin.irGenerationExtension"
33+
interface="org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension"
34+
area="IDEA_PROJECT" dynamic="true"/>
35+
<extensionPoint qualifiedName="org.jetbrains.kotlin.simpleNameReferenceExtension"
36+
interface="org.jetbrains.kotlin.plugin.references.SimpleNameReferenceExtension"
37+
area="IDEA_PROJECT" dynamic="true"/>
38+
<extensionPoint qualifiedName="org.jetbrains.kotlin.classBuilderFactoryInterceptorExtension"
39+
interface="org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension"
40+
area="IDEA_PROJECT" dynamic="true"/>
41+
<extensionPoint qualifiedName="org.jetbrains.kotlin.classGeneratorExtension"
42+
interface="org.jetbrains.kotlin.backend.jvm.extensions.ClassGeneratorExtension"
43+
area="IDEA_PROJECT" dynamic="true"/>
44+
<extensionPoint qualifiedName="org.jetbrains.kotlin.packageFragmentProviderExtension"
45+
interface="org.jetbrains.kotlin.resolve.jvm.extensions.PackageFragmentProviderExtension"
46+
area="IDEA_PROJECT" dynamic="true"/>
47+
<extensionPoint qualifiedName="org.jetbrains.kotlin.storageComponentContainerContributor"
48+
interface="org.jetbrains.kotlin.extensions.StorageComponentContainerContributor"
49+
area="IDEA_PROJECT" dynamic="true"/>
50+
<extensionPoint qualifiedName="org.jetbrains.kotlin.extraImportsProviderExtension"
51+
interface="org.jetbrains.kotlin.resolve.extensions.ExtraImportsProviderExtension"
52+
area="IDEA_PROJECT" dynamic="true"/>
53+
<extensionPoint qualifiedName="org.jetbrains.kotlin.fir.extensions.firExtensionRegistrar"
54+
interface="org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter"
55+
area="IDEA_PROJECT"/>
56+
<extensionPoint qualifiedName="org.jetbrains.kotlin.DescriptorSerializerPlugin"
57+
interface="org.jetbrains.kotlin.serialization.DescriptorSerializerPlugin"
58+
area="IDEA_PROJECT"/>
59+
<extensionPoint qualifiedName="org.jetbrains.kotlin.defaultErrorMessages"
60+
interface="org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages.Extension"/>
61+
</extensionPoints>
62+
</idea-plugin>
Binary file not shown.
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/*
2+
* Copyright 2020 Google LLC
3+
* Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors.
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package com.google.devtools.ksp.processor
19+
20+
import com.google.devtools.ksp.impl.ResolverAAImpl
21+
import com.google.devtools.ksp.processing.Resolver
22+
import com.google.devtools.ksp.symbol.*
23+
24+
class RecordJavaAsMemberOfProcessor : AbstractTestProcessor() {
25+
val results = mutableListOf<String>()
26+
27+
override fun toResult(): List<String> {
28+
val finalResult = mutableListOf(results[0])
29+
finalResult.addAll(results.subList(1, results.size).sorted())
30+
return finalResult
31+
}
32+
33+
override fun process(resolver: Resolver): List<KSAnnotated> {
34+
var function: KSFunctionDeclaration? = null
35+
var type: KSType? = null
36+
resolver.getAllFiles().forEach {
37+
if (it.fileName == "C.kt") {
38+
type = (
39+
it.declarations.single {
40+
it is KSPropertyDeclaration && it.simpleName.asString() == "a"
41+
} as KSPropertyDeclaration
42+
).type.resolve()
43+
} else if (it.fileName == "B.java") {
44+
function = (
45+
it.declarations.single {
46+
it is KSClassDeclaration && it.simpleName.asString() == "B"
47+
} as KSClassDeclaration
48+
).declarations.single {
49+
it is KSFunctionDeclaration && it.simpleName.asString() == "f"
50+
} as KSFunctionDeclaration
51+
}
52+
}
53+
54+
function!!.asMemberOf(type!!)
55+
56+
val m = when (resolver) {
57+
is ResolverAAImpl -> resolver.incrementalContext.dumpLookupRecords().toSortedMap()
58+
else -> throw IllegalStateException("Unknown Resolver: $resolver")
59+
}
60+
m.forEach { symbol, files ->
61+
files.filter { it.endsWith(".java") }.sorted().forEach {
62+
val fn = it.substringAfterLast("java-sources/")
63+
results.add("$symbol: $fn")
64+
}
65+
}
66+
return emptyList()
67+
}
68+
}

0 commit comments

Comments
 (0)