Switch enableJvmDefault to jvmDefaultMode
This commit is contained in:
+20
-3
@@ -5,6 +5,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.*
|
||||
|
||||
@@ -222,8 +223,19 @@ class K2JVMCompilerArguments : CommonCompilerArguments() {
|
||||
)
|
||||
var noExceptionOnExplicitEqualsForBoxedNull by FreezableVar(false)
|
||||
|
||||
@Argument(value = "-Xenable-jvm-default", description = "Allow to use '@JvmDefault' for JVM default method support")
|
||||
var enableJvmDefault: Boolean by FreezableVar(false)
|
||||
@Argument(
|
||||
value = "-Xoutput-imports",
|
||||
valueDescription = "<path>",
|
||||
description = "Output imports from all compiled files to the specified file in JSON format"
|
||||
)
|
||||
var outputImports: String? by FreezableVar(null)
|
||||
|
||||
@Argument(
|
||||
value = "-Xjvm-default-mode",
|
||||
valueDescription = "{disable|enable|compatibility}",
|
||||
description = "Allow to use '@JvmDefault' for JVM default method support"
|
||||
)
|
||||
var jvmDefaultMode: String by FreezableVar(JvmDefaultMode.DEFAULT.description)
|
||||
|
||||
@Argument(value = "-Xdisable-default-scripting-plugin", description = "Do not enable scripting plugin by default")
|
||||
var disableDefaultScriptingPlugin: Boolean by FreezableVar(false)
|
||||
@@ -240,8 +252,13 @@ class K2JVMCompilerArguments : CommonCompilerArguments() {
|
||||
jsr305,
|
||||
supportCompatqualCheckerFrameworkAnnotations
|
||||
)
|
||||
result[AnalysisFlag.enableJvmDefault] = enableJvmDefault
|
||||
result[AnalysisFlag.ignoreDataFlowInAssert] = JVMAssertionsMode.fromString(assertionsMode) != JVMAssertionsMode.LEGACY
|
||||
JvmDefaultMode.fromStringOrNull(jvmDefaultMode)?.let { result[AnalysisFlag.jvmDefaultMode] = it }
|
||||
?: collector.report(
|
||||
CompilerMessageSeverity.ERROR,
|
||||
"Unknown @JvmDefault mode: $jvmDefaultMode, " +
|
||||
"supported modes: ${JvmDefaultMode.values().map { it.description }}"
|
||||
)
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
|
||||
class JvmDefaultChecker(val jvmTarget: JvmTarget) : DeclarationChecker {
|
||||
|
||||
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
||||
val enableJvmDefault = context.languageVersionSettings.getFlag(AnalysisFlag.enableJvmDefault)
|
||||
val jvmDefaultMode = context.languageVersionSettings.getFlag(AnalysisFlag.jvmDefaultMode)
|
||||
|
||||
descriptor.annotations.findAnnotation(JVM_DEFAULT_FQ_NAME)?.let { annotationDescriptor ->
|
||||
val reportOn = DescriptorToSourceUtils.getSourceFromAnnotation(annotationDescriptor) ?: declaration
|
||||
@@ -31,7 +31,7 @@ class JvmDefaultChecker(val jvmTarget: JvmTarget) : DeclarationChecker {
|
||||
context.trace.report(ErrorsJvm.JVM_DEFAULT_NOT_IN_INTERFACE.on(reportOn))
|
||||
} else if (jvmTarget == JvmTarget.JVM_1_6) {
|
||||
context.trace.report(ErrorsJvm.JVM_DEFAULT_IN_JVM6_TARGET.on(reportOn))
|
||||
} else if (!enableJvmDefault) {
|
||||
} else if (!jvmDefaultMode.isEnabled) {
|
||||
context.trace.report(ErrorsJvm.JVM_DEFAULT_IN_DECLARATION.on(declaration))
|
||||
}
|
||||
return@check
|
||||
@@ -42,7 +42,7 @@ class JvmDefaultChecker(val jvmTarget: JvmTarget) : DeclarationChecker {
|
||||
descriptor.unsubstitutedMemberScope.getContributedDescriptors().filterIsInstance<CallableMemberDescriptor>().any {
|
||||
it.kind.isReal && it.hasJvmDefaultAnnotation()
|
||||
}
|
||||
if (!hasDeclaredJvmDefaults && !checkJvmDefaultsInHierarchy(descriptor, enableJvmDefault)) {
|
||||
if (!hasDeclaredJvmDefaults && !checkJvmDefaultsInHierarchy(descriptor, jvmDefaultMode.isEnabled)) {
|
||||
context.trace.report(ErrorsJvm.JVM_DEFAULT_THROUGH_INHERITANCE.on(declaration))
|
||||
}
|
||||
}
|
||||
@@ -54,7 +54,7 @@ class JvmDefaultChecker(val jvmTarget: JvmTarget) : DeclarationChecker {
|
||||
|
||||
if (memberDescriptor.overriddenDescriptors.any { it.annotations.hasAnnotation(JVM_DEFAULT_FQ_NAME) }) {
|
||||
context.trace.report(ErrorsJvm.JVM_DEFAULT_REQUIRED_FOR_OVERRIDE.on(declaration))
|
||||
} else if (enableJvmDefault) {
|
||||
} else if (jvmDefaultMode.isEnabled) {
|
||||
descriptor.overriddenDescriptors.flatMap { OverridingUtil.getOverriddenDeclarations(it) }.toSet().let {
|
||||
for (realDescriptor in OverridingUtil.filterOutOverridden(it)) {
|
||||
if (realDescriptor is JavaMethodDescriptor && realDescriptor.modality != Modality.ABSTRACT) {
|
||||
|
||||
+3
-3
@@ -137,9 +137,9 @@ public class DefaultErrorMessagesJvm implements DefaultErrorMessages.Extension {
|
||||
MAP.put(JVM_DEFAULT_NOT_IN_INTERFACE,"'@JvmDefault' is only supported on interface members");
|
||||
MAP.put(JVM_DEFAULT_IN_JVM6_TARGET,"'@JvmDefault' is only supported since JVM target 1.8. Recompile with '-jvm-target 1.8'");
|
||||
MAP.put(JVM_DEFAULT_REQUIRED_FOR_OVERRIDE, "'@JvmDefault' is required for an override of a '@JvmDefault' member");
|
||||
MAP.put(JVM_DEFAULT_IN_DECLARATION, "Usage of '@JvmDefault' is only allowed if the flag -Xenable-jvm-default is enabled");
|
||||
MAP.put(JVM_DEFAULT_THROUGH_INHERITANCE, "Inheritance from an interface with '@JvmDefault' members is only allowed if the flag -Xenable-jvm-default is enabled");
|
||||
MAP.put(USAGE_OF_JVM_DEFAULT_THROUGH_SUPER_CALL, "Super calls of '@JvmDefault' members are only allowed if the flag -Xenable-jvm-default is enabled");
|
||||
MAP.put(JVM_DEFAULT_IN_DECLARATION, "Usage of '@JvmDefault' is only allowed with -Xjvm-default-mode option");
|
||||
MAP.put(JVM_DEFAULT_THROUGH_INHERITANCE, "Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default-mode option");
|
||||
MAP.put(USAGE_OF_JVM_DEFAULT_THROUGH_SUPER_CALL, "Super calls of '@JvmDefault' members are only allowed with -Xjvm-default-mode option");
|
||||
MAP.put(NON_JVM_DEFAULT_OVERRIDES_JAVA_DEFAULT, "Non-@JvmDefault interface method cannot override default Java method. Please annotate this method with @JvmDefault");
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -19,8 +19,8 @@ import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
|
||||
class JvmDefaultSuperCallChecker : CallChecker {
|
||||
|
||||
override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
|
||||
val enableJvmDefault = context.languageVersionSettings.getFlag(AnalysisFlag.enableJvmDefault)
|
||||
if (enableJvmDefault) return
|
||||
val jvmDefaultMode = context.languageVersionSettings.getFlag(AnalysisFlag.jvmDefaultMode)
|
||||
if (jvmDefaultMode.isEnabled) return
|
||||
val superExpression = getSuperCallExpression(resolvedCall.call) ?: return
|
||||
val resultingDescriptor = resolvedCall.resultingDescriptor as? CallableMemberDescriptor ?: return
|
||||
if (!resultingDescriptor.hasJvmDefaultAnnotation()) return
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FULL_JDK
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FULL_JDK
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FULL_JDK
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
interface Z {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_REFLECT
|
||||
// FULL_JDK
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// IGNORE_BACKEND: JS
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
compiler/testData/codegen/java8/box/jvm8/defaults/noDelegation/noDelegationToDefaultMethodInClass.kt
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FULL_JDK
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FULL_JDK
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FULL_JDK
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_REFLECT
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FULL_JDK
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FILE: 1.kt
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FILE: 1.kt
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FILE: 1.kt
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
// FILE: 1.kt
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// FILE: 1.kt
|
||||
interface Test {
|
||||
fun test(): String {
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// FILE: 1.kt
|
||||
interface Test {
|
||||
fun test(): String {
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// FILE: 1.kt
|
||||
interface Test {
|
||||
fun test(): String {
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// FILE: 1.kt
|
||||
interface Test {
|
||||
fun test(): String {
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// FILE: 1.kt
|
||||
|
||||
interface Test {
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// FILE: 1.kt
|
||||
|
||||
interface Test {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// JVM_TARGET: 1.8
|
||||
// WITH_RUNTIME
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !JVM_TARGET: 1.8
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
interface A<T> {
|
||||
@JvmDefault
|
||||
fun test(p: T) {
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// !JVM_TARGET: 1.8
|
||||
|
||||
// FILE: JavaInterface.java
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// !JVM_TARGET: 1.8
|
||||
|
||||
public interface KInterface {
|
||||
|
||||
Vendored
+1
-1
@@ -1,5 +1,5 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
// !JVM_TARGET: 1.8
|
||||
// FILE: JavaInterface.java
|
||||
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !JVM_TARGET: 1.8
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
interface B {
|
||||
|
||||
@JvmDefault
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !JVM_TARGET: 1.8
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
interface A {
|
||||
@JvmDefault
|
||||
fun test() {}
|
||||
|
||||
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !JVM_TARGET: 1.8
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
interface A {
|
||||
@JvmDefault
|
||||
val test: String
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
// !API_VERSION: 1.3
|
||||
// !JVM_TARGET: 1.8
|
||||
// !ENABLE_JVM_DEFAULT
|
||||
// !JVM_DEFAULT_MODE: enable
|
||||
interface B {
|
||||
|
||||
@JvmDefault
|
||||
|
||||
+2
-2
@@ -18,7 +18,7 @@ const val API_VERSION_DIRECTIVE = "API_VERSION"
|
||||
const val EXPERIMENTAL_DIRECTIVE = "EXPERIMENTAL"
|
||||
const val USE_EXPERIMENTAL_DIRECTIVE = "USE_EXPERIMENTAL"
|
||||
const val IGNORE_DATA_FLOW_IN_ASSERT_DIRECTIVE = "IGNORE_DATA_FLOW_IN_ASSERT"
|
||||
const val ENABLE_JVM_DEFAULT = "ENABLE_JVM_DEFAULT"
|
||||
const val JVM_DEFAULT_MODE = "JVM_DEFAULT_MODE"
|
||||
|
||||
data class CompilerTestLanguageVersionSettings(
|
||||
private val initialLanguageFeatures: Map<LanguageFeature, LanguageFeature.State>,
|
||||
@@ -51,7 +51,7 @@ fun parseLanguageVersionSettings(directiveMap: Map<String, String>): LanguageVer
|
||||
val experimental = directiveMap[EXPERIMENTAL_DIRECTIVE]?.split(' ')?.let { AnalysisFlag.experimental to it }
|
||||
val useExperimental = directiveMap[USE_EXPERIMENTAL_DIRECTIVE]?.split(' ')?.let { AnalysisFlag.useExperimental to it }
|
||||
val ignoreDataFlowInAssert = AnalysisFlag.ignoreDataFlowInAssert to directiveMap.containsKey(IGNORE_DATA_FLOW_IN_ASSERT_DIRECTIVE)
|
||||
val enableJvmDefault = AnalysisFlag.enableJvmDefault to directiveMap.containsKey(ENABLE_JVM_DEFAULT)
|
||||
val enableJvmDefault = directiveMap[JVM_DEFAULT_MODE]?.let { AnalysisFlag.jvmDefaultMode to JvmDefaultMode.fromStringOrNull(it)!! }
|
||||
|
||||
if (apiVersionString == null && languageFeaturesString == null && experimental == null && useExperimental == null && !ignoreDataFlowInAssert.second) return null
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ class VersionRequirementTest : TestCaseWithTmpdir() {
|
||||
languageVersionSettings = LanguageVersionSettingsImpl(
|
||||
LanguageVersionSettingsImpl.DEFAULT.languageVersion,
|
||||
LanguageVersionSettingsImpl.DEFAULT.apiVersion,
|
||||
mapOf(AnalysisFlag.enableJvmDefault to true),
|
||||
mapOf(AnalysisFlag.jvmDefaultMode to JvmDefaultMode.ENABLE),
|
||||
emptyMap()
|
||||
)
|
||||
},
|
||||
|
||||
@@ -32,6 +32,10 @@ class AnalysisFlag<out T> internal constructor(
|
||||
operator fun provideDelegate(instance: Any?, property: KProperty<*>) = Flag(property.name, Jsr305State.DEFAULT)
|
||||
}
|
||||
|
||||
object JvmDefaultModeDisabledByDefaul {
|
||||
operator fun provideDelegate(instance: Any?, property: KProperty<*>) = Flag(property.name, org.jetbrains.kotlin.config.JvmDefaultMode.DISABLE)
|
||||
}
|
||||
|
||||
object ListOfStrings {
|
||||
operator fun provideDelegate(instance: Any?, property: KProperty<*>) = Flag(property.name, emptyList<String>())
|
||||
}
|
||||
@@ -60,9 +64,9 @@ class AnalysisFlag<out T> internal constructor(
|
||||
val explicitApiVersion by Flag.Boolean
|
||||
|
||||
@JvmStatic
|
||||
val enableJvmDefault by Flag.Boolean
|
||||
val ignoreDataFlowInAssert by Flag.Boolean
|
||||
|
||||
@JvmStatic
|
||||
val ignoreDataFlowInAssert by Flag.Boolean
|
||||
val jvmDefaultMode by Flag.JvmDefaultModeDisabledByDefaul
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||
* that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
package org.jetbrains.kotlin.config
|
||||
|
||||
enum class JvmDefaultMode(val description: String) {
|
||||
DISABLE("disable"),
|
||||
ENABLE("enable"),
|
||||
ENABLE_WITH_DEFAULT_IMPLS("compatibility");
|
||||
|
||||
val isEnabled
|
||||
get() = this != DISABLE
|
||||
|
||||
companion object {
|
||||
@JvmField
|
||||
val DEFAULT = DISABLE
|
||||
|
||||
@JvmStatic
|
||||
fun fromStringOrNull(string: String?) = values().find { it.description == string }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user