rewrite owner when copying FunctionDescriptor from supertype scope
that fixes invocation: >>> StringBuilder.length() that was compiled to >>> invokevirtual CharSequence.length() and now compiles to >>> invokevirtual StringBuilder.length() Essentially patch rewrites FunctionDescriptor.containingDeclaration when FunctionDescriptor is copied to subclass scope. FunctionDescriptor now has kind field that can be * DECLARATION (for "real" function, maybe abstract) * DELEGATION * FAKE_OVERRIDE (created for functions from supertypes) All tests pass although some parts of code are buggy and ugly. Random comments about this patch: * FunctionDescriptor.overrides point to function descriptors of supertype scopes * Filling of memberScope with supertypes is moved to OverrideResolver * ExpressionCodegen.intermediateValueForProperty must be rewritten * Patch adds not nice REDECLARATION reports (see compiler/testData/diagnostics/tests/*). Will be fixed later.
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
package override.generics
|
||||
|
||||
abstract class MyAbstractClass<T> {
|
||||
abstract val <!REDECLARATION!>pr<!> : T
|
||||
}
|
||||
|
||||
abstract class MyLegalAbstractClass2<T>(t : T) : MyAbstractClass<Int>() {
|
||||
val <R> <!REDECLARATION!>pr<!> : T = t
|
||||
}
|
||||
Reference in New Issue
Block a user