Native specific frontend checker for @ThreadLocal (#3293)

This commit is contained in:
LepilkinaElena
2020-04-16 15:23:06 +03:00
committed by GitHub
parent 41a28bde5c
commit 4f9364f997
10 changed files with 232 additions and 30 deletions
@@ -0,0 +1,71 @@
// FILE: annotation.kt
package kotlin.native.concurrent
@Target(AnnotationTarget.PROPERTY, AnnotationTarget.CLASS)
@Retention(AnnotationRetention.BINARY)
annotation class ThreadLocal
// FILE: test.kt
import kotlin.native.concurrent.ThreadLocal
import kotlin.reflect.KProperty
data class Point(val x: Double, val y: Double)
class Person(val name: String) {
<!INAPPLICABLE_THREAD_LOCAL_TOP_LEVEL!>@ThreadLocal<!>
var surname: String? = null
}
abstract class Information {
abstract var field: String
}
<!INAPPLICABLE_THREAD_LOCAL!>@ThreadLocal<!>
class Person1(val name: String) {
var surname: String? = null
<!INAPPLICABLE_THREAD_LOCAL_TOP_LEVEL!>@ThreadLocal<!>
val extraInfo: Information = object : Information() {
override var field: String = "extra info"
}
}
@ThreadLocal
val extraInfo: Information = object : Information() {
override var field: String = "extra info"
}
@ThreadLocal
val point1 = Point(1.0, 1.0)
<!INAPPLICABLE_THREAD_LOCAL!>@ThreadLocal<!>
val cornerPoint: Point
get() = point1
@ThreadLocal
val person = Person1("aaaaa")
class Delegate {
val value: Int = 10
operator fun getValue(thisRef: Any?, property: KProperty<*>): Int {
return value
}
operator fun setValue(thisRef: Any?, property: KProperty<*>, value: Int) {
}
}
@ThreadLocal
var field1: Int by Delegate()
@ThreadLocal
object WithDelegate {
var field1: Int by Delegate()
}
class Bar {
@ThreadLocal
object SomeObject {
var field1: Int = 10
var field2: String? = null
}
}
@@ -0,0 +1,96 @@
package
@kotlin.native.concurrent.ThreadLocal public val cornerPoint: Point
@kotlin.native.concurrent.ThreadLocal public val extraInfo: Information
@kotlin.native.concurrent.ThreadLocal public var field1: kotlin.Int
@kotlin.native.concurrent.ThreadLocal public val person: Person1
@kotlin.native.concurrent.ThreadLocal public val point1: Point
public final class Bar {
public constructor Bar()
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
@kotlin.native.concurrent.ThreadLocal public object SomeObject {
private constructor SomeObject()
public final var field1: kotlin.Int
public final var field2: 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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
}
public final class Delegate {
public constructor Delegate()
public final val value: kotlin.Int = 10
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final operator fun getValue(/*0*/ thisRef: kotlin.Any?, /*1*/ property: kotlin.reflect.KProperty<*>): kotlin.Int
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final operator fun setValue(/*0*/ thisRef: kotlin.Any?, /*1*/ property: kotlin.reflect.KProperty<*>, /*2*/ value: kotlin.Int): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public abstract class Information {
public constructor Information()
public abstract var field: 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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class Person {
public constructor Person(/*0*/ name: kotlin.String)
public final val name: kotlin.String
@kotlin.native.concurrent.ThreadLocal public final var surname: 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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@kotlin.native.concurrent.ThreadLocal public final class Person1 {
public constructor Person1(/*0*/ name: kotlin.String)
@kotlin.native.concurrent.ThreadLocal public final val extraInfo: Information
public final val name: kotlin.String
public final var surname: 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
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final data class Point {
public constructor Point(/*0*/ x: kotlin.Double, /*1*/ y: kotlin.Double)
public final val x: kotlin.Double
public final val y: kotlin.Double
public final operator /*synthesized*/ fun component1(): kotlin.Double
public final operator /*synthesized*/ fun component2(): kotlin.Double
public final /*synthesized*/ fun copy(/*0*/ x: kotlin.Double = ..., /*1*/ y: kotlin.Double = ...): Point
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
@kotlin.native.concurrent.ThreadLocal public object WithDelegate {
private constructor WithDelegate()
public final var field1: kotlin.Int
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
}
package kotlin {
package kotlin.native {
package kotlin.native.concurrent {
@kotlin.annotation.Target(allowedTargets = {AnnotationTarget.PROPERTY, AnnotationTarget.CLASS}) @kotlin.annotation.Retention(value = AnnotationRetention.BINARY) public final annotation class ThreadLocal : kotlin.Annotation {
public constructor ThreadLocal()
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
}
}
}
}
@@ -65,7 +65,7 @@ class Bar2 {
}
}
<!ENUM_THREAD_LOCAL_INAPPLICABLE!>@ThreadLocal<!>
<!INAPPLICABLE_THREAD_LOCAL!>@ThreadLocal<!>
enum class Color(<!VARIABLE_IN_ENUM!>var rgb: Int<!>) {
RED(0xFF0000),
GREEN(0x00FF00),