kt-1760 delegation to java iface:
- removed codegen's unnecessary lookup for a declaration - skipped class' only supertype (if any) methods when delegating
This commit is contained in:
committed by
Andrey Breslav
parent
78cb5381f7
commit
b84f068c33
@@ -779,7 +779,6 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
StackValue field = StackValue.field(fieldType, classname, delegateField, false);
|
||||
field.store(fieldType, iv);
|
||||
|
||||
JetClass superClass = (JetClass) classDescriptorToDeclaration(bindingContext, superClassDescriptor);
|
||||
final CodegenContext delegateContext = context.intoClass(superClassDescriptor,
|
||||
new OwnerKind.DelegateKind(StackValue.field(fieldType, classname,
|
||||
delegateField, false),
|
||||
@@ -788,7 +787,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
MapTypeMode.IMPL)
|
||||
.getInternalName()),
|
||||
state);
|
||||
generateDelegates(superClass, delegateContext, field);
|
||||
generateDelegates(superClassDescriptor, delegateContext, field);
|
||||
}
|
||||
|
||||
private void lookupConstructorExpressionsInClosureIfPresent(final ConstructorContext constructorContext) {
|
||||
@@ -1208,18 +1207,17 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void generateDelegates(JetClass toClass, CodegenContext delegateContext, StackValue field) {
|
||||
protected void generateDelegates(ClassDescriptor toClass, CodegenContext delegateContext, StackValue field) {
|
||||
final FunctionCodegen functionCodegen = new FunctionCodegen(delegateContext, v, state);
|
||||
final PropertyCodegen propertyCodegen = new PropertyCodegen(delegateContext, v, functionCodegen, state);
|
||||
|
||||
ClassDescriptor classDescriptor = bindingContext.get(BindingContext.CLASS, toClass);
|
||||
for (DeclarationDescriptor declaration : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
|
||||
if (declaration instanceof CallableMemberDescriptor) {
|
||||
CallableMemberDescriptor callableMemberDescriptor = (CallableMemberDescriptor) declaration;
|
||||
if (callableMemberDescriptor.getKind() == CallableMemberDescriptor.Kind.DELEGATION) {
|
||||
Set<? extends CallableMemberDescriptor> overriddenDescriptors = callableMemberDescriptor.getOverriddenDescriptors();
|
||||
for (CallableMemberDescriptor overriddenDescriptor : overriddenDescriptors) {
|
||||
if (overriddenDescriptor.getContainingDeclaration() == classDescriptor) {
|
||||
if (overriddenDescriptor.getContainingDeclaration() == toClass) {
|
||||
if (declaration instanceof PropertyDescriptor) {
|
||||
propertyCodegen
|
||||
.genDelegate((PropertyDescriptor) declaration, (PropertyDescriptor) overriddenDescriptor, field);
|
||||
|
||||
Reference in New Issue
Block a user