diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/GradleOption.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/GradleOption.kt index 53e0dffdaa3..119b1dc662d 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/GradleOption.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/GradleOption.kt @@ -17,6 +17,10 @@ package org.jetbrains.kotlin.cli.common.arguments import kotlin.reflect.KClass +import kotlin.reflect.KVisibility @Retention(AnnotationRetention.RUNTIME) -annotation class GradleOption(val value: KClass = DefaultValues::class) +annotation class GradleOption( + val value: KClass = DefaultValues::class, + val backingFieldVisibility: KVisibility = KVisibility.PRIVATE +) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt index 4bb6c83365a..086bd202c6f 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.cli.common.arguments import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity import org.jetbrains.kotlin.cli.common.messages.MessageCollector import org.jetbrains.kotlin.config.* +import kotlin.reflect.KVisibility class K2JVMCompilerArguments : CommonCompilerArguments() { companion object { @@ -75,7 +76,10 @@ class K2JVMCompilerArguments : CommonCompilerArguments() { @Argument(value = "-module-name", valueDescription = "", description = "Name of the generated .kotlin_module file") var moduleName: String? by NullableStringFreezableVar(null) - @GradleOption(DefaultValues.JvmTargetVersions::class) + @GradleOption( + value = DefaultValues.JvmTargetVersions::class, + backingFieldVisibility = KVisibility.INTERNAL + ) @Argument( value = "-jvm-target", valueDescription = "", diff --git a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt index da4e68c0927..37a199b1f4e 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/arguments/GenerateGradleOptions.kt @@ -22,8 +22,10 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.utils.Printer import java.io.File import java.io.PrintStream +import java.util.* import kotlin.reflect.KAnnotatedElement import kotlin.reflect.KProperty1 +import kotlin.reflect.KVisibility import kotlin.reflect.full.declaredMemberProperties import kotlin.reflect.full.withNullability @@ -203,7 +205,8 @@ private fun Printer.generateImpl( generatePropertyDeclaration(property, modifiers = "override", value = "null") } else { val backingField = property.backingField() - println("private var $backingField: $propertyType? = null") + val visibilityModified = property.gradleBackingFieldVisibility.name.lowercase(Locale.US) + println("$visibilityModified var $backingField: $propertyType? = null") generatePropertyDeclaration(property, modifiers = "override") withIndent { println("get() = $backingField ?: ${property.gradleDefaultValue}") @@ -314,6 +317,15 @@ private val KProperty1<*, *>.gradleValues: DefaultValues private val KProperty1<*, *>.gradleDefaultValue: String get() = gradleValues.defaultValue +private val KProperty1<*, *>.gradleBackingFieldVisibility: KVisibility + get() { + val fieldVisibility = findAnnotation()!!.backingFieldVisibility + require(fieldVisibility != KVisibility.PUBLIC) { + "Backing field should not have public visibility!" + } + return fieldVisibility + } + private val KProperty1<*, *>.gradleReturnType: String get() { // Set nullability based on Gradle default value diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt index 58c8e9d9a56..575e10c5955 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinJvmOptionsBase.kt @@ -52,7 +52,7 @@ internal abstract class KotlinJvmOptionsBase : org.jetbrains.kotlin.gradle.dsl.K override var jdkHome: kotlin.String? = null - private var jvmTargetField: kotlin.String? = null + internal var jvmTargetField: kotlin.String? = null override var jvmTarget: kotlin.String get() = jvmTargetField ?: "1.8" set(value) {