Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
9551214
upgrade Kotlin to 2.1.20
barbulescu Apr 26, 2025
1f9ef66
remove generics from IrConst usage
barbulescu Apr 26, 2025
d6b3304
fix type.toRegularClassSymbol(firSession)
barbulescu Apr 26, 2025
19dc8ca
Merge remote-tracking branch 'origin/main'
barbulescu May 3, 2025
0dcb845
Merge remote-tracking branch 'origin/main'
barbulescu May 6, 2025
5f76403
Merge remote-tracking branch 'origin/main'
barbulescu May 7, 2025
410df13
Merge remote-tracking branch 'origin/main'
barbulescu May 7, 2025
0f2cdde
Merge remote-tracking branch 'origin/main'
barbulescu May 8, 2025
ddd2490
Merge remote-tracking branch 'origin/main'
barbulescu May 9, 2025
a9fef48
Merge remote-tracking branch 'origin/main'
barbulescu May 10, 2025
378374d
Replaced outdated Kotlin FIR API calls and updated type references to…
barbulescu May 10, 2025
5fdab96
Merge remote-tracking branch 'origin/main'
barbulescu May 12, 2025
b2895a0
Merge remote-tracking branch 'origin/main'
barbulescu May 13, 2025
f007f53
Merge remote-tracking branch 'origin/main'
barbulescu May 25, 2025
6e1c66b
Merge remote-tracking branch 'origin/main'
barbulescu May 31, 2025
e83131d
Merge remote-tracking branch 'origin/main'
barbulescu Jun 1, 2025
b0226fe
Updated KotlinParser to utilize the latest Kotlin FIR APIs, added sup…
barbulescu Jun 1, 2025
c01788d
Merge branch 'openrewrite:main' into main
barbulescu Jun 6, 2025
4ca96f0
Merge branch 'openrewrite:main' into main
barbulescu Jun 7, 2025
21048af
Refactor: Simplify module building in KotlinParser and enhance type s…
barbulescu Jun 7, 2025
655feb0
Merge remote-tracking branch 'origin/main'
barbulescu Jun 7, 2025
d7fa49a
Merge branch 'openrewrite:main' into main
barbulescu Jun 8, 2025
be8fe28
Merge branch 'openrewrite:main' into main
barbulescu Jun 16, 2025
29bdacb
Merge branch 'openrewrite:main' into main
barbulescu Jun 17, 2025
1147abf
fix ++ issues
barbulescu Jun 17, 2025
c007e8b
Merge branch 'openrewrite:main' into main
barbulescu Jun 22, 2025
15c3447
Merge branch 'openrewrite:main' into main
barbulescu Jun 28, 2025
5d5a291
upgrade to Kotlin 2.2.0
barbulescu Jun 29, 2025
49742a9
Merge branch 'openrewrite:main' into main
barbulescu Jul 6, 2025
761cbfe
fix compilation errors caused by addition of dimensionsBeforeName par…
barbulescu Jul 6, 2025
e914d12
Merge branch 'openrewrite:main' into main
barbulescu Jul 10, 2025
2cb3e73
Merge remote-tracking branch 'origin/main'
barbulescu Jul 10, 2025
b2bb66b
Merge branch 'openrewrite:main' into main
barbulescu Jul 12, 2025
a9c31c3
Merge remote-tracking branch 'origin/main'
barbulescu Jul 12, 2025
a2b878d
Merge branch 'openrewrite:main' into main
barbulescu Jul 14, 2025
d4d38d6
Merge branch 'openrewrite:main' into main
barbulescu Jul 19, 2025
800bf47
Merge remote-tracking branch 'origin/main'
barbulescu Jul 19, 2025
04a340b
Merge branch 'openrewrite:main' into main
barbulescu Jul 20, 2025
1480c8f
Merge remote-tracking branch 'origin/main'
barbulescu Jul 20, 2025
15585dd
Merge branch 'openrewrite:main' into main
barbulescu Jul 24, 2025
7c7c9c8
Merge remote-tracking branch 'origin/main'
barbulescu Jul 24, 2025
8b3c912
Merge branch 'openrewrite:main' into main
barbulescu Jul 26, 2025
889eab5
Merge remote-tracking branch 'origin/main'
barbulescu Jul 26, 2025
84f2de1
allow running SpacesTest.extensionProperty test alone
barbulescu Jul 26, 2025
f9a4826
fix compiling errors after latest update
barbulescu Jul 26, 2025
40856b3
revert test change
barbulescu Jul 26, 2025
20de00e
Merge branch 'main' into main
timtebeek Aug 4, 2025
a5a35f5
Merge branch 'openrewrite:main' into main
barbulescu Aug 9, 2025
3245818
update jvmTarget gradle configuration
barbulescu Aug 9, 2025
dbf162c
parameters and parathesis are now encapsulated in an object -> get pa…
barbulescu Aug 9, 2025
dc9c8b4
handle null getLeftParenthesis
barbulescu Aug 9, 2025
27dbc79
get parent to access whitespaces after
barbulescu Aug 9, 2025
235e439
fix missing spaces before the parameter list
barbulescu Aug 9, 2025
d2b3326
Merge branch 'openrewrite:main' into main
barbulescu Aug 12, 2025
c6a7bd7
Merge branch 'openrewrite:main' into main
barbulescu Aug 14, 2025
5fbcf3a
Merge branch 'openrewrite:main' into main
barbulescu Aug 15, 2025
eae4b50
Merge branch 'openrewrite:main' into main
barbulescu Aug 17, 2025
1438b88
Merge remote-tracking branch 'upstream/main'
barbulescu Aug 30, 2025
b3165a5
Merge branch 'openrewrite:main' into main
barbulescu Aug 31, 2025
9309fa3
Merge branch 'openrewrite:main' into main
barbulescu Sep 2, 2025
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: 8 additions & 5 deletions rewrite-kotlin/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
id("org.openrewrite.build.language-library")
kotlin("jvm") version "1.9.25"
kotlin("jvm") version "2.2.0"
}

val kotlinVersion = "1.9.25"
val kotlinVersion = "2.2.0"

dependencies {
compileOnly(project(":rewrite-core"))
Expand All @@ -17,6 +17,7 @@ dependencies {
implementation(kotlin("compiler-embeddable"))
implementation(kotlin("stdlib"))


testImplementation("org.junit-pioneer:junit-pioneer:latest.release")
testImplementation(project(":rewrite-test"))
testRuntimeOnly(project(":rewrite-java-21"))
Expand All @@ -28,6 +29,8 @@ dependencies {
testImplementation("com.google.testing.compile:compile-testing:0.+")
}

tasks.withType<KotlinCompile>().configureEach {
kotlinOptions.jvmTarget = if (name.contains("Test")) "21" else "1.8"
kotlin {
compilerOptions {
jvmTarget.set(if (name.contains("Test")) JvmTarget.JVM_21 else JvmTarget.JVM_1_8)
}
}
294 changes: 166 additions & 128 deletions rewrite-kotlin/src/main/java/org/openrewrite/kotlin/KotlinParser.java

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

import lombok.AllArgsConstructor;
import lombok.Data;
import org.jetbrains.kotlin.KtFakeSourceElement;
import org.jetbrains.kotlin.KtFakePsiSourceElement;
import org.jetbrains.kotlin.KtRealPsiSourceElement;
import org.jetbrains.kotlin.KtSourceElement;
import org.jetbrains.kotlin.com.intellij.openapi.util.TextRange;
Expand All @@ -29,7 +29,6 @@
import org.jetbrains.kotlin.fir.declarations.FirProperty;
import org.jetbrains.kotlin.fir.expressions.*;
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference;
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag;
import org.jetbrains.kotlin.fir.types.*;
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor;
import org.jetbrains.kotlin.ir.IrElement;
Expand Down Expand Up @@ -489,7 +488,7 @@ public static String printFirElement(FirElement firElement) {

if (source instanceof KtRealPsiSourceElement) {
sb.append("Real ");
} else if (source instanceof KtFakeSourceElement) {
} else if (source instanceof KtFakePsiSourceElement) {
sb.append("Fake ");
} else {
sb.append(source.getClass().getSimpleName());
Expand Down Expand Up @@ -548,7 +547,7 @@ private static String printConeKotlinType(ConeTypeProjection coneKotlinType) {
return ((FirProperty) firElement).getName().toString();
} else if (firElement instanceof FirResolvedTypeRef) {
FirResolvedTypeRef resolvedTypeRef = (FirResolvedTypeRef) firElement;
ConeKotlinType coneKotlinType = resolvedTypeRef.getType();
ConeKotlinType coneKotlinType = resolvedTypeRef.getConeType();
return printConeKotlinType(coneKotlinType);
} else if (firElement instanceof FirResolvedNamedReference) {
return ((FirResolvedNamedReference) firElement).getName().toString();
Expand Down Expand Up @@ -578,8 +577,8 @@ private static String printConeKotlinType(ConeTypeProjection coneKotlinType) {
}
return sb.toString();
}
} else if (firElement instanceof FirConstExpression) {
Object value = ((FirConstExpression<?>) firElement).getValue();
} else if (firElement instanceof FirLiteralExpression) {
Object value = ((FirLiteralExpression) firElement).getValue();
return value != null ? value.toString() : null;
// return ((FirConstExpression<?>) firElement).getKind().toString();
} else if (firElement instanceof FirWhenBranch) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@
*/
package org.openrewrite.kotlin

import org.jetbrains.kotlin.DeprecatedForRemovalCompilerApi
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyConstructor
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazySimpleFunction
import org.jetbrains.kotlin.ir.backend.js.utils.valueArguments
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrConstructorImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrFunctionImpl
Expand Down Expand Up @@ -95,7 +95,7 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
return type(baseType.type)
}

is IrConst<*> -> {
is IrConst -> {
return primitive(baseType)
}

Expand Down Expand Up @@ -352,6 +352,7 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
return methodDeclarationType(function, signature)
}

@OptIn(DeprecatedForRemovalCompilerApi::class)
private fun methodDeclarationType(function: IrFunction, signature: String): JavaType.Method {
val paramNames: MutableList<String>? =
if (function.valueParameters.isEmpty()) null else ArrayList(function.valueParameters.size)
Expand Down Expand Up @@ -424,8 +425,9 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
}
}

@OptIn(DeprecatedForRemovalCompilerApi::class)
fun methodInvocationType(type: IrCall, signature: String): JavaType.Method {
val paramNames: MutableList<String> = ArrayList(type.valueArguments.size)
val paramNames: MutableList<String> = ArrayList(type.valueArgumentsCount)

for (v in type.symbol.owner.valueParameters) {
paramNames.add(v.name.asString())
Expand All @@ -450,12 +452,13 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
}
val returnType = type(type.symbol.owner.returnType)
val paramTypes: MutableList<JavaType>? =
if (type.valueArguments.isNotEmpty() || type.extensionReceiver != null) ArrayList(type.valueArguments.size + (if (type.extensionReceiver != null) 1 else 0))
if (type.valueArgumentsCount > 0 || type.extensionReceiver != null) ArrayList(type.valueArgumentsCount + (if (type.extensionReceiver != null) 1 else 0))
else null
if (type.extensionReceiver != null) {
paramTypes!!.add(type(type.extensionReceiver!!.type))
}
for (param: IrExpression? in type.valueArguments) {
for (i in 0 until type.valueArgumentsCount) {
val param: IrExpression? = type.getValueArgument(i)
if (param != null) {
paramTypes!!.add(type(param.type))
}
Expand All @@ -468,8 +471,9 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
return method
}

@OptIn(DeprecatedForRemovalCompilerApi::class)
fun methodInvocationType(type: IrConstructorCall, signature: String): JavaType.Method {
val paramNames: MutableList<String> = ArrayList(type.valueArguments.size)
val paramNames: MutableList<String> = ArrayList(type.valueArgumentsCount)

for (v in type.symbol.owner.valueParameters) {
paramNames.add(v.name.asString())
Expand All @@ -494,12 +498,14 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
}
val returnType = declaringType
val paramTypes: MutableList<JavaType>? =
if (type.valueArguments.isNotEmpty() || type.extensionReceiver != null) ArrayList(type.valueArguments.size + (if (type.extensionReceiver != null) 1 else 0))
if (type.valueArgumentsCount > 0 || type.extensionReceiver != null) ArrayList(type.valueArgumentsCount + (if (type.extensionReceiver != null) 1 else 0))
else null
if (type.extensionReceiver != null) {
paramTypes!!.add(type(type.extensionReceiver!!.type))
}
for (param: IrExpression? in type.valueArguments) {
for (i in 0 until type.valueArgumentsCount) {
val param: IrExpression? = type.getValueArgument(i)

if (param != null) {
paramTypes!!.add(type(param.type))
}
Expand Down Expand Up @@ -536,7 +542,7 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin

fun primitive(type: Any?): JavaType.Primitive {
return when (type) {
is IrConst<*> -> {
is IrConst -> {
when (type.kind) {
IrConstKind.Int -> JavaType.Primitive.Int
IrConstKind.Boolean -> JavaType.Primitive.Boolean
Expand Down Expand Up @@ -720,10 +726,12 @@ class KotlinIrTypeMapping(private val typeCache: JavaTypeCache) : JavaTypeMappin
return true
}

@OptIn(DeprecatedForRemovalCompilerApi::class)
private fun isSourceRetention(annotation: IrConstructorCall): Boolean {
val sig = signatureBuilder.classSignature(annotation.type)
if (sig == "kotlin.annotation.Retention" || sig == "java.lang.annotation") {
for (args in annotation.valueArguments) {
for (i in 0.. annotation.valueArgumentsCount) {
val args = annotation.getValueArgument(i)
if (args is IrDeclarationReference && args.symbol.owner is IrDeclarationWithName) {
return (args.symbol.owner as IrDeclarationWithName).name.asString() == "SOURCE"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
*/
package org.openrewrite.kotlin

import org.jetbrains.kotlin.DeprecatedForRemovalCompilerApi
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyClass
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazyConstructor
import org.jetbrains.kotlin.fir.lazy.Fir2IrLazySimpleFunction
import org.jetbrains.kotlin.ir.backend.js.utils.valueArguments
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol
Expand Down Expand Up @@ -63,7 +63,7 @@ class KotlinTypeIrSignatureBuilder : JavaTypeSignatureBuilder {
return signature(baseType.type)
}

is IrConst<*> -> {
is IrConst -> {
return primitiveSignature(baseType)
}

Expand Down Expand Up @@ -265,7 +265,7 @@ class KotlinTypeIrSignatureBuilder : JavaTypeSignatureBuilder {

override fun primitiveSignature(type: Any): String {
return when (type) {
is IrConst<*> -> type.type.classFqName!!.asString()
is IrConst -> type.type.classFqName!!.asString()
else -> {
throw UnsupportedOperationException("Unsupported primitive type" + type.javaClass)
}
Expand Down Expand Up @@ -329,6 +329,7 @@ class KotlinTypeIrSignatureBuilder : JavaTypeSignatureBuilder {
return signature.toString()
}

@OptIn(DeprecatedForRemovalCompilerApi::class)
private fun methodArgumentSignature(function: IrFunction): String {
val genericArgumentTypes = StringJoiner(",", "[", "]")
if (function.extensionReceiverParameter != null) {
Expand Down Expand Up @@ -361,12 +362,14 @@ class KotlinTypeIrSignatureBuilder : JavaTypeSignatureBuilder {
return signature.toString()
}

@OptIn(DeprecatedForRemovalCompilerApi::class)
private fun methodArgumentSignature(function: IrFunctionAccessExpression): String {
val genericArgumentTypes = StringJoiner(",", "[", "]")
if (function.extensionReceiver != null) {
genericArgumentTypes.add(signature(function.extensionReceiver!!.type))
}
for (param: IrExpression? in function.valueArguments) {
for(i in 0..<function.valueArgumentsCount) {
val param = function.getValueArgument(i)
if (param != null) {
genericArgumentTypes.add(signature(param.type))
}
Expand Down
Loading
Loading