Add warning for initializers with obsolete syntax

Expected 'init' keyword before class initializer
This commit is contained in:
Denis Zharkov
2015-02-18 12:05:26 +03:00
parent 0dc155d8c9
commit f07566d30d
61 changed files with 175 additions and 131 deletions
@@ -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
@@ -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,7 +1,7 @@
abstract class ReadNonexistent() {
abstract val aa: Int
{
init {
val <!UNUSED_VARIABLE!>x<!> = <!NO_BACKING_FIELD_ABSTRACT_PROPERTY!>$aa<!>
}
}
@@ -2,7 +2,7 @@ class ReadNonexistent() {
val a: Int
get() = 1
{
init {
val <!UNUSED_VARIABLE!>x<!> = <!NO_BACKING_FIELD_CUSTOM_ACCESSORS!>$a<!>
}
}
@@ -1,5 +1,5 @@
class Cl() {
{
init {
val <!UNUSED_VARIABLE!>x<!> = <!UNRESOLVED_REFERENCE!>$a<!>
}
}
@@ -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
}
}
@@ -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 {
@@ -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,5 +1,5 @@
class AnonymousInitializers(var a: String) {
{
init {
a = "s"
}
}
@@ -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()
}
}
@@ -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
}
@@ -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
}
}
@@ -0,0 +1,10 @@
class A {
val x: Int
val y: Int
<!INIT_KEYWORD_BEFORE_CLASS_INITIALIZER_EXPECTED!>{<!>
x = 1
}
init {
y = 1
}
}
@@ -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>
+1 -1
View File
@@ -18,7 +18,7 @@ package toplevelObjectDeclarations
val x = A.foo()
val y = object : Foo(x) {
{
init {
x + 12
}
+1 -1
View File
@@ -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
@@ -6,7 +6,7 @@
class A {
default object {
{
init {
val t: Int = <caret>foo
}
}