Add warning for initializers with obsolete syntax
Expected 'init' keyword before class initializer
This commit is contained in:
@@ -159,6 +159,7 @@ public interface Errors {
|
||||
DiagnosticFactory0<JetSecondaryConstructor> SECONDARY_CONSTRUCTOR_IN_OBJECT = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<JetDelegatorToSuperCall> SUPERTYPE_INITIALIZED_WITHOUT_PRIMARY_CONSTRUCTOR = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<JetConstructorDelegationCall> PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED = DiagnosticFactory0.create(ERROR);
|
||||
DiagnosticFactory0<PsiElement> INIT_KEYWORD_BEFORE_CLASS_INITIALIZER_EXPECTED = DiagnosticFactory0.create(WARNING);
|
||||
|
||||
// Trait-specific
|
||||
|
||||
|
||||
+2
@@ -418,6 +418,8 @@ public class DefaultErrorMessages {
|
||||
MAP.put(SUPERTYPE_INITIALIZED_WITHOUT_PRIMARY_CONSTRUCTOR, "Supertype initialization is impossible without primary constructor");
|
||||
MAP.put(PRIMARY_CONSTRUCTOR_DELEGATION_CALL_EXPECTED, "Primary constructor call expected");
|
||||
|
||||
MAP.put(INIT_KEYWORD_BEFORE_CLASS_INITIALIZER_EXPECTED, "Expecting 'init' keyword before class initializer");
|
||||
|
||||
MAP.put(ILLEGAL_SELECTOR, "Expression ''{0}'' cannot be a selector (occur after a dot)", STRING);
|
||||
|
||||
MAP.put(NO_TAIL_CALLS_FOUND, "A function is marked as tail-recursive but no tail calls are found");
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.intellij.lang.ASTNode;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.lexer.JetTokens;
|
||||
import org.jetbrains.kotlin.psi.stubs.KotlinPlaceHolderStub;
|
||||
import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes;
|
||||
|
||||
@@ -49,4 +50,14 @@ public class JetClassInitializer extends JetDeclarationStub<KotlinPlaceHolderStu
|
||||
JetExpression body = getBody();
|
||||
return (body instanceof JetBlockExpression) ? ((JetBlockExpression) body).getLBrace() : null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PsiElement getOpenBraceNodeOrSelf() {
|
||||
PsiElement result = getOpenBraceNode();
|
||||
return result != null ? result : this;
|
||||
}
|
||||
|
||||
public boolean hasInitKeyword() {
|
||||
return findChildByType(JetTokens.INIT_KEYWORD) != null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -451,6 +451,10 @@ public class BodyResolver {
|
||||
@NotNull JetClassInitializer anonymousInitializer,
|
||||
@NotNull ClassDescriptorWithResolutionScopes classDescriptor
|
||||
) {
|
||||
if (!anonymousInitializer.hasInitKeyword()) {
|
||||
trace.report(INIT_KEYWORD_BEFORE_CLASS_INITIALIZER_EXPECTED.on(anonymousInitializer.getOpenBraceNodeOrSelf()));
|
||||
}
|
||||
|
||||
JetScope scopeForInitializers = classDescriptor.getScopeForInitializerResolution();
|
||||
if (!classDescriptor.getConstructors().isEmpty()) {
|
||||
expressionTypingServices.getType(scopeForInitializers, anonymousInitializer.getBody(), NO_EXPECTED_TYPE, c.getOuterDataFlowInfo(), trace);
|
||||
|
||||
@@ -4,7 +4,7 @@ fun box(): String {
|
||||
var accessedFromConstructor: Class<*>? = null
|
||||
|
||||
class MyClass() {
|
||||
{
|
||||
init {
|
||||
accessedFromConstructor = javaClass<MyClass>()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
class A(w: Int) {
|
||||
var c = w
|
||||
|
||||
{
|
||||
init {
|
||||
c = 81
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
trait NoC {
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!>{
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!>init {
|
||||
|
||||
}<!>
|
||||
|
||||
val a : Int get() = 1
|
||||
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!>{
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!>init {
|
||||
|
||||
}<!>
|
||||
}
|
||||
|
||||
class WithC() {
|
||||
val x : Int
|
||||
{
|
||||
init {
|
||||
$x = 1
|
||||
<!UNRESOLVED_REFERENCE!>$y<!> = 2
|
||||
val <!UNUSED_VARIABLE!>b<!> = x
|
||||
@@ -21,7 +21,7 @@ class WithC() {
|
||||
|
||||
val a : Int get() = 1
|
||||
|
||||
{
|
||||
init {
|
||||
val <!UNUSED_VARIABLE!>z<!> = <!UNRESOLVED_REFERENCE!>b<!>
|
||||
val <!UNUSED_VARIABLE!>zz<!> = x
|
||||
val <!UNUSED_VARIABLE!>zzz<!> = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$a<!>
|
||||
|
||||
@@ -6,7 +6,7 @@ open class `$`() {
|
||||
}
|
||||
open class `$$`(`$$$$` : `$$$$$`?) : `$`() {
|
||||
val `$$$` : `$$$$$`?
|
||||
{
|
||||
init {
|
||||
$`$$$` = `$$$$`
|
||||
}
|
||||
open public fun `$$$$$$`() : `$$$$$`? {
|
||||
|
||||
@@ -16,7 +16,7 @@ class Test() {
|
||||
var a : Int = 111
|
||||
var b : Int get() = $a; set(x) {a = x; $a = x}
|
||||
|
||||
{
|
||||
init {
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!> = $a
|
||||
$a = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!>
|
||||
a = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$b<!>
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
class C(a: Int, b: Int, c: Int, d: Int, <!UNUSED_PARAMETER!>e<!>: Int = d, val f: String) {
|
||||
{
|
||||
init {
|
||||
a + a
|
||||
}
|
||||
|
||||
val g = b
|
||||
|
||||
{
|
||||
init {
|
||||
c + c
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ class MyTest() {
|
||||
$a = v
|
||||
}
|
||||
|
||||
{
|
||||
init {
|
||||
a = "rr"
|
||||
}
|
||||
|
||||
@@ -133,7 +133,7 @@ fun testObject() : Trait {
|
||||
fun testBackingFieldsNotMarked() {
|
||||
val <!UNUSED_VARIABLE!>a<!> = object {
|
||||
val x : Int
|
||||
{
|
||||
init {
|
||||
$x = 1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ annotation class Annotation5() <!ANNOTATION_CLASS_WITH_BODY!>{
|
||||
}<!>
|
||||
|
||||
annotation class Annotation6() <!ANNOTATION_CLASS_WITH_BODY!>{
|
||||
{}
|
||||
init {}
|
||||
}<!>
|
||||
|
||||
annotation class Annotation1() <!ANNOTATION_CLASS_WITH_BODY!>{}<!>
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
class A {
|
||||
ann {}
|
||||
[ann] {}
|
||||
<!UNRESOLVED_REFERENCE!>aaa<!> {}
|
||||
[<!UNRESOLVED_REFERENCE!>aaa<!>] {}
|
||||
ann init {}
|
||||
[ann] init {}
|
||||
<!UNRESOLVED_REFERENCE!>aaa<!> init {}
|
||||
[<!UNRESOLVED_REFERENCE!>aaa<!>] init {}
|
||||
}
|
||||
|
||||
trait T {
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!>ann {}<!>
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!>[ann] {}<!>
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!><!UNRESOLVED_REFERENCE!>aaa<!> {}<!>
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!>[<!UNRESOLVED_REFERENCE!>aaa<!>] {}<!>
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!>ann init {}<!>
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!>[ann] init {}<!>
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!><!UNRESOLVED_REFERENCE!>aaa<!> init {}<!>
|
||||
<!ANONYMOUS_INITIALIZER_IN_TRAIT!>[<!UNRESOLVED_REFERENCE!>aaa<!>] init {}<!>
|
||||
}
|
||||
|
||||
annotation class ann
|
||||
@@ -1,5 +1,5 @@
|
||||
class ReadForward() {
|
||||
{
|
||||
init {
|
||||
val <!UNUSED_VARIABLE!>x<!> = <!UNINITIALIZED_VARIABLE!>$a<!>
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
class ReadByAnotherPropertyInitializer() {
|
||||
val a = 1
|
||||
{
|
||||
init {
|
||||
val <!UNUSED_VARIABLE!>x<!> = $a
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
abstract class ReadNonexistent() {
|
||||
abstract val aa: Int
|
||||
|
||||
{
|
||||
init {
|
||||
val <!UNUSED_VARIABLE!>x<!> = <!NO_BACKING_FIELD_ABSTRACT_PROPERTY!>$aa<!>
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@ class ReadNonexistent() {
|
||||
val a: Int
|
||||
get() = 1
|
||||
|
||||
{
|
||||
init {
|
||||
val <!UNUSED_VARIABLE!>x<!> = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$a<!>
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
class Cl() {
|
||||
{
|
||||
init {
|
||||
val <!UNUSED_VARIABLE!>x<!> = <!UNRESOLVED_REFERENCE!>$a<!>
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
val y = 1
|
||||
|
||||
class A() {
|
||||
{
|
||||
init {
|
||||
<!INACCESSIBLE_BACKING_FIELD!>$y<!> = 1
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,23 +5,23 @@ package kt462
|
||||
|
||||
abstract class TestInitializationWithoutBackingField() {
|
||||
val valWithBackingField : Int
|
||||
{
|
||||
init {
|
||||
valWithBackingField = 2
|
||||
}
|
||||
|
||||
val valWithoutBackingField : Int
|
||||
get() = 42
|
||||
{
|
||||
init {
|
||||
<!VAL_REASSIGNMENT!>valWithoutBackingField<!> = 45
|
||||
}
|
||||
|
||||
var finalDefaultVar : Int
|
||||
{
|
||||
init {
|
||||
finalDefaultVar = 3
|
||||
}
|
||||
|
||||
open var openVar : Int
|
||||
{
|
||||
init {
|
||||
<!INITIALIZATION_USING_BACKING_FIELD_OPEN_SETTER!>openVar<!> = 4
|
||||
}
|
||||
|
||||
@@ -29,42 +29,42 @@ abstract class TestInitializationWithoutBackingField() {
|
||||
set(v: Int) {
|
||||
$varWithCustomSetter = v
|
||||
}
|
||||
{
|
||||
init {
|
||||
<!INITIALIZATION_USING_BACKING_FIELD_CUSTOM_SETTER!>varWithCustomSetter<!> = 3
|
||||
}
|
||||
|
||||
var varWithoutBackingField : Int
|
||||
get() = 3
|
||||
set(v: Int) {}
|
||||
{
|
||||
init {
|
||||
varWithoutBackingField = 4
|
||||
}
|
||||
|
||||
abstract var abstractVar : Int
|
||||
{
|
||||
init {
|
||||
abstractVar = 34
|
||||
}
|
||||
}
|
||||
|
||||
abstract class TestInitializationThroughBackingField() {
|
||||
val valWithBackingField : Int
|
||||
{
|
||||
init {
|
||||
$valWithBackingField = 2
|
||||
}
|
||||
|
||||
val valWithoutBackingField : Int
|
||||
get() = 42
|
||||
{
|
||||
init {
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$valWithoutBackingField<!> = 45
|
||||
}
|
||||
|
||||
var finalDefaultVar : Int
|
||||
{
|
||||
init {
|
||||
$finalDefaultVar = 3
|
||||
}
|
||||
|
||||
open var openVar : Int
|
||||
{
|
||||
init {
|
||||
$openVar = 4
|
||||
}
|
||||
|
||||
@@ -72,26 +72,26 @@ abstract class TestInitializationThroughBackingField() {
|
||||
set(v: Int) {
|
||||
$varWithCustomSetter = v
|
||||
}
|
||||
{
|
||||
init {
|
||||
$varWithCustomSetter = 3
|
||||
}
|
||||
|
||||
var varWithoutBackingField : Int
|
||||
get() = 3
|
||||
set(v: Int) {}
|
||||
{
|
||||
init {
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$varWithoutBackingField<!> = 4
|
||||
}
|
||||
|
||||
abstract var abstractVar : Int
|
||||
{
|
||||
init {
|
||||
<!NO_BACKING_FIELD_ABSTRACT_PROPERTY!>$abstractVar<!> = 34
|
||||
}
|
||||
}
|
||||
|
||||
class TestBackingFieldsVisibility() {
|
||||
var a : Int = 712
|
||||
{
|
||||
init {
|
||||
$a = 37
|
||||
this.$a = 357
|
||||
}
|
||||
@@ -122,7 +122,7 @@ val topLevelVar = 11
|
||||
class T() {
|
||||
val z : Int get() = 42
|
||||
|
||||
{
|
||||
init {
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>this.$z<!> = 34
|
||||
}
|
||||
|
||||
@@ -132,7 +132,7 @@ class T() {
|
||||
|
||||
val a = object {
|
||||
val x = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$z<!>
|
||||
{
|
||||
init {
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$z<!> = 23
|
||||
}
|
||||
}
|
||||
@@ -140,7 +140,7 @@ class T() {
|
||||
var x: Int = 2
|
||||
get() {
|
||||
val <!UNUSED_VARIABLE!>o<!> = object {
|
||||
{
|
||||
init {
|
||||
$x = 34
|
||||
}
|
||||
fun foo() {
|
||||
@@ -164,7 +164,7 @@ class T() {
|
||||
$x = 34
|
||||
val <!UNUSED_VARIABLE!>o<!> = object {
|
||||
val y = $x
|
||||
{
|
||||
init {
|
||||
$x = 422
|
||||
}
|
||||
}
|
||||
|
||||
+19
-19
@@ -112,7 +112,7 @@ val y = 10
|
||||
val z = 10
|
||||
|
||||
class AnonymousInitializers(var a: String, val b: String) {
|
||||
{
|
||||
init {
|
||||
$a = "30"
|
||||
a = "s"
|
||||
|
||||
@@ -121,11 +121,11 @@ class AnonymousInitializers(var a: String, val b: String) {
|
||||
}
|
||||
|
||||
val i: Int
|
||||
{
|
||||
init {
|
||||
$i = 121
|
||||
}
|
||||
|
||||
{
|
||||
init {
|
||||
x = 11
|
||||
<!VAL_REASSIGNMENT!>z<!> = 10
|
||||
}
|
||||
@@ -133,14 +133,14 @@ class AnonymousInitializers(var a: String, val b: String) {
|
||||
val j: Int
|
||||
get() = 20
|
||||
|
||||
{
|
||||
init {
|
||||
<!VAL_REASSIGNMENT!>$i<!> = 13
|
||||
<!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$j<!> = 30
|
||||
<!VAL_REASSIGNMENT!>j<!> = 34
|
||||
}
|
||||
|
||||
val k: String
|
||||
{
|
||||
init {
|
||||
if (1 < 3) {
|
||||
k = "a"
|
||||
}
|
||||
@@ -150,7 +150,7 @@ class AnonymousInitializers(var a: String, val b: String) {
|
||||
}
|
||||
|
||||
val l: String
|
||||
{
|
||||
init {
|
||||
if (1 < 3) {
|
||||
$l = "a"
|
||||
}
|
||||
@@ -160,7 +160,7 @@ class AnonymousInitializers(var a: String, val b: String) {
|
||||
}
|
||||
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val o: String<!>
|
||||
{
|
||||
init {
|
||||
if (1 < 3) {
|
||||
$o = "a"
|
||||
}
|
||||
@@ -168,13 +168,13 @@ class AnonymousInitializers(var a: String, val b: String) {
|
||||
|
||||
var m: Int = 30
|
||||
|
||||
{
|
||||
init {
|
||||
$m = 400
|
||||
}
|
||||
|
||||
val n: Int
|
||||
|
||||
{
|
||||
init {
|
||||
while (<!UNINITIALIZED_VARIABLE!>n<!> == 0) {
|
||||
}
|
||||
$n = 10
|
||||
@@ -183,7 +183,7 @@ class AnonymousInitializers(var a: String, val b: String) {
|
||||
}
|
||||
|
||||
var p = 1
|
||||
{
|
||||
init {
|
||||
p++
|
||||
}
|
||||
}
|
||||
@@ -197,7 +197,7 @@ open class Open(<!UNUSED_PARAMETER!>a<!>: Int, <!UNUSED_PARAMETER!>w<!>: Int) {}
|
||||
class LocalValsVsProperties(val a: Int, w: Int) : Open(a, w) {
|
||||
val x : Int
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!>
|
||||
{
|
||||
init {
|
||||
$x = 1
|
||||
val <!UNUSED_VARIABLE!>b<!> = x
|
||||
}
|
||||
@@ -212,7 +212,7 @@ class LocalValsVsProperties(val a: Int, w: Int) : Open(a, w) {
|
||||
}
|
||||
var xx = w
|
||||
var yy : Int
|
||||
{
|
||||
init {
|
||||
<!VAL_REASSIGNMENT!>w<!> += 1
|
||||
$yy = w
|
||||
}
|
||||
@@ -222,13 +222,13 @@ class Outer() {
|
||||
val a : Int
|
||||
var b : Int
|
||||
|
||||
{
|
||||
init {
|
||||
$a = 1
|
||||
$b = 1
|
||||
}
|
||||
|
||||
inner class Inner() {
|
||||
{
|
||||
init {
|
||||
<!VAL_REASSIGNMENT!>a<!>++
|
||||
b++
|
||||
}
|
||||
@@ -250,7 +250,7 @@ class ClassObject() {
|
||||
default object {
|
||||
val x : Int
|
||||
|
||||
{
|
||||
init {
|
||||
$x = 1
|
||||
}
|
||||
|
||||
@@ -267,7 +267,7 @@ fun foo() {
|
||||
val x : Int
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!>
|
||||
val z : Int
|
||||
{
|
||||
init {
|
||||
$x = 1
|
||||
$z = 3
|
||||
}
|
||||
@@ -284,7 +284,7 @@ class TestObjectExpression() {
|
||||
val <!UNUSED_VARIABLE!>a<!> = object {
|
||||
val x : Int
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!>
|
||||
{
|
||||
init {
|
||||
if (true)
|
||||
x = 12
|
||||
else
|
||||
@@ -307,7 +307,7 @@ class TestObjectExpression() {
|
||||
object TestObjectDeclaration {
|
||||
val x : Int
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val y : Int<!>
|
||||
{
|
||||
init {
|
||||
$x = 1
|
||||
}
|
||||
|
||||
@@ -325,7 +325,7 @@ fun func() {
|
||||
val b = 1
|
||||
val <!UNUSED_VARIABLE!>a<!> = object {
|
||||
val x = b
|
||||
{
|
||||
init {
|
||||
<!VAL_REASSIGNMENT!>b<!> = 4
|
||||
<!UNRESOLVED_REFERENCE!>$b<!> = 3
|
||||
}
|
||||
|
||||
@@ -9,7 +9,7 @@ class P {
|
||||
|
||||
val other = P();
|
||||
|
||||
{
|
||||
init {
|
||||
x = 23
|
||||
other.x = 4
|
||||
}
|
||||
@@ -33,7 +33,7 @@ fun foo() {
|
||||
|
||||
class R {
|
||||
val p = P();
|
||||
{
|
||||
init {
|
||||
<!INVISIBLE_SETTER!>p.x<!> = 42
|
||||
}
|
||||
|
||||
|
||||
@@ -14,7 +14,7 @@ val closure = {
|
||||
}
|
||||
|
||||
class A {
|
||||
{
|
||||
init {
|
||||
fun foo(): Int {
|
||||
<!NO_RETURN_IN_FUNCTION_WITH_BLOCK_BODY!>}<!>
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ package kt510
|
||||
|
||||
public open class Identifier1() {
|
||||
var field : Boolean
|
||||
{
|
||||
init {
|
||||
field = false; // error
|
||||
}
|
||||
}
|
||||
@@ -12,7 +12,7 @@ public open class Identifier1() {
|
||||
|
||||
public open class Identifier2() {
|
||||
var field : Boolean
|
||||
{
|
||||
init {
|
||||
this.field = false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,17 +3,17 @@
|
||||
package kt897
|
||||
|
||||
class A() {
|
||||
{
|
||||
init {
|
||||
<!INITIALIZATION_BEFORE_DECLARATION!>i<!> = 11
|
||||
}
|
||||
val i : Int? = null // must be an error
|
||||
|
||||
{
|
||||
init {
|
||||
<!INITIALIZATION_BEFORE_DECLARATION!>j<!> = 1
|
||||
}
|
||||
var j : Int = 2
|
||||
|
||||
{
|
||||
init {
|
||||
<!INITIALIZATION_BEFORE_DECLARATION!>k<!> = 3
|
||||
}
|
||||
val k : Int
|
||||
|
||||
@@ -2,7 +2,7 @@ package f
|
||||
|
||||
fun f() {
|
||||
class LocalClass() {
|
||||
{
|
||||
init {
|
||||
val <!UNUSED_VARIABLE!>x1<!> = "" // ok: unused
|
||||
|
||||
fun loc1(): Int {
|
||||
|
||||
+2
-2
@@ -12,7 +12,7 @@ open class A(val a: A)
|
||||
|
||||
class TestObjectLiteral {
|
||||
val obj: A = object: A(<!UNINITIALIZED_VARIABLE!>obj<!>) {
|
||||
{
|
||||
init {
|
||||
val x = <!UNINITIALIZED_VARIABLE!>obj<!>
|
||||
}
|
||||
fun foo() {
|
||||
@@ -20,7 +20,7 @@ class TestObjectLiteral {
|
||||
}
|
||||
}
|
||||
val obj1: A = @l ( object: A(<!UNINITIALIZED_VARIABLE!>obj1<!>) {
|
||||
{
|
||||
init {
|
||||
val x = <!UNINITIALIZED_VARIABLE!>obj1<!>
|
||||
}
|
||||
fun foo() = obj1
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
class AnonymousInitializers(var a: String) {
|
||||
{
|
||||
init {
|
||||
a = "s"
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -5,7 +5,7 @@ fun test(x: Any) {
|
||||
fun foo(y: Any) {
|
||||
if (y !is String) return
|
||||
class Local {
|
||||
{
|
||||
init {
|
||||
<!DEBUG_INFO_SMARTCAST!>x<!>.length()
|
||||
<!DEBUG_INFO_SMARTCAST!>y<!>.length()
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
fun f(a: Any?) {
|
||||
if (a is B) {
|
||||
class C : X(<!DEBUG_INFO_SMARTCAST!>a<!>) {
|
||||
{
|
||||
init {
|
||||
<!DEBUG_INFO_SMARTCAST!>a<!>.foo()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ fun test(x: Any) {
|
||||
|
||||
class LocalOuter {
|
||||
inner class Local {
|
||||
{
|
||||
init {
|
||||
<!DEBUG_INFO_SMARTCAST!>x<!>.length()
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -11,7 +11,7 @@ class Foo {
|
||||
|
||||
private val privateProperty = object : MyClass(), MyTrait {}
|
||||
|
||||
{
|
||||
init {
|
||||
privateProperty.f1()
|
||||
privateProperty.f2()
|
||||
}
|
||||
@@ -27,7 +27,7 @@ class Foo {
|
||||
|
||||
private fun privateFunction() = object : MyClass(), MyTrait {}
|
||||
|
||||
{
|
||||
init {
|
||||
privateFunction().f1()
|
||||
privateFunction().f2()
|
||||
}
|
||||
@@ -45,7 +45,7 @@ class Foo {
|
||||
class FooInner {
|
||||
private val privatePropertyInner = object : MyClass(), MyTrait {}
|
||||
|
||||
{
|
||||
init {
|
||||
privatePropertyInner.f1()
|
||||
privatePropertyInner.f2()
|
||||
}
|
||||
@@ -61,7 +61,7 @@ class Foo {
|
||||
|
||||
private fun privateFunctionInner() = object : MyClass(), MyTrait {}
|
||||
|
||||
{
|
||||
init {
|
||||
privateFunctionInner().f1()
|
||||
privateFunctionInner().f2()
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
|
||||
class Foo() {
|
||||
private val builder = StringBuilder("sdfsd");
|
||||
private val builder = StringBuilder("sdfsd")
|
||||
|
||||
{
|
||||
init {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ class TestPCParameters(w : Int, <!UNUSED_PARAMETER!>x<!> : Int, val y : Int, var
|
||||
|
||||
val xx = w
|
||||
|
||||
{
|
||||
init {
|
||||
w + 1
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -6,7 +6,7 @@ inline fun <R> inlineFunOnlyLocal(inlineOptions(ONLY_LOCAL_RETURN)p: () -> R) {
|
||||
|
||||
val z = p();
|
||||
|
||||
{
|
||||
init {
|
||||
doCall {
|
||||
p()
|
||||
}
|
||||
@@ -25,9 +25,9 @@ inline fun <R> inlineFunOnlyLocal(inlineOptions(ONLY_LOCAL_RETURN)p: () -> R) {
|
||||
inline fun <R> inlineFun(p: () -> R) {
|
||||
val s = object {
|
||||
|
||||
val z = <!NON_LOCAL_RETURN_NOT_ALLOWED!>p<!>();
|
||||
val z = <!NON_LOCAL_RETURN_NOT_ALLOWED!>p<!>()
|
||||
|
||||
{
|
||||
init {
|
||||
doCall {
|
||||
<!NON_LOCAL_RETURN_NOT_ALLOWED!>p<!>()
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
fun f() {
|
||||
class MyClass() {
|
||||
{
|
||||
init {
|
||||
val x: MyClass = MyClass()
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ fun f() {
|
||||
}
|
||||
|
||||
<!LOCAL_OBJECT_NOT_ALLOWED!>object MyObject<!> {
|
||||
{
|
||||
init {
|
||||
val obj: MyObject = MyObject
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,7 @@ fun f() {
|
||||
|
||||
val closure = {
|
||||
class MyClass {
|
||||
{
|
||||
init {
|
||||
val x: MyClass = MyClass()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,15 +69,15 @@ abstract class IllegalModifiers5() {
|
||||
|
||||
//Check illegal modifiers on anonymous initializers
|
||||
abstract class IllegalModifiers6() {
|
||||
<!ILLEGAL_MODIFIER!>public<!> {}
|
||||
<!ILLEGAL_MODIFIER!>private<!> {}
|
||||
<!ILLEGAL_MODIFIER!>protected<!> {}
|
||||
<!ILLEGAL_MODIFIER!>vararg<!> {}
|
||||
<!ILLEGAL_MODIFIER!>abstract<!> {}
|
||||
<!ILLEGAL_MODIFIER!>open<!> {}
|
||||
<!ILLEGAL_MODIFIER!>final<!> {}
|
||||
<!ILLEGAL_MODIFIER!>public<!> init {}
|
||||
<!ILLEGAL_MODIFIER!>private<!> init {}
|
||||
<!ILLEGAL_MODIFIER!>protected<!> init {}
|
||||
<!ILLEGAL_MODIFIER!>vararg<!> init {}
|
||||
<!ILLEGAL_MODIFIER!>abstract<!> init {}
|
||||
<!ILLEGAL_MODIFIER!>open<!> init {}
|
||||
<!ILLEGAL_MODIFIER!>final<!> init {}
|
||||
|
||||
<!ILLEGAL_MODIFIER!>public<!> annotated {}
|
||||
<!ILLEGAL_MODIFIER!>public<!> annotated init {}
|
||||
|
||||
<!ILLEGAL_MODIFIER!>private<!> <!NOT_AN_ANNOTATION_CLASS!>IllegalModifiers6()<!> {}
|
||||
<!ILLEGAL_MODIFIER!>private<!> <!NOT_AN_ANNOTATION_CLASS!>IllegalModifiers6()<!> init {}
|
||||
}
|
||||
@@ -14,7 +14,7 @@ fun f(s: String?) {
|
||||
// more tests
|
||||
class A(a: String?) {
|
||||
val b = if (a != null) <!DEBUG_INFO_SMARTCAST!>a<!>.length() else 1
|
||||
{
|
||||
init {
|
||||
if (a != null) {
|
||||
val <!UNUSED_VARIABLE!>c<!> = <!DEBUG_INFO_SMARTCAST!>a<!>.length()
|
||||
}
|
||||
@@ -22,7 +22,7 @@ class A(a: String?) {
|
||||
|
||||
val i : Int
|
||||
|
||||
{
|
||||
init {
|
||||
if (a is String) {
|
||||
i = <!DEBUG_INFO_SMARTCAST!>a<!>.length()
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@ package toplevelObjectDeclarations
|
||||
val x = A.foo()
|
||||
|
||||
val y = object : Foo(x) {
|
||||
{
|
||||
init {
|
||||
x + 12
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ object A {
|
||||
|
||||
class Test2 {
|
||||
private val a = object {
|
||||
{
|
||||
init {
|
||||
<!UNINITIALIZED_VARIABLE, DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>b<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> 1
|
||||
}
|
||||
val x = <!UNINITIALIZED_VARIABLE, DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>b<!>
|
||||
|
||||
@@ -3,7 +3,7 @@ package test
|
||||
import javax.swing.JFrame
|
||||
|
||||
class KFrame() : JFrame() {
|
||||
{
|
||||
init {
|
||||
val <!UNUSED_VARIABLE!>x<!> = this.rootPaneCheckingEnabled // make sure field is visible
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ class A {
|
||||
|
||||
class B {
|
||||
class D {
|
||||
{
|
||||
init {
|
||||
A().bar {
|
||||
this.foo()
|
||||
foo()
|
||||
|
||||
@@ -11,7 +11,7 @@ class Creature() {
|
||||
object A {
|
||||
var bbb : Int
|
||||
|
||||
{
|
||||
init {
|
||||
$bbb = 1
|
||||
}
|
||||
}
|
||||
@@ -19,12 +19,12 @@ class Creature() {
|
||||
class C() {
|
||||
var ccc : Int
|
||||
|
||||
{
|
||||
init {
|
||||
$ccc = 2
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
init {
|
||||
Creature.numCreated++ // Error
|
||||
A.bbb++
|
||||
C().ccc++
|
||||
|
||||
@@ -7,7 +7,7 @@ class A {
|
||||
}
|
||||
|
||||
class B() {
|
||||
{
|
||||
init {
|
||||
A().<!INVISIBLE_MEMBER!>a<!> = "Hello"
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,7 @@ package kt37
|
||||
class C() {
|
||||
private var f: Int
|
||||
|
||||
{
|
||||
init {
|
||||
f = 610
|
||||
}
|
||||
}
|
||||
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
class A {
|
||||
val x: Int
|
||||
val y: Int
|
||||
<!INIT_KEYWORD_BEFORE_CLASS_INITIALIZER_EXPECTED!>{<!>
|
||||
x = 1
|
||||
}
|
||||
init {
|
||||
y = 1
|
||||
}
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package
|
||||
|
||||
internal final class A {
|
||||
public constructor A()
|
||||
internal final val x: kotlin.Int
|
||||
internal final val y: 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
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
class Test {
|
||||
private var x = object {};
|
||||
{
|
||||
init {
|
||||
x = <!TYPE_MISMATCH!>object<!> {}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
class A(vararg t : Int) {
|
||||
{
|
||||
init {
|
||||
val <!UNUSED_VARIABLE!>t1<!> : IntArray = t
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class A(vararg val t : Int) {
|
||||
{
|
||||
init {
|
||||
val <!UNUSED_VARIABLE!>t1<!> : IntArray = t
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@ class Test<in I> {
|
||||
|
||||
fun apply(<!UNUSED_PARAMETER!>i<!>: I) {}
|
||||
|
||||
{
|
||||
init {
|
||||
foo()
|
||||
this.foo()
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ fun <T, R> with(receiver: T, f: T.() -> R): R = receiver.f()
|
||||
class Test<in I, out O> {
|
||||
private val i: I = getT()
|
||||
|
||||
;{
|
||||
init {
|
||||
apply(i)
|
||||
apply(this.i)
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@ class Test<in I, out O> {
|
||||
private var i: I = getT()
|
||||
private val j: I
|
||||
|
||||
;{
|
||||
init {
|
||||
j = getT()
|
||||
i = getT()
|
||||
this.i = getT()
|
||||
|
||||
@@ -3,7 +3,7 @@ fun <T> getT(): T = null!!
|
||||
class A<in I>(init: I) {
|
||||
private val i: I
|
||||
|
||||
{
|
||||
init {
|
||||
i = getT()
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ class A<in I>(init: I) {
|
||||
|
||||
private var i4 = getT<I>()
|
||||
|
||||
;{
|
||||
init {
|
||||
i2 = getT()
|
||||
i3 = init
|
||||
i4 = i3
|
||||
|
||||
@@ -10469,6 +10469,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("expectedInitKeywordOnInitializer.kt")
|
||||
public void testExpectedInitKeywordOnInitializer() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/secondaryConstructors/expectedInitKeywordOnInitializer.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("expectedPrimaryConstructorCall.kt")
|
||||
public void testExpectedPrimaryConstructorCall() throws Exception {
|
||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/secondaryConstructors/expectedPrimaryConstructorCall.kt");
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
trait NoC {
|
||||
<error>{
|
||||
<error>init {
|
||||
|
||||
}</error>
|
||||
|
||||
val a : Int get() = 1
|
||||
|
||||
<error>{
|
||||
<error>init {
|
||||
|
||||
}</error>
|
||||
}
|
||||
|
||||
class WithC() {
|
||||
val x : Int
|
||||
{
|
||||
init {
|
||||
$x = 1
|
||||
<error>$y</error> = 2
|
||||
val <warning>b</warning> = x
|
||||
@@ -21,7 +21,7 @@ class WithC() {
|
||||
|
||||
val a : Int get() = 1
|
||||
|
||||
{
|
||||
init {
|
||||
val <warning>z</warning> = <error>b</error>
|
||||
val <warning>zz</warning> = x
|
||||
val <warning>zzz</warning> = <error>$a</error>
|
||||
|
||||
@@ -18,7 +18,7 @@ package toplevelObjectDeclarations
|
||||
val x = A.foo()
|
||||
|
||||
val y = object : Foo(x) {
|
||||
{
|
||||
init {
|
||||
x + 12
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ class Test() {
|
||||
var a : Int = 111
|
||||
var b : Int get() = $a; set(x) {a = x; $a = x}
|
||||
|
||||
{
|
||||
init {
|
||||
<error>$b</error> = $a
|
||||
$a = <error>$b</error>
|
||||
a = <error>$b</error>
|
||||
|
||||
@@ -46,7 +46,7 @@ class TestPCParameters(w : Int, <warning>x</warning> : Int, val <info>y</info> :
|
||||
|
||||
val <info>xx</info> = w
|
||||
|
||||
{
|
||||
<info>init</info> {
|
||||
w + 1
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
class Foo(var bar : Int, var barr : Int, var barrr : Int) {
|
||||
{
|
||||
init {
|
||||
bar = 1
|
||||
barr = 1
|
||||
barrr = 1
|
||||
@@ -7,7 +7,7 @@
|
||||
this : Foo
|
||||
}
|
||||
|
||||
{
|
||||
init {
|
||||
bar = 1
|
||||
this.bar
|
||||
1 : Int
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
|
||||
class A {
|
||||
default object {
|
||||
{
|
||||
init {
|
||||
val t: Int = <caret>foo
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user