Prohibit synchronized methods on interface members

#KT-9310 Fixed
This commit is contained in:
Alexander Udalov
2019-08-13 10:05:11 +02:00
parent 815ff3c860
commit 312205f376
11 changed files with 88 additions and 16 deletions
@@ -1,13 +1,17 @@
import kotlin.jvm.Synchronized
interface My {
<!SYNCHRONIZED_ON_ABSTRACT!>@Synchronized<!> fun foo()
<!SYNCHRONIZED_IN_INTERFACE!>@Synchronized<!> fun foo()
@Synchronized fun bar() = 1
<!SYNCHRONIZED_IN_INTERFACE!>@Synchronized<!> fun bar() = 1
@Synchronized fun baz(): String {
<!SYNCHRONIZED_IN_INTERFACE!>@Synchronized<!> fun baz(): String {
return "abc"
}
var v: String
<!SYNCHRONIZED_IN_INTERFACE!>@Synchronized<!> get() = ""
<!SYNCHRONIZED_IN_INTERFACE!>@Synchronized<!> set(<!UNUSED_PARAMETER!>value<!>) {}
}
abstract class Your {
@@ -18,6 +22,10 @@ abstract class Your {
@Synchronized open fun baz(): String {
return "xyz"
}
var v: String
@Synchronized get() = ""
@Synchronized set(<!UNUSED_PARAMETER!>value<!>) {}
}
@Synchronized fun gav() = 1
@@ -3,6 +3,7 @@ package
@kotlin.jvm.Synchronized public fun gav(): kotlin.Int
public interface My {
@get:kotlin.jvm.Synchronized @set:kotlin.jvm.Synchronized public open var v: kotlin.String
@kotlin.jvm.Synchronized public open fun bar(): kotlin.Int
@kotlin.jvm.Synchronized public open fun baz(): kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@@ -13,6 +14,7 @@ public interface My {
public abstract class Your {
public constructor Your()
@get:kotlin.jvm.Synchronized @set:kotlin.jvm.Synchronized public final var v: kotlin.String
@kotlin.jvm.Synchronized public final fun bar(): kotlin.Int
@kotlin.jvm.Synchronized public open fun baz(): kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
@@ -0,0 +1,23 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
// !LANGUAGE: +JvmStaticInInterface
// !JVM_TARGET: 1.8
interface I {
companion object {
@Synchronized fun syncFun() {}
<!SYNCHRONIZED_IN_INTERFACE!>@Synchronized<!> @JvmStatic fun syncFunJvmStatic() {}
var syncProp: String
@Synchronized get() = ""
@Synchronized set(value) {}
@JvmStatic var syncPropJvmStatic: String
<!SYNCHRONIZED_IN_INTERFACE!>@Synchronized<!> get() = ""
<!SYNCHRONIZED_IN_INTERFACE!>@Synchronized<!> set(value) {}
var syncPropJvmStaticAccessors: String
<!SYNCHRONIZED_IN_INTERFACE!>@Synchronized<!> @JvmStatic get() = ""
<!SYNCHRONIZED_IN_INTERFACE!>@Synchronized<!> @JvmStatic set(value) {}
}
}
@@ -0,0 +1,19 @@
package
public interface I {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
public companion object Companion {
private constructor Companion()
@get:kotlin.jvm.Synchronized @set:kotlin.jvm.Synchronized public final var syncProp: kotlin.String
@kotlin.jvm.JvmStatic @get:kotlin.jvm.Synchronized @set:kotlin.jvm.Synchronized public final var syncPropJvmStatic: kotlin.String
@get:kotlin.jvm.Synchronized @get:kotlin.jvm.JvmStatic @set:kotlin.jvm.Synchronized @set:kotlin.jvm.JvmStatic public final var syncPropJvmStaticAccessors: kotlin.String
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
@kotlin.jvm.Synchronized public final fun syncFun(): kotlin.Unit
@kotlin.jvm.Synchronized @kotlin.jvm.JvmStatic public final fun syncFunJvmStatic(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
@@ -5,7 +5,7 @@ interface Test {
<!INAPPLICABLE_JVM_NAME!>@get:JvmName("1")<!>
val b: Int
<!SYNCHRONIZED_ON_ABSTRACT!>@get:Synchronized<!>
<!SYNCHRONIZED_IN_INTERFACE!>@get:Synchronized<!>
val c: Int
<!OVERLOADS_INTERFACE, WRONG_ANNOTATION_TARGET_WITH_USE_SITE_TARGET!>@get:JvmOverloads<!>