Hi,
I'm a user of the gwt-jackson library and I've just found the following bug:
To fix it, I need to get access of the annotations on a default Java8 method interface:
public static interface InterfaceBean {
@JsonIgnore
default String getName(){
return "defaultName";
}
}
But tell me if I'm wrong, GWT doesn't provide this information!
I did setup a minimal demo project to explain the issue:
https://github.com/freddyboucher/gwt-java8-default-method-interfaceAs you see the
default `
getGender` method is not listed in neither
HasGender or
Person JClassTypepublic interface HasGender {
@Nonnull
default String getGender() {
return "male";
}
}
public class Person implements HasGender {
@Nonnull
public String getName() {
return "Paul";
}
}
public class CustomGenerator extends Generator {
@Override
public final String generate(TreeLogger logger, GeneratorContext context, String typeName) throws UnableToCompleteException {
JClassType genderType = context.getTypeOracle().findType(HasGender.class.getName());
assert genderType.getMethods().length == 0;
assert genderType.getInheritableMethods().length == 0;
assert genderType.getOverridableMethods().length == 0;
JClassType personType = context.getTypeOracle().findType(Person.class.getName());
assert Arrays.equals(new String[] { "getName" }, Arrays.stream(personType.getMethods()).map(JAbstractMethod::getName).toArray());
assert personType.getMethods()[0].isAnnotationPresent(Nonnull.class);
String[] common = { "equals", "finalize", "getClass", "getName", "hashCode", "toString" };
assert Arrays.equals(common, Arrays.stream(personType.getInheritableMethods()).map(JAbstractMethod::getName).toArray());
assert Arrays.equals(common, Arrays.stream(personType.getOverridableMethods()).map(JAbstractMethod::getName).toArray());
return null;
}
}