Add recovery for properties without name

If property name is parsed on the next line and declaration is invalid
(no receiver/type/initializer), treat that name as it does not belong to property

 #KT-12987 In Progress
This commit is contained in:
Denis Zharkov
2016-07-07 16:26:30 +03:00
parent 141db1809f
commit f1026935a0
12 changed files with 457 additions and 3 deletions
@@ -0,0 +1,13 @@
abstract class A {
private val<!SYNTAX!><!>
// private is parsed as val's identifier
private fun foo1() {
}
private val<!SYNTAX!><!>
protected abstract fun foo2()
private val<!SYNTAX!><!>
fun foo3() {
}
}
@@ -0,0 +1,14 @@
package
public abstract class A {
public constructor A()
private final val <no name provided>: [ERROR : No type, no body]
private final val <no name provided>: [ERROR : No type, no body]
private final val <no name provided>: [ERROR : No type, no body]
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
private final fun foo1(): kotlin.Unit
protected abstract fun foo2(): kotlin.Unit
public final fun foo3(): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,50 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE
fun println(x: String) {
}
fun run(block: () -> Unit) {}
val propertyNameOnTheNextLine = 1
fun foo() {
val<!SYNTAX!><!>
println("abc")
val<!SYNTAX!><!>
run {
println("abc")
}
val<!SYNTAX!><!>
if (1 == 1) {
}
val<!SYNTAX!><!>
(1 + 2)
// `propertyNameOnTheNextLine` parsed as simple name expression
val<!SYNTAX!><!>
propertyNameOnTheNextLine
val<!SYNTAX!><!>
// comment
propertyNameOnTheNextLine
val<!SYNTAX!><!> /* comment */
propertyNameOnTheNextLine
// Correct properties
val
property1 = 1
val
propertyWithBy by <!UNRESOLVED_REFERENCE!>lazy<!> { 1 }
val
propertyWithType: Int
val
(a, b) = <!COMPONENT_FUNCTION_MISSING, COMPONENT_FUNCTION_MISSING!>1<!>
}
@@ -0,0 +1,6 @@
package
public val propertyNameOnTheNextLine: kotlin.Int = 1
public fun foo(): kotlin.Unit
public fun println(/*0*/ x: kotlin.String): kotlin.Unit
public fun run(/*0*/ block: () -> kotlin.Unit): kotlin.Unit