* annotations
*/
public AnnotationsResource(TreeLogger logger, JClassType clazz,
GwtLocale locale, boolean isConstants) throws AnnotationsError {
super(locale);
KeyGenerator keyGenerator = getKeyGenerator(clazz);
map = new HashMap<String, MethodEntry>();
setPath(clazz.getQualifiedSourceName());
String defLocaleValue = null;
// If the class has an embedded locale in it, use that for the default
String className = clazz.getSimpleSourceName();
int underscore = className.indexOf('_');
if (underscore >= 0) {
defLocaleValue = className.substring(underscore + 1);
}
// If there is an annotation declaring the default locale, use that
DefaultLocale defLocaleAnnot = getClassAnnotation(clazz,
DefaultLocale.class);
if (defLocaleAnnot != null) {
defLocaleValue = defLocaleAnnot.value();
}
GwtLocale defLocale = LocaleUtils.getLocaleFactory().fromString(
defLocaleValue);
if (!locale.isDefault() && !locale.equals(defLocale)) {
logger.log(TreeLogger.WARN, "Default locale " + defLocale + " on "
+ clazz.getQualifiedSourceName() + " doesn't match " + locale);
return;
}
matchLocale = defLocale;
for (JMethod method : clazz.getMethods()) {
String meaningString = null;
Meaning meaning = method.getAnnotation(Meaning.class);
if (meaning != null) {
meaningString = meaning.value();
}
String textString = getTextString(method, map, isConstants);
if (textString == null) {
// ignore ones without some value annotation
continue;
}
String key = null;
Key keyAnnot = method.getAnnotation(Key.class);
if (keyAnnot != null) {
key = keyAnnot.value();
} else {
Message msg = new KeyGenMessage(method);
key = keyGenerator.generateKey(msg);
if (key == null) {
throw new AnnotationsError("Could not compute key for "
+ method.getEnclosingType().getQualifiedSourceName() + "."
+ method.getName() + " using " + keyGenerator);
}