Light class builder: do not generate methods delegating to DefaultImpls in kotlin classes
Class APIs from java point of view stays the same so we can avoid generating those methods
Otherwise we have to calculate all supertypes when getMethods() is called,
which imposes severe performance penalties
We have to pretend these methods are not 'abstract' (also we consider them 'default' for safety)
so java highlighting does not report "class should be abstract" for all inheritors
We have to manually report "class should be abstract" on some of the java inheritors,
specifically those that are implementing interfaces directly
as opposed to extending kotlin classes implementing those interfaces
This commit is contained in:
+1
-1
@@ -1,5 +1,5 @@
|
||||
interface <lineMarker descr="*">A</lineMarker> {
|
||||
override fun <lineMarker descr="<html><body>Is implemented in <br> C</body></html>"><lineMarker descr="*">toString</lineMarker></lineMarker>() = "A"
|
||||
override fun <lineMarker descr="<html><body>Is overridden in <br> C</body></html>"><lineMarker descr="*">toString</lineMarker></lineMarker>() = "A"
|
||||
}
|
||||
|
||||
abstract class <lineMarker descr="*">B</lineMarker> : A
|
||||
|
||||
+3
-5
@@ -1,11 +1,9 @@
|
||||
interface <lineMarker descr="*">A</lineMarker> {
|
||||
fun <lineMarker descr="<html><body>Is implemented in <br> C</body></html>">foo</lineMarker>(): String = "A"
|
||||
fun <lineMarker descr="<html><body>Is overridden in <br> C</body></html>">foo</lineMarker>(): String = "A"
|
||||
|
||||
// TODO: B shoudn't be mentioned
|
||||
val <lineMarker descr="<html><body>Is implemented in <br/> B<br> C</body></html>">some</lineMarker>: String? get() = null
|
||||
val <lineMarker descr="<html><body>Is implemented in <br/> C</body></html>">some</lineMarker>: String? get() = null
|
||||
|
||||
// TODO: B shoudn't be mentioned
|
||||
var <lineMarker descr="<html><body>Is implemented in <br/> B<br> C</body></html>">other</lineMarker>: String?
|
||||
var <lineMarker descr="<html><body>Is implemented in <br/> C</body></html>">other</lineMarker>: String?
|
||||
get() = null
|
||||
set(value) {}
|
||||
}
|
||||
|
||||
+1
-2
@@ -4,8 +4,7 @@ interface <lineMarker descr="*">SkipSupport</lineMarker> {
|
||||
}
|
||||
|
||||
public interface <lineMarker descr="*">SkipSupportWithDefaults</lineMarker> : SkipSupport {
|
||||
// TODO: should be "Is overriden in SkipSupportImpl"
|
||||
override fun <lineMarker descr="<html><body>Is implemented in <br> SkipSupportImpl</body></html>"><lineMarker descr="Implements function in 'SkipSupport'">skip</lineMarker></lineMarker>(why: String) {}
|
||||
override fun <lineMarker descr="<html><body>Is overridden in <br> SkipSupportImpl</body></html>"><lineMarker descr="Implements function in 'SkipSupport'">skip</lineMarker></lineMarker>(why: String) {}
|
||||
|
||||
override fun <lineMarker descr="Implements function in 'SkipSupport'">skip</lineMarker>() {
|
||||
skip("not given")
|
||||
|
||||
Vendored
+1
-1
@@ -3,7 +3,7 @@ interface <lineMarker descr="*">SkipSupport</lineMarker> {
|
||||
}
|
||||
|
||||
public interface <lineMarker descr="*">SkipSupportWithDefaults</lineMarker> : SkipSupport {
|
||||
override fun <lineMarker descr="<html><body>Is implemented in <br> SkipSupportImpl1</body></html>"><lineMarker descr="Implements function in 'SkipSupport'">skip</lineMarker></lineMarker>() {}
|
||||
override fun <lineMarker descr="<html><body>Is overridden in <br> SkipSupportImpl1</body></html>"><lineMarker descr="Implements function in 'SkipSupport'">skip</lineMarker></lineMarker>() {}
|
||||
}
|
||||
|
||||
public interface SkipSupportImpl1 : SkipSupportWithDefaults {
|
||||
|
||||
Reference in New Issue
Block a user