do not generate delegates when the class already has such method either declared or delegated (report an ambiguity in this case)

Merge conflict resolved by committer
This commit is contained in:
Kirill Berezin
2012-08-26 18:28:48 +04:00
committed by Andrey Breslav
parent 10bdc02409
commit 1061e1ef69
5 changed files with 3310 additions and 3234 deletions
@@ -32,6 +32,8 @@ import org.jetbrains.jet.lang.types.TypeUtils;
import java.util.Collection;
import java.util.Collections;
import static org.jetbrains.jet.lang.diagnostics.Errors.MANY_IMPL_MEMBER_NOT_IMPLEMENTED;
/**
* @author abreslav
*/
@@ -60,7 +62,18 @@ public class DelegationResolver {
});
Collection<CallableMemberDescriptor> generatedDescriptors = generateDelegatedMembers(classDescriptor, descriptorsToDelegate);
outer:
for (CallableMemberDescriptor descriptor : generatedDescriptors) {
for (CallableMemberDescriptor existingDescriptor : classDescriptor.getAllCallableMembers()) {
if (OverridingUtil.isOverridableBy(existingDescriptor, descriptor).getResult() == OverridingUtil.OverrideCompatibilityInfo.Result.OVERRIDABLE) {
if (existingDescriptor.getKind() == CallableMemberDescriptor.Kind.DELEGATION) {
//trying to delegate to many traits with the same methods
trace.report(MANY_IMPL_MEMBER_NOT_IMPLEMENTED.on(jetClass.getNameIdentifier(), jetClass, existingDescriptor));
}
continue outer;
}
}
if (descriptor instanceof PropertyDescriptor) {
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
classDescriptor.getBuilder().addPropertyDescriptor(propertyDescriptor);