-
Notifications
You must be signed in to change notification settings - Fork 5.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Added Native-specific checker for properties of top level singletons (#…
- Loading branch information
LepilkinaElena
committed
Mar 6, 2020
1 parent
eba45d4
commit 61f5523
Showing
7 changed files
with
403 additions
and
2 deletions.
There are no files selected for viewing
114 changes: 114 additions & 0 deletions
114
compiler/testData/diagnostics/nativeTests/topLevelSingleton.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
// 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 | ||
|
||
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) { | ||
} | ||
} | ||
|
||
class AtomicInt(var value: Int) | ||
object Foo { | ||
<!VARIABLE_IN_SINGLETON_WITHOUT_THREAD_LOCAL!>var field1: Int = 10<!> | ||
val backer2 = AtomicInt(0) | ||
var field2: Int | ||
get() = backer2.value | ||
set(value: Int) { backer2.value = value } | ||
} | ||
|
||
object Foo1 { | ||
var field1: Int = 10 | ||
set(value: Int) { backer2.value = value } | ||
val backer2 = AtomicInt(0) | ||
} | ||
|
||
object WithDelegate { | ||
var field1: Int by Delegate() | ||
} | ||
|
||
@ThreadLocal | ||
object Bar { | ||
var field1: Int = 10 | ||
var field2: String? = null | ||
} | ||
|
||
class Foo2 { | ||
companion object { | ||
<!VARIABLE_IN_SINGLETON_WITHOUT_THREAD_LOCAL!>var field1: Int = 10<!> | ||
val backer2 = AtomicInt(0) | ||
var field2: Int | ||
get() = backer2.value | ||
set(value: Int) { | ||
backer2.value = value | ||
} | ||
} | ||
} | ||
|
||
class Bar2 { | ||
@ThreadLocal | ||
companion object { | ||
var field1: Int = 10 | ||
var field2: String? = null | ||
} | ||
} | ||
|
||
<!ENUM_THREAD_LOCAL_INAPPLICABLE!>@ThreadLocal<!> | ||
enum class Color(<!VARIABLE_IN_ENUM!>var rgb: Int<!>) { | ||
RED(0xFF0000), | ||
GREEN(0x00FF00), | ||
BLUE(0x0000FF) | ||
} | ||
|
||
enum class Color1(<!VARIABLE_IN_ENUM!>var rgb: Int<!>) { | ||
RED(0xFF0000), | ||
GREEN(0x00FF00), | ||
BLUE(0x0000FF); | ||
|
||
init { this.rgb += 1 } | ||
} | ||
|
||
@ThreadLocal | ||
var a = 3 | ||
enum class Color2() { | ||
RED(), | ||
GREEN(), | ||
BLUE(); | ||
|
||
var rgb: Int = 2 | ||
set(value: Int) { | ||
a = value | ||
} | ||
} | ||
|
||
enum class Color3() { | ||
RED(), | ||
GREEN(), | ||
BLUE(); | ||
|
||
var field1: Int by Delegate() | ||
} | ||
|
||
enum class Color4 { | ||
RED { | ||
<!VARIABLE_IN_ENUM!>var a = 2<!> | ||
override fun foo() { a = 42 } | ||
}, | ||
GREEN, | ||
BLUE; | ||
open fun foo() {} | ||
} | ||
|
||
var topLevelProperty = "Global var" |
217 changes: 217 additions & 0 deletions
217
compiler/testData/diagnostics/nativeTests/topLevelSingleton.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,217 @@ | ||
package | ||
|
||
@kotlin.native.concurrent.ThreadLocal public var a: kotlin.Int | ||
public var topLevelProperty: kotlin.String | ||
|
||
public final class AtomicInt { | ||
public constructor AtomicInt(/*0*/ value: kotlin.Int) | ||
public final var value: 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 | ||
} | ||
|
||
@kotlin.native.concurrent.ThreadLocal public object Bar { | ||
private constructor Bar() | ||
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 Bar2 { | ||
public constructor Bar2() | ||
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 companion object Companion { | ||
private constructor Companion() | ||
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 | ||
} | ||
} | ||
|
||
@kotlin.native.concurrent.ThreadLocal public final enum class Color : kotlin.Enum<Color> { | ||
enum entry RED | ||
|
||
enum entry GREEN | ||
|
||
enum entry BLUE | ||
|
||
private constructor Color(/*0*/ rgb: kotlin.Int) | ||
public final override /*1*/ /*fake_override*/ val name: kotlin.String | ||
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int | ||
public final var rgb: kotlin.Int | ||
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any | ||
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: Color): kotlin.Int | ||
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean | ||
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int | ||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String | ||
|
||
// Static members | ||
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Color | ||
public final /*synthesized*/ fun values(): kotlin.Array<Color> | ||
} | ||
|
||
public final enum class Color1 : kotlin.Enum<Color1> { | ||
enum entry RED | ||
|
||
enum entry GREEN | ||
|
||
enum entry BLUE | ||
|
||
private constructor Color1(/*0*/ rgb: kotlin.Int) | ||
public final override /*1*/ /*fake_override*/ val name: kotlin.String | ||
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int | ||
public final var rgb: kotlin.Int | ||
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any | ||
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: Color1): kotlin.Int | ||
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean | ||
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int | ||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String | ||
|
||
// Static members | ||
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Color1 | ||
public final /*synthesized*/ fun values(): kotlin.Array<Color1> | ||
} | ||
|
||
public final enum class Color2 : kotlin.Enum<Color2> { | ||
enum entry RED | ||
|
||
enum entry GREEN | ||
|
||
enum entry BLUE | ||
|
||
private constructor Color2() | ||
public final override /*1*/ /*fake_override*/ val name: kotlin.String | ||
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int | ||
public final var rgb: kotlin.Int | ||
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any | ||
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: Color2): kotlin.Int | ||
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean | ||
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int | ||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String | ||
|
||
// Static members | ||
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Color2 | ||
public final /*synthesized*/ fun values(): kotlin.Array<Color2> | ||
} | ||
|
||
public final enum class Color3 : kotlin.Enum<Color3> { | ||
enum entry RED | ||
|
||
enum entry GREEN | ||
|
||
enum entry BLUE | ||
|
||
private constructor Color3() | ||
public final var field1: kotlin.Int | ||
public final override /*1*/ /*fake_override*/ val name: kotlin.String | ||
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int | ||
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any | ||
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: Color3): kotlin.Int | ||
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean | ||
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int | ||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String | ||
|
||
// Static members | ||
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Color3 | ||
public final /*synthesized*/ fun values(): kotlin.Array<Color3> | ||
} | ||
|
||
public final enum class Color4 : kotlin.Enum<Color4> { | ||
enum entry RED | ||
|
||
enum entry GREEN | ||
|
||
enum entry BLUE | ||
|
||
private constructor Color4() | ||
public final override /*1*/ /*fake_override*/ val name: kotlin.String | ||
public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int | ||
protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any | ||
public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: Color4): kotlin.Int | ||
public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean | ||
public open fun foo(): kotlin.Unit | ||
public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int | ||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String | ||
|
||
// Static members | ||
public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): Color4 | ||
public final /*synthesized*/ fun values(): kotlin.Array<Color4> | ||
} | ||
|
||
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 object Foo { | ||
private constructor Foo() | ||
public final val backer2: AtomicInt | ||
public final var field1: kotlin.Int | ||
public final var field2: 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 | ||
} | ||
|
||
public object Foo1 { | ||
private constructor Foo1() | ||
public final val backer2: AtomicInt | ||
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 | ||
} | ||
|
||
public final class Foo2 { | ||
public constructor Foo2() | ||
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() | ||
public final val backer2: AtomicInt | ||
public final var field1: kotlin.Int | ||
public final var field2: 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 | ||
} | ||
} | ||
|
||
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 | ||
} | ||
} | ||
} | ||
} |
5 changes: 5 additions & 0 deletions
5
compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsNativeTestGenerated.java
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.