Account for error types equality

This commit is contained in:
Andrey Breslav
2013-06-11 14:03:46 +04:00
parent 9d2ea86a78
commit d4ee6bd781
@@ -149,6 +149,21 @@ public class DescriptorValidator {
} }
} }
private static <T> void assertEqualTypes(
DeclarationDescriptor descriptor,
DiagnosticCollector collector,
String name,
JetType expected,
JetType actual
) {
if (ErrorUtils.isErrorType(expected) && ErrorUtils.isErrorType(actual)) {
assertEquals(descriptor, collector, name, expected.toString(), actual.toString());
}
else if (!expected.equals(actual)) {
report(collector, descriptor, "Wrong " + name + ": " + actual + " must be " + expected);
}
}
private static void validateAccessor( private static void validateAccessor(
PropertyDescriptor descriptor, PropertyDescriptor descriptor,
DiagnosticCollector collector, DiagnosticCollector collector,
@@ -241,7 +256,7 @@ public class DescriptorValidator {
) { ) {
visitFunctionDescriptor(constructorDescriptor, collector); visitFunctionDescriptor(constructorDescriptor, collector);
assertEquals(constructorDescriptor, collector, assertEqualTypes(constructorDescriptor, collector,
"return type", "return type",
constructorDescriptor.getContainingDeclaration().getDefaultType(), constructorDescriptor.getContainingDeclaration().getDefaultType(),
constructorDescriptor.getReturnType()); constructorDescriptor.getReturnType());
@@ -264,14 +279,14 @@ public class DescriptorValidator {
PropertyGetterDescriptor getter = descriptor.getGetter(); PropertyGetterDescriptor getter = descriptor.getGetter();
if (getter != null) { if (getter != null) {
assertEquals(getter, collector, "getter return type", descriptor.getType(), getter.getReturnType()); assertEqualTypes(getter, collector, "getter return type", descriptor.getType(), getter.getReturnType());
validateAccessor(descriptor, collector, getter, "getter"); validateAccessor(descriptor, collector, getter, "getter");
} }
PropertySetterDescriptor setter = descriptor.getSetter(); PropertySetterDescriptor setter = descriptor.getSetter();
if (setter != null) { if (setter != null) {
assertEquals(setter, collector, "setter parameter count", 1, setter.getValueParameters().size()); assertEquals(setter, collector, "setter parameter count", 1, setter.getValueParameters().size());
assertEquals(setter, collector, "setter parameter type", descriptor.getType(), setter.getValueParameters().get(0).getType()); assertEqualTypes(setter, collector, "setter parameter type", descriptor.getType(), setter.getValueParameters().get(0).getType());
assertEquals(setter, collector, "corresponding property", descriptor, setter.getCorrespondingProperty()); assertEquals(setter, collector, "corresponding property", descriptor, setter.getCorrespondingProperty());
} }