Implement Abstract Member Intention: Support primary constructor parameters

#KT-8427 Fixed
This commit is contained in:
Alexey Sedunov
2015-12-24 17:13:53 +03:00
committed by Alexey
parent 2b4f03feef
commit aeefdffaab
34 changed files with 389 additions and 55 deletions
@@ -0,0 +1 @@
org.jetbrains.kotlin.idea.intentions.ImplementAbstractMemberAsConstructorParameterIntention
@@ -0,0 +1,9 @@
// WITH_RUNTIME
// DISABLE-ERRORS
interface T<X> {
val <caret>foo: X
}
enum class E : T<Int> {
A, B, C
}
@@ -0,0 +1,9 @@
// WITH_RUNTIME
// DISABLE-ERRORS
interface T<X> {
val <caret>foo: X
}
enum class E(override val foo: Int) : T<Int> {
A, B, C
}
@@ -0,0 +1,9 @@
// IS_APPLICABLE: false
// DISABLE-ERRORS
interface A {
abstract fun <caret>foo(): Int
}
class B : A {
}
@@ -0,0 +1,22 @@
// WITH_RUNTIME
// DISABLE-ERRORS
interface T<X> {
val <caret>foo: X
}
class U : T<String> {
}
class V : T<Int> {
}
class Z : T<Int> by V() {
}
class W : T<Boolean> {
override val foo: Boolean
get() = throw UnsupportedOperationException()
}
@@ -0,0 +1,22 @@
// WITH_RUNTIME
// DISABLE-ERRORS
interface T<X> {
val <caret>foo: X
}
class U(override val foo: String) : T<String> {
}
class V(override val foo: Int) : T<Int> {
}
class Z : T<Int> by V() {
}
class W : T<Boolean> {
override val foo: Boolean
get() = throw UnsupportedOperationException()
}
@@ -0,0 +1,7 @@
// IS_APPLICABLE: false
// DISABLE-ERRORS
enum class E {
A, B, C;
abstract val <caret>foo: Int
}
@@ -0,0 +1,5 @@
// IS_APPLICABLE: false
// ERROR: Abstract property 'foo' in non-abstract class 'A'
class A {
abstract val <caret>foo: Int
}
@@ -0,0 +1,5 @@
// IS_APPLICABLE: false
// ERROR: Abstract property 'foo' in non-abstract class 'A'
object A {
abstract val <caret>foo: Int
}
@@ -0,0 +1,17 @@
// IS_APPLICABLE: false
// ERROR: Class 'C' must be declared abstract or implement abstract base class member public abstract val foo: kotlin.Int defined in B
interface A {
val <caret>foo: Int
}
class X : A {
override val foo = 1
}
abstract class B : A {
abstract override val foo: Int
}
class C: B() {
}
@@ -0,0 +1,4 @@
// IS_APPLICABLE: false
interface A {
val <caret>foo: Int
}
@@ -0,0 +1,4 @@
// IS_APPLICABLE: false
open class A {
val <caret>foo = 1
}
@@ -0,0 +1,5 @@
// IS_APPLICABLE: false
// ERROR: Property must be initialized or be abstract
open class A {
val <caret>foo: Int
}
@@ -0,0 +1,5 @@
// IS_APPLICABLE: false
interface A {
val <caret>foo: Int
get() = 1
}