Skip to content

Commit 61340fe

Browse files
committed
Updates rules_kotlin to support Kotlin v2.2.20
1 parent cdd8099 commit 61340fe

File tree

17 files changed

+206
-46
lines changed

17 files changed

+206
-46
lines changed

kotlin/internal/toolchains.bzl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ _kt_toolchain = rule(
134134
),
135135
"language_version": attr.string(
136136
doc = "this is the -language_version flag [see](https://kotlinlang.org/docs/reference/compatibility.html)",
137-
default = "2.1",
137+
default = "2.2",
138138
values = [
139139
"1.1",
140140
"1.2",
@@ -147,11 +147,12 @@ _kt_toolchain = rule(
147147
"1.9",
148148
"2.0",
149149
"2.1",
150+
"2.2",
150151
],
151152
),
152153
"api_version": attr.string(
153154
doc = "this is the -api_version flag [see](https://kotlinlang.org/docs/reference/compatibility.html).",
154-
default = "2.1",
155+
default = "2.2",
155156
values = [
156157
"1.1",
157158
"1.2",
@@ -164,6 +165,7 @@ _kt_toolchain = rule(
164165
"1.9",
165166
"2.0",
166167
"2.1",
168+
"2.2",
167169
],
168170
),
169171
"debug": attr.string_list(

src/main/kotlin/bootstrap.bzl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ def kt_bootstrap_library(name, deps = [], neverlink_deps = [], srcs = [], visibi
3737
**kwargs
3838
)
3939

40+
# Filter out kotlinc_opts from kwargs for ktlint rules (they don't support it)
41+
ktlint_kwargs = {k: v for k, v in kwargs.items() if k != "kotlinc_opts"}
42+
4043
_ktlint_test(
4144
name = "%s_ktlint_test" % name,
4245
srcs = srcs,
@@ -51,7 +54,7 @@ def kt_bootstrap_library(name, deps = [], neverlink_deps = [], srcs = [], visibi
5154
visibility = ["//visibility:private"],
5255
config = "//:ktlint_editorconfig",
5356
tags = ["no-ide", "ktlint"],
54-
**kwargs
57+
**ktlint_kwargs
5558
)
5659

5760
def kt_bootstrap_binary(

src/main/kotlin/io/bazel/kotlin/generate/BUILD.bazel

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ kt_jvm_import(
1212
"//kotlin/compiler:kotlin-stdlib-jdk7",
1313
"//kotlin/compiler:kotlin-stdlib-jdk8",
1414
"//kotlin/compiler:kotlinx-coroutines-core-jvm",
15-
"//kotlin/compiler:trove4j",
1615
],
1716
)
1817

src/main/kotlin/io/bazel/kotlin/plugin/jdeps/BUILD.bazel

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ kt_bootstrap_library(
2525
"k2/checker/declaration/*.kt",
2626
"k2/checker/expression/*.kt",
2727
]),
28+
kotlinc_opts = {
29+
"-Xcontext-receivers": "",
30+
},
2831
visibility = ["//src:__subpackages__"],
2932
deps = [
3033
"//kotlin/compiler:kotlin-compiler",

src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/checker/declaration/BasicDeclarationChecker.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,13 @@ import org.jetbrains.kotlin.fir.declarations.toAnnotationClassLikeSymbol
1111
internal class BasicDeclarationChecker(
1212
private val classUsageRecorder: ClassUsageRecorder,
1313
) : FirBasicDeclarationChecker(MppCheckerKind.Common) {
14+
context(CheckerContext, DiagnosticReporter)
1415
override fun check(
1516
declaration: FirDeclaration,
16-
context: CheckerContext,
17-
reporter: DiagnosticReporter,
1817
) {
1918
declaration.annotations.forEach { annotation ->
20-
annotation.toAnnotationClassLikeSymbol(context.session)?.let {
21-
classUsageRecorder.recordClass(it, context)
19+
annotation.toAnnotationClassLikeSymbol(this@CheckerContext.session)?.let {
20+
classUsageRecorder.recordClass(it, this@CheckerContext)
2221
}
2322
}
2423
}

src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/checker/declaration/CallableChecker.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,25 +16,24 @@ internal class CallableChecker(
1616
* Tracks the return type & type parameters of a callable declaration. Function parameters are
1717
* tracked in [FunctionChecker].
1818
*/
19+
context(CheckerContext, DiagnosticReporter)
1920
override fun check(
2021
declaration: FirCallableDeclaration,
21-
context: CheckerContext,
22-
reporter: DiagnosticReporter,
2322
) {
2423
// return type
25-
declaration.returnTypeRef.let { classUsageRecorder.recordTypeRef(it, context) }
24+
declaration.returnTypeRef.let { classUsageRecorder.recordTypeRef(it, this@CheckerContext) }
2625

2726
// type params
2827
declaration.typeParameters.forEach { typeParam ->
2928
typeParam.symbol.resolvedBounds.forEach { typeParamBound ->
30-
typeParamBound.let { classUsageRecorder.recordTypeRef(it, context) }
29+
typeParamBound.let { classUsageRecorder.recordTypeRef(it, this@CheckerContext) }
3130
}
3231
}
3332

3433
// receiver param for extensions
3534
if (declaration !is FirAnonymousFunction) {
3635
declaration.receiverParameter?.typeRef?.let {
37-
classUsageRecorder.recordTypeRef(it, context, isExplicit = declaration.isExtension)
36+
classUsageRecorder.recordTypeRef(it, this@CheckerContext, isExplicit = declaration.isExtension)
3837
}
3938
}
4039
}

src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/checker/declaration/ClassLikeChecker.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,14 @@ import org.jetbrains.kotlin.fir.resolve.getSuperTypes
1111
internal class ClassLikeChecker(
1212
private val classUsageRecorder: ClassUsageRecorder,
1313
) : FirClassLikeChecker(MppCheckerKind.Common) {
14+
context(CheckerContext, DiagnosticReporter)
1415
override fun check(
1516
declaration: FirClassLikeDeclaration,
16-
context: CheckerContext,
17-
reporter: DiagnosticReporter,
1817
) {
19-
declaration.symbol.let { classUsageRecorder.recordClass(it, context) }
18+
declaration.symbol.let { classUsageRecorder.recordClass(it, this@CheckerContext) }
2019
// [recordClass] also handles supertypes, but this marks direct supertypes as explicit
21-
declaration.symbol.getSuperTypes(context.session, recursive = false).forEach {
22-
classUsageRecorder.recordConeType(it, context)
20+
declaration.symbol.getSuperTypes(this@CheckerContext.session, recursive = false).forEach {
21+
classUsageRecorder.recordConeType(it, this@CheckerContext)
2322
}
2423
}
2524
}

src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/checker/declaration/FileChecker.kt

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,25 @@ import org.jetbrains.kotlin.name.ClassId
2222
internal class FileChecker(
2323
private val classUsageRecorder: ClassUsageRecorder,
2424
) : FirFileChecker(MppCheckerKind.Common) {
25+
context(CheckerContext, DiagnosticReporter)
2526
override fun check(
2627
declaration: FirFile,
27-
context: CheckerContext,
28-
reporter: DiagnosticReporter,
2928
) {
3029
declaration.imports.filterIsInstance<FirResolvedImport>().forEach { import ->
3130
// check for classlike import (class, interface, object, enum, annotation, etc)
32-
if (import.resolvesToClass(context)) {
33-
import.classId()?.resolveToClass(context)?.let {
34-
classUsageRecorder.recordClass(it, context)
31+
if (import.resolvesToClass(this@CheckerContext)) {
32+
import.classId()?.resolveToClass(this@CheckerContext)?.let {
33+
classUsageRecorder.recordClass(it, this@CheckerContext)
3534
}
3635
} else {
3736
// check for function import
38-
val callableBinaryClass = import.resolveToFun(context)?.containerSource?.binaryClass()
37+
val callableBinaryClass = import.resolveToFun(this@CheckerContext)?.containerSource?.binaryClass()
3938
if (callableBinaryClass != null) {
4039
classUsageRecorder.recordClass(callableBinaryClass)
4140
} else {
4241
// for other symbols, track the parent class
43-
import.resolvedParentClassId?.resolveToClass(context)?.let {
44-
classUsageRecorder.recordClass(it, context)
42+
import.resolvedParentClassId?.resolveToClass(this@CheckerContext)?.let {
43+
classUsageRecorder.recordClass(it, this@CheckerContext)
4544
}
4645
}
4746
}

src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/checker/declaration/FunctionChecker.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,13 @@ internal class FunctionChecker(
1414
* Tracks the value parameters of a function declaration. Return type & type parameters are
1515
* tracked in [CallableChecker].
1616
*/
17+
context(CheckerContext, DiagnosticReporter)
1718
override fun check(
1819
declaration: FirFunction,
19-
context: CheckerContext,
20-
reporter: DiagnosticReporter,
2120
) {
2221
// function parameters
2322
declaration.valueParameters.forEach { valueParam ->
24-
valueParam.returnTypeRef.let { classUsageRecorder.recordTypeRef(it, context) }
23+
valueParam.returnTypeRef.let { classUsageRecorder.recordTypeRef(it, this@CheckerContext) }
2524
}
2625
}
2726
}

src/main/kotlin/io/bazel/kotlin/plugin/jdeps/k2/checker/expression/QualifiedAccessChecker.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,9 @@ import org.jetbrains.kotlin.KtSourceElement
2121
internal class QualifiedAccessChecker(
2222
private val classUsageRecorder: ClassUsageRecorder,
2323
) : FirQualifiedAccessExpressionChecker(MppCheckerKind.Common) {
24+
context(CheckerContext, DiagnosticReporter)
2425
override fun check(
2526
expression: FirQualifiedAccessExpression,
26-
context: CheckerContext,
27-
reporter: DiagnosticReporter,
2827
) {
2928
// track function's owning class
3029
val resolvedCallableSymbol = expression.toResolvedCallableSymbol()
@@ -37,15 +36,15 @@ internal class QualifiedAccessChecker(
3736
resolvedCallableSymbol?.resolvedReturnTypeRef?.let {
3837
classUsageRecorder.recordTypeRef(
3938
it,
40-
context,
39+
this@CheckerContext,
4140
isExplicit = isExplicitReturnType,
4241
collectTypeArguments = false,
4342
)
4443
}
4544

4645
// type arguments
4746
resolvedCallableSymbol?.typeParameterSymbols?.forEach { typeParam ->
48-
typeParam.resolvedBounds.forEach { classUsageRecorder.recordTypeRef(it, context) }
47+
typeParam.resolvedBounds.forEach { classUsageRecorder.recordTypeRef(it, this@CheckerContext) }
4948
}
5049

5150
// track fun parameter types based on referenced function
@@ -54,18 +53,18 @@ internal class QualifiedAccessChecker(
5453
?.valueParameterSymbols
5554
?.forEach { valueParam ->
5655
valueParam.resolvedReturnTypeRef.let {
57-
classUsageRecorder.recordTypeRef(it, context, isExplicit = false)
56+
classUsageRecorder.recordTypeRef(it, this@CheckerContext, isExplicit = false)
5857
}
5958
}
6059
// track fun arguments actually passed
6160
(expression as? FirFunctionCall)?.arguments?.map { it.resolvedType }?.forEach {
62-
classUsageRecorder.recordConeType(it, context, isExplicit = !it.isExtensionFunctionType)
61+
classUsageRecorder.recordConeType(it, this@CheckerContext, isExplicit = !it.isExtensionFunctionType)
6362
}
6463

6564
// track dispatch receiver
6665
expression.dispatchReceiver?.resolvedType?.let {
6766
if (!it.isUnit) {
68-
classUsageRecorder.recordConeType(it, context, isExplicit = false)
67+
classUsageRecorder.recordConeType(it, this@CheckerContext, isExplicit = false)
6968
}
7069
}
7170

0 commit comments

Comments
 (0)