Skip to content
This repository has been archived by the owner on Jun 9, 2020. It is now read-only.

Commit

Permalink
added CAL10NAnnotationProcessor to META-INF/services/javax.annotation…
Browse files Browse the repository at this point in the history
….processing.Processor
  • Loading branch information
ceki committed Apr 12, 2013
1 parent 0025d64 commit de67e6b
Show file tree
Hide file tree
Showing 25 changed files with 346 additions and 195 deletions.
12 changes: 10 additions & 2 deletions cal10n-api/pom.xml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

Expand All @@ -12,13 +12,21 @@

<artifactId>cal10n-api</artifactId>
<packaging>jar</packaging>
<name>Compiler assisted localization library (CAL10N) - API</name>
<name>Compiler assisted localization library (CAL10N) - API</name>

<dependencies>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<compilerArgument>-proc:none</compilerArgument>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
Expand Down
6 changes: 3 additions & 3 deletions cal10n-api/src/main/java/ch/qos/cal10n/CAL10NConstants.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ public class CAL10NConstants {
final public static String MISSING_BN_ANNOTATION_URL = CAL10NConstants.CODE_URL_PREFIX
+ "#missingBaseNameAnnotation";

final public static String MISSING_LD_ANNOTATION_URL = CAL10NConstants.CODE_URL_PREFIX
final public static String MISSING_LOCALE_DATA_ANNOTATION_URL = CAL10NConstants.CODE_URL_PREFIX
+ "#missingLDAnnotation";
final public static String MISSING_LD_ANNOTATION_MESSAGE = "Missing @LocaleData annotation in enum type [{0}]. Please see "
+ MISSING_LD_ANNOTATION_URL;
final public static String MISSING_LOCALE_DATA_ANNOTATION_MESSAGE = "Missing @LocaleData annotation in enum type [{0}]. Please see "
+ MISSING_LOCALE_DATA_ANNOTATION_URL;

final public static String MISSING_ENUM_TYPES_URL = CAL10NConstants.CODE_URL_PREFIX
+ "#missingEnumType";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ public MessageConveyor(Locale locale) {
public <E extends Enum<?>> String getMessage(E key, Object... args)
throws MessageConveyorException {

Class<? extends Enum> declaringClass = key.getDeclaringClass();
Class<? extends Enum<?>> declaringClass = key.getDeclaringClass();

String declaringClassName = declaringClass.getName();
CAL10NResourceBundle rb = cache.get(declaringClassName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@
*
* @author Ceki G&uuml;lc&uuml;
*/
public class AnnotationExtractor<E extends Enum<?>> extends AnnotationExtractorBase {
public class AnnotationExtractor extends AnnotationExtractorBase {

final Class<E> enumClass;
final Class<?> enumClass;

public AnnotationExtractor(Class<E> enumClass) {
public AnnotationExtractor(Class<?> enumClass) {
this.enumClass = enumClass;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
package ch.qos.cal10n.verifier;

import java.util.Locale;
import static ch.qos.cal10n.CAL10NConstants.MISSING_LOCALE_DATA_ANNOTATION_URL;

/**
*
Expand All @@ -30,12 +31,11 @@
*
* @author Ceki G&uuml;lc&uuml;
*/
public class Cal10nError {
public class CAL10NError {

enum ErrorType {
// MISSING_LOCALE_NAMES_ANNOTATION

MISSING_BN_ANNOTATION, FAILED_TO_FIND_RB, EMPTY_RB, EMPTY_ENUM, ABSENT_IN_RB, ABSENT_IN_ENUM;
MISSING_BN_ANNOTATION, MISSING_LOCALE_DATA_ANNOTATION,
FAILED_TO_FIND_RB, EMPTY_RB, EMPTY_ENUM, ABSENT_IN_RB, ABSENT_IN_ENUM;
}

final ErrorType errorType;
Expand All @@ -44,8 +44,8 @@ enum ErrorType {
final String enumClassName;
final String baseName;

Cal10nError(ErrorType errorType, String key, String enumClassName,
Locale locale, String baseName) {
CAL10NError(ErrorType errorType, String key, String enumClassName,
Locale locale, String baseName) {
this.errorType = errorType;
this.key = key;
this.enumClassName = enumClassName;
Expand All @@ -68,9 +68,13 @@ public Locale getLocale() {
@Override
public String toString() {
switch (errorType) {

case MISSING_BN_ANNOTATION:
return "Missing @BaseName annotation in enum type ["
+ enumClassName + "]";
case MISSING_LOCALE_DATA_ANNOTATION:
return "Missing or empty @LocaleData annotation in enum type ["
+ enumClassName + "]. See "+MISSING_LOCALE_DATA_ANNOTATION_URL;
case FAILED_TO_FIND_RB:
return "Failed to locate resource bundle [" + baseName
+ "] for locale [" + locale + "] for enum type [" + enumClassName
Expand All @@ -88,6 +92,7 @@ public String toString() {
return "Key [" + key + "] present in enum type [" + enumClassName
+ "] but absent in resource bundle named [" + baseName
+ "] for locale [" + locale + "]";

default:
throw new IllegalStateException("Impossible to reach here");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@

import java.util.Locale;

import ch.qos.cal10n.verifier.Cal10nError.ErrorType;
import ch.qos.cal10n.verifier.CAL10NError.ErrorType;

/**
* Simplifies the creation of {@link Cal10nError} instances.
* Simplifies the creation of {@link CAL10NError} instances.
*
* @author Ceki G&uuml;lc&uuml;
*
Expand All @@ -44,8 +44,8 @@ public ErrorFactory(String enumClassName, Locale locale,
this.resourceBundleName = resourceBundleName;
}

Cal10nError buildError(ErrorType errorType, String key) {
return new Cal10nError(errorType, key, enumClassName, locale,
CAL10NError buildError(ErrorType errorType, String key) {
return new CAL10NError(errorType, key, enumClassName, locale,
resourceBundleName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ public interface IMessageKeyVerifier {
* @param locale
* @return
*/
public List<Cal10nError> verify(Locale locale);
public List<CAL10NError> verify(Locale locale);

/**
* Verify that the keys defined in the enumClass match those found in the
Expand All @@ -50,7 +50,7 @@ public interface IMessageKeyVerifier {
*
* @return
*/
public List<Cal10nError> verifyAllLocales();
public List<CAL10NError> verifyAllLocales();

/**
* Same as {@link #verify(Locale)} except that the return type is
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@

import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

/**
* Given an enum class, verify that the resource bundles corresponding to a
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package ch.qos.cal10n.verifier;

import ch.qos.cal10n.CAL10NConstants;
import ch.qos.cal10n.util.CAL10NResourceBundleFinder;
import ch.qos.cal10n.util.IAnnotationExtractor;
import ch.qos.cal10n.util.MiscUtil;
import static ch.qos.cal10n.verifier.CAL10NError.ErrorType.MISSING_LOCALE_DATA_ANNOTATION;
import static ch.qos.cal10n.verifier.CAL10NError.ErrorType.MISSING_BN_ANNOTATION;


import java.text.MessageFormat;
import java.util.*;

/**
Expand Down Expand Up @@ -49,15 +50,14 @@ public String getBaseName() {
return rbName;
}

public List<Cal10nError> verify(Locale locale) {
List<Cal10nError> errorList = new ArrayList<Cal10nError>();
public List<CAL10NError> verify(Locale locale) {
List<CAL10NError> errorList = new ArrayList<CAL10NError>();

String baseName = getBaseName();

if (baseName == null) {
errorList.add(new Cal10nError(Cal10nError.ErrorType.MISSING_BN_ANNOTATION, "",
errorList.add(new CAL10NError(MISSING_BN_ANNOTATION, "",
enumTypeAsStr, locale, ""));
// no point in continuing
return errorList;
}

Expand All @@ -69,15 +69,14 @@ public List<Cal10nError> verify(Locale locale) {
ErrorFactory errorFactory = new ErrorFactory(enumTypeAsStr, locale, baseName);

if (rb == null) {
errorList.add(errorFactory.buildError(Cal10nError.ErrorType.FAILED_TO_FIND_RB, ""));
// no point in continuing
errorList.add(errorFactory.buildError(CAL10NError.ErrorType.FAILED_TO_FIND_RB, ""));
return errorList;
}

Set<String> rbKeySet = buildKeySetFromEnumeration(rb.getKeys());

if (rbKeySet.size() == 0) {
errorList.add(errorFactory.buildError(Cal10nError.ErrorType.EMPTY_RB, ""));
errorList.add(errorFactory.buildError(CAL10NError.ErrorType.EMPTY_RB, ""));
}

if (errorList.size() != 0) {
Expand All @@ -86,27 +85,27 @@ public List<Cal10nError> verify(Locale locale) {

List<String> enumKeys = extractKeysInEnum();
if (enumKeys.size() == 0) {
errorList.add(errorFactory.buildError(Cal10nError.ErrorType.EMPTY_ENUM, ""));
errorList.add(errorFactory.buildError(CAL10NError.ErrorType.EMPTY_ENUM, ""));
}

for (String enumKey : enumKeys) {
if (rbKeySet.contains(enumKey)) {
rbKeySet.remove(enumKey);
} else {
errorList.add(errorFactory.buildError(Cal10nError.ErrorType.ABSENT_IN_RB, enumKey));
errorList.add(errorFactory.buildError(CAL10NError.ErrorType.ABSENT_IN_RB, enumKey));
}
}

for (String rbKey : rbKeySet) {
errorList.add(errorFactory.buildError(Cal10nError.ErrorType.ABSENT_IN_ENUM, rbKey));
errorList.add(errorFactory.buildError(CAL10NError.ErrorType.ABSENT_IN_ENUM, rbKey));
}
return errorList;
}

public List<String> typeIsolatedVerify(Locale locale) {
List<Cal10nError> errorList = verify(locale);
List<CAL10NError> errorList = verify(locale);
List<String> strList = new ArrayList<String>();
for (Cal10nError error : errorList) {
for (CAL10NError error : errorList) {
strList.add(error.toString());
}
return strList;
Expand All @@ -123,18 +122,21 @@ protected Set<String> buildKeySetFromEnumeration(Enumeration<String> e) {
/**
* Verify all declared locales in one step.
*/
public List<Cal10nError> verifyAllLocales() {
List<Cal10nError> errorList = new ArrayList<Cal10nError>();
public List<CAL10NError> verifyAllLocales() {
List<CAL10NError> errorList = new ArrayList<CAL10NError>();

String[] localeNameArray = getLocaleNames();

ErrorFactory errorFactory = new ErrorFactory(enumTypeAsStr, null, getBaseName());


if (localeNameArray == null || localeNameArray.length == 0) {
String errMsg = MessageFormat.format(CAL10NConstants.MISSING_LD_ANNOTATION_MESSAGE, enumTypeAsStr);
throw new IllegalStateException(errMsg);
errorList.add(errorFactory.buildError(MISSING_LOCALE_DATA_ANNOTATION, "*"));
return errorList;
}
for (String localeName : localeNameArray) {
Locale locale = MiscUtil.toLocale(localeName);
List<Cal10nError> tmpList = verify(locale);
List<CAL10NError> tmpList = verify(locale);
errorList.addAll(tmpList);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package ch.qos.cal10n.verifier.processor;

import ch.qos.cal10n.BaseName;
import ch.qos.cal10n.verifier.Cal10nError;
import ch.qos.cal10n.verifier.CAL10NError;

import javax.annotation.processing.*;
import javax.lang.model.SourceVersion;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.util.ElementFilter;
import javax.lang.model.util.Types;
import javax.tools.Diagnostic;
import java.util.List;
import java.util.Set;
Expand All @@ -22,7 +21,7 @@ public class CAL10NAnnotationProcessor extends AbstractProcessor {
@Override
public void init(ProcessingEnvironment env) {
super.init(env);
note("CAL10NAnnotationProcessor initialized");
//note("CAL10NAnnotationProcessor initialized");
baseNameTypeElement = getType("ch.qos.cal10n.BaseName");
}

Expand All @@ -40,10 +39,10 @@ private void verify(TypeElement typeElementForEnum) {
TypeElementMessageKeyVerifier modelMessageKeyVerifier = new TypeElementMessageKeyVerifier(typeElementForEnum);

BaseName baseNameAnnotation = typeElementForEnum.getAnnotation(BaseName.class);
note("performing verification for basename [" + baseNameAnnotation.value() +"]");
List<Cal10nError> errorList = modelMessageKeyVerifier.verifyAllLocales();
for(Cal10nError error: errorList) {
error(error.toString());
//note("performing verification for basename [" + baseNameAnnotation.value() +"]");
List<CAL10NError> errorList = modelMessageKeyVerifier.verifyAllLocales();
for(CAL10NError error: errorList) {
error(error.toString(), typeElementForEnum);
}


Expand All @@ -53,10 +52,6 @@ private TypeElement getType(String className) {
return processingEnv.getElementUtils().getTypeElement(className);
}

private Types typeUtils() {
return processingEnv.getTypeUtils();
}

void note(String s) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, s);
}
Expand All @@ -65,8 +60,8 @@ void warn(String s) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.WARNING, s);
}

void error(String s) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, s);
void error(String s, Element element) {
processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, s, element);
}

}
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
package ch.qos.cal10n.verifier.processor;

import ch.qos.cal10n.BaseName;
import ch.qos.cal10n.verifier.MessageKeyVerifierBase;

import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.util.ElementFilter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

/**
* Given an TypeElement representing an enum class implements IMessageKeyVerifier.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ch.qos.cal10n.verifier.processor.CAL10NAnnotationProcessor
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
public class AnnotationExtractorTest {

AnnotationExtractor annotationExtractor = new AnnotationExtractor(Fruit.class);

@Test
public void resourceBundleName() {
String result = annotationExtractor.getBaseName();
Expand Down
Loading

0 comments on commit de67e6b

Please sign in to comment.