@Override public MetaField getField(final String name) { JClassType type = getEnclosedMetaObject().isClassOrInterface(); if (type == null) { if ("length".equals(name) && getEnclosedMetaObject().isArray() != null) { return new MetaField.ArrayLengthMetaField(this); } return null; } JField field = type.findField(name); while ((field == null || (field != null && !field.isPublic())) && (type = type.getSuperclass()) != null && !type.getQualifiedSourceName().equals("java.lang.Object")) { field = type.findField(name); for (final JClassType interfaceType : type.getImplementedInterfaces()) { field = interfaceType.findField(name); } } if (field == null) { throw new RuntimeException("no such field: " + name + " in class: " + this); } return new GWTField(oracle, field); }
/** * @param dataClass * @return */ private String[] extractIdentifiers(JClassType dataClass) { List<String> ids = new ArrayList<String>(); JField[] fields = JClassUtils.getDeclaredFields(dataClass); for (JField field : fields) { if (field.getAnnotation(DataObjectIdentifier.class) != null) { if (field.isPublic()) { ids.add(field.getName()); } else { ids.add(JClassUtils.getGetterMethod(field.getName(), dataClass) + "()"); } } } return ids.toArray(new String[ids.size()]); }