[cai18n-dev] [GIT] Compiler assisted internalization library branch, master, updated. 57ed2b47cc45c6c50b3f20b6bc9f964a38776189

added by portage for gitosis-gentoo git-noreply at pixie.qos.ch
Thu Aug 27 21:20:40 CEST 2009


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Compiler assisted internalization library".

The branch, master has been updated
       via  57ed2b47cc45c6c50b3f20b6bc9f964a38776189 (commit)
      from  a0ec2890e80cdde734f81be242b5a23ff3cd147c (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=cai18n.git;a=commit;h=57ed2b47cc45c6c50b3f20b6bc9f964a38776189
http://github.com/ceki/cai18n/commit/57ed2b47cc45c6c50b3f20b6bc9f964a38776189

commit 57ed2b47cc45c6c50b3f20b6bc9f964a38776189
Author: Ceki Gulcu <ceki at qos.ch>
Date:   Thu Aug 27 21:18:29 2009 +0200

    A working version of the maven-plugin

diff --git a/cai18n-api/src/main/java/ch/qos/cai18n/util/AnnotationExtractor.java b/cai18n-api/src/main/java/ch/qos/cai18n/util/AnnotationExtractor.java
index fc051dd..e8bff49 100644
--- a/cai18n-api/src/main/java/ch/qos/cai18n/util/AnnotationExtractor.java
+++ b/cai18n-api/src/main/java/ch/qos/cai18n/util/AnnotationExtractor.java
@@ -42,10 +42,8 @@ public class AnnotationExtractor {
   }
 
   static public <E extends Enum<?>> String[] getLocaleNames(Class<E> enumClass) {
-    System.out.println("xx****enumClass="+enumClass.getName());
     LocaleNames localeNamesAnnotation = (LocaleNames) enumClass
         .getAnnotation(LocaleNames.class);
-    System.out.println("localeNamesAnnotation="+localeNamesAnnotation);
     if (localeNamesAnnotation == null) {
       return null;
     }
diff --git a/cai18n-api/src/main/java/ch/qos/cai18n/verifier/IMessageCodeVerifier.java b/cai18n-api/src/main/java/ch/qos/cai18n/verifier/IMessageCodeVerifier.java
new file mode 100644
index 0000000..7fa7309
--- /dev/null
+++ b/cai18n-api/src/main/java/ch/qos/cai18n/verifier/IMessageCodeVerifier.java
@@ -0,0 +1,63 @@
+package ch.qos.cai18n.verifier;
+
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * 
+ * @author Ceki G&uuml;lc&uuml;
+ * 
+ */
+public interface IMessageCodeVerifier {
+
+  // WARNING: The name of this class is referenced in String form
+  // to do class loader tricks. Do not change the name of this class
+  // without looking at the maven-plugin.
+
+  /**
+   * Get the of enum type that this verifier is related to to.
+   * 
+   * @return
+   */
+  public Class<? extends Enum<?>> getEnumType();
+
+  /**
+   * Get the name of enum type to this verifier is related to to.
+   * 
+   * @return
+   */
+  public String getEnumTypeAsStr();
+
+  /**
+   * Verify that the keys defined in the enumClass match those found in the
+   * resource bundle corresponding to a certain locale
+   * 
+   * @param locale
+   * @return
+   */
+  public List<Cai18nError> verify(Locale locale);
+
+  /**
+   * Same as {@link #verify(Locale)} except that the return type is
+   * List<String>.
+   * 
+   * @param locale
+   * @return
+   */
+  public List<String> typeIsolatedVerify(Locale locale);
+
+  /**
+   * Get the locales specified in the enumType (via annotations)
+   * 
+   * @return
+   */
+  public String[] getLocaleNames();
+
+  /**
+   * Get the name of the resource bundle specified in the enumType (via
+   * annotations)
+   * 
+   * @return
+   */
+  public String getResourceBundleName();
+}
\ No newline at end of file
diff --git a/cai18n-api/src/main/java/ch/qos/cai18n/verifier/MessageCodeVerifier.java b/cai18n-api/src/main/java/ch/qos/cai18n/verifier/MessageCodeVerifier.java
index d7907ff..3992b8f 100644
--- a/cai18n-api/src/main/java/ch/qos/cai18n/verifier/MessageCodeVerifier.java
+++ b/cai18n-api/src/main/java/ch/qos/cai18n/verifier/MessageCodeVerifier.java
@@ -37,45 +37,63 @@ import ch.qos.cai18n.verifier.Cai18nError.ErrorType;
  * 
  * @author Ceki Gulcu
  */
-public class MessageCodeVerifier {
-
-  final Class<? extends Enum<?>> enumClass;
-  final ClassLoader classLoader;
+public class MessageCodeVerifier implements IMessageCodeVerifier {
 
+  Class<? extends Enum<?>> enumType;
+  String enumTypeAsStr;
+  
   public MessageCodeVerifier(Class<? extends Enum<?>> enumClass) {
-    this(enumClass, MessageCodeVerifier.class.getClassLoader());
+    this.enumType = enumClass;
+    this.enumTypeAsStr = enumClass.getName();
+  }
+
+  @SuppressWarnings("unchecked")
+  public MessageCodeVerifier(String enumTypeAsStr) {
+    this.enumTypeAsStr = enumTypeAsStr;
+    String errMsg = "Failed to find enum class [" + enumTypeAsStr + "]";
+    try {
+      this.enumType = (Class<? extends Enum<?>>) Class.forName(enumTypeAsStr);
+    } catch (ClassNotFoundException e) {
+      throw new IllegalStateException(errMsg, e);
+    } catch (NoClassDefFoundError e) {
+      throw new IllegalStateException(errMsg, e);
+    }
   }
 
-  public MessageCodeVerifier(Class<? extends Enum<?>> enumClass,
-      ClassLoader classLoader) {
-    this.enumClass = enumClass;
-    this.classLoader = classLoader;
+  
+  /* (non-Javadoc)
+   * @see ch.qos.cai18n.verifier.IIMessageCodeVerifier#getEnumType()
+   */
+  public Class<? extends Enum<?>> getEnumType() {
+    return enumType;
+  }
+
+  /* (non-Javadoc)
+   * @see ch.qos.cai18n.verifier.IIMessageCodeVerifier#getEnumTypeAsStr()
+   */
+  public String getEnumTypeAsStr() {
+    return enumTypeAsStr;
   }
 
-  /**
-   * Verify that the keys defined in the enumClass match those found in the
-   * resource bundle corresponding to a certain locale
-   * 
-   * @param locale
-   * @return
+  /* (non-Javadoc)
+   * @see ch.qos.cai18n.verifier.IIMessageCodeVerifier#verify(java.util.Locale)
    */
   public List<Cai18nError> verify(Locale locale) {
     List<Cai18nError> errorList = new ArrayList<Cai18nError>();
 
     String resouceBundleName = AnnotationExtractor
-        .getResourceBundleName(enumClass);
+        .getResourceBundleName(enumType);
 
     if (resouceBundleName == null) {
       errorList.add(new Cai18nError(ErrorType.MISSING_RBN_ANNOTATION, "",
-          enumClass, locale, ""));
+          enumType, locale, ""));
       // no point in continuing
       return errorList;
     }
 
-    ResourceBundle rb = ResourceBundle.getBundle(resouceBundleName, locale,
-        classLoader);
+    ResourceBundle rb = ResourceBundle.getBundle(resouceBundleName, locale);
 
-    ErrorFactory errorFactory = new ErrorFactory(enumClass, locale,
+    ErrorFactory errorFactory = new ErrorFactory(enumType, locale,
         resouceBundleName);
 
     if (rb == null) {
@@ -87,7 +105,7 @@ public class MessageCodeVerifier {
       errorList.add(errorFactory.buildError(ErrorType.EMPTY_RB, ""));
     }
 
-    Enum<?>[] enumArray = enumClass.getEnumConstants();
+    Enum<?>[] enumArray = enumType.getEnumConstants();
     if (enumArray == null || enumArray.length == 0) {
       errorList.add(errorFactory.buildError(ErrorType.EMPTY_ENUM, ""));
     }
@@ -111,4 +129,29 @@ public class MessageCodeVerifier {
     return errorList;
   }
 
+  /* (non-Javadoc)
+   * @see ch.qos.cai18n.verifier.IIMessageCodeVerifier#typeIsolatedVerify(java.util.Locale)
+   */
+  public List<String> typeIsolatedVerify(Locale locale) {
+    List<Cai18nError> errorList = verify(locale);
+    List<String> strList = new ArrayList<String>();
+    for (Cai18nError error : errorList) {
+      strList.add(error.toString());
+    }
+    return strList;
+  }
+
+  /* (non-Javadoc)
+   * @see ch.qos.cai18n.verifier.IIMessageCodeVerifier#getLocaleNames()
+   */
+  public String[] getLocaleNames() {
+    String[] localeNameArray = AnnotationExtractor.getLocaleNames(enumType);
+    return localeNameArray;
+  }
+  
+  public String getResourceBundleName() {
+    String rbName = AnnotationExtractor.getResourceBundleName(enumType);
+    return rbName;
+  }
+
 }
diff --git a/cai18n-api/src/test/java/ch/qos/cai18n/sample/MessageCodeVerifierTest.java b/cai18n-api/src/test/java/ch/qos/cai18n/sample/MessageCodeVerifierTest.java
index 346f66a..d2e67ea 100644
--- a/cai18n-api/src/test/java/ch/qos/cai18n/sample/MessageCodeVerifierTest.java
+++ b/cai18n-api/src/test/java/ch/qos/cai18n/sample/MessageCodeVerifierTest.java
@@ -30,6 +30,7 @@ import java.util.Locale;
 import org.junit.Test;
 
 import ch.qos.cai18n.verifier.Cai18nError;
+import ch.qos.cai18n.verifier.IMessageCodeVerifier;
 import ch.qos.cai18n.verifier.MessageCodeVerifier;
 
 /**
@@ -41,14 +42,14 @@ public class MessageCodeVerifierTest {
   
   @Test
   public void smoke() {
-    MessageCodeVerifier miv = new MessageCodeVerifier(Colors.class);
+    IMessageCodeVerifier miv = new MessageCodeVerifier(Colors.class);
     List<Cai18nError> errorList = miv.verify(Locale.UK);
     assertEquals(0, errorList.size());
   }
   
   @Test
   public void withErrors_UK() {
-    MessageCodeVerifier miv = new MessageCodeVerifier(Countries.class);
+    IMessageCodeVerifier miv = new MessageCodeVerifier(Countries.class);
     List<Cai18nError> errorList = miv.verify(Locale.UK);
     assertEquals(2, errorList.size());
     assertEquals("CH", errorList.get(0).getCode());
@@ -58,7 +59,7 @@ public class MessageCodeVerifierTest {
   
   @Test
   public void withErrors_FR() {
-    MessageCodeVerifier miv = new MessageCodeVerifier(Countries.class);
+    IMessageCodeVerifier miv = new MessageCodeVerifier(Countries.class);
     List<Cai18nError> errorList = miv.verify(Locale.FRANCE);
     assertEquals(3, errorList.size());
     assertEquals("CH", errorList.get(0).getCode());
diff --git a/maven-cai18n-plugin-smoke/pom.xml b/maven-cai18n-plugin-smoke/pom.xml
index 45a1215..26f223f 100644
--- a/maven-cai18n-plugin-smoke/pom.xml
+++ b/maven-cai18n-plugin-smoke/pom.xml
@@ -18,7 +18,7 @@
 		<dependency>
 			<groupId>ch.qos.cai18n</groupId>
 			<artifactId>cai18n-api</artifactId>
-		</dependency>
+		</dependency>  
 	</dependencies>
 
 	<build>
@@ -32,7 +32,7 @@
 						<id>countries</id>
 						<phase>verify</phase>
 						<goals>
-							<goal>vv</goal>
+							<goal>check</goal>
 						</goals>
             <configuration>
               <enumTypes>
diff --git a/maven-cai18n-plugin/pom.xml b/maven-cai18n-plugin/pom.xml
index bcafd58..87f3d10 100644
--- a/maven-cai18n-plugin/pom.xml
+++ b/maven-cai18n-plugin/pom.xml
@@ -29,11 +29,41 @@
     </dependency>
 
     <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-artifact-manager</artifactId>
+      <version>2.0.4</version>
+    </dependency>
+
+    <dependency>
       <groupId>ch.qos.cai18n</groupId>
       <artifactId>cai18n-api</artifactId>      
     </dependency>
 
- 
+   <dependency>
+     <groupId>org.apache.maven</groupId>
+     <version>2.0.9</version>
+     <artifactId>maven-project</artifactId>
+   </dependency>
+
+
+   <dependency>
+      <groupId>org.codehaus.mojo</groupId>
+      <artifactId>exec-maven-plugin</artifactId>
+      <version>1.1</version>
+    </dependency>
+
+    <dependency>     
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-descriptor</artifactId>
+      <version>2.0.4</version>
+    </dependency>
+
+    <dependency>     
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-classworlds</artifactId>
+      <version>1.2-alpha-6</version>
+    </dependency>
+
     <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
diff --git a/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/ThisFirstClassLoader.java b/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/ThisFirstClassLoader.java
new file mode 100644
index 0000000..c7165c5
--- /dev/null
+++ b/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/ThisFirstClassLoader.java
@@ -0,0 +1,71 @@
+package ch.qos.cai18n;
+
+import java.net.URL;
+import java.net.URLClassLoader;
+
+/**
+ * An almost trivial no fuss implementation of a class loader following the
+ * child-first delegation model.
+ * 
+ * @author Ceki Gülcü
+ */
+public class ThisFirstClassLoader extends URLClassLoader {
+
+  public ThisFirstClassLoader(URL[] urls) {
+    super(urls);
+  }
+
+  public ThisFirstClassLoader(URL[] urls, ClassLoader parent) {
+    super(urls, parent);
+  }
+
+  public void addURL(URL url) {
+    super.addURL(url);
+  }
+
+  @Override
+  public Class<?> loadClass(String name) throws ClassNotFoundException {
+    return loadClass(name, false);
+  }
+
+  /**
+   * We override the parent-first behavior established by java.lang.Classloader.
+   * 
+   * The implementation is surprisingly straightforward.
+   */
+  protected Class<?> loadClass(String name, boolean resolve)
+      throws ClassNotFoundException {
+
+    if(name.equals("ch.qos.cai18n.verifier.IMessageCodeVerifier")) {
+      return super.loadClass(name, resolve);
+    }
+    
+    // First, check if the class has already been loaded
+    Class<?> c = findLoadedClass(name);
+
+    // if not loaded, search the local (child) resources
+    if (c == null) {
+      try {
+        c = findClass(name);
+      } catch (ClassNotFoundException cnfe) {
+        // ignore
+      }
+    }
+
+    // if we could not find it, delegate to parent
+    // Note that we don't attempt to catch any ClassNotFoundException
+    if (c == null) {
+      if (getParent() != null) {
+        c = getParent().loadClass(name);
+      } else {
+        c = getSystemClassLoader().loadClass(name);
+      }
+    }
+
+    if (resolve) {
+      resolveClass(c);
+    }
+
+    return c;
+  }
+}
diff --git a/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/VerifyMojo.java b/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/VerifyMojo.java
index 5839535..f913fd6 100644
--- a/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/VerifyMojo.java
+++ b/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/VerifyMojo.java
@@ -22,25 +22,27 @@
 package ch.qos.cai18n;
 
 import java.io.File;
+import java.lang.reflect.Constructor;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
+import java.util.Set;
 
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 
-import ch.qos.cai18n.util.AnnotationExtractor;
-import ch.qos.cai18n.verifier.Cai18nError;
-import ch.qos.cai18n.verifier.MessageCodeVerifier;
+import ch.qos.cai18n.verifier.IMessageCodeVerifier;
 
 /**
- * Verifies resources bundles
+ * Verifies resources bundles in various locales against an enumType
  * 
- * @goal vv
+ * @goal check
  * @phase verify
  * @requiresProject true
  */
@@ -48,8 +50,8 @@ public class VerifyMojo extends AbstractMojo {
 
   final static String MISSING_LOCALE = Cai18nConstants.CODE_URL_PREFIX
       + "#missingLocale";
-  final static String MISSING_ENUM_CLASS = Cai18nConstants.CODE_URL_PREFIX
-      + "#missingEnumClass";
+  final static String MISSING_ENUM_TYPES = Cai18nConstants.CODE_URL_PREFIX
+      + "#missingEnumType";
 
   /**
    * @parameter
@@ -66,28 +68,46 @@ public class VerifyMojo extends AbstractMojo {
    */
   private File outputDirectory;
 
-  ClassLoader classLoader;
+  // direct dependencies of this project
+  /**
+   * 
+   * @parameter expression="${project.artifacts}"
+   * @required
+   * @readonly
+   */
+  private Set<Artifact> projectArtifacts;
+
+  /**
+   * @parameter expression="${localRepository}"
+   * @required
+   * @readonly
+   * @since 1.0
+   */
+  private ArtifactRepository localRepository;
+
 
   public void execute() throws MojoExecutionException, MojoFailureException {
+
     if (enumTypes == null) {
       throw new MojoFailureException(
-          "<enumClass> must be specified. Please see " + MISSING_ENUM_CLASS);
+          "Missing <enumTypes> element. Please see " + MISSING_ENUM_TYPES);
     }
     for (String enumTypeAsStr : enumTypes) {
-      Class<? extends Enum<?>> enumClass = loadEnumClass(enumTypeAsStr);
-      System.out.println("***enumClass=" + enumClass.getName());
-      getLog().info("Checking codes for enum class [" + enumTypeAsStr + "]");
-      checkAllLocales(enumClass);
+      IMessageCodeVerifier imcv = getMessageCodeVerifierInstance(enumTypeAsStr);
+      getLog().info("Checking all resource bundles for enum type [" + enumTypeAsStr + "]");
+      checkAllLocales(imcv);
     }
   }
 
-  public void checkAllLocales(Class<? extends Enum<?>> enumClass)
-      throws MojoFailureException {
-    String enumClassAsStr = enumClass.getName();
+  public void checkAllLocales(IMessageCodeVerifier mcv)
+      throws MojoFailureException, MojoExecutionException {
+
+    String enumClassAsStr = mcv.getEnumTypeAsStr();
+
+    String[] localeNameArray = mcv.getLocaleNames();
 
-    String[] localeNameArray = AnnotationExtractor.getLocaleNames(enumClass);
     if (localeNameArray == null || localeNameArray.length == 0) {
-      String errMsg = "Missing @LocaleNames annotation in enum ["
+      String errMsg = "Missing @LocaleNames annotation in enum type ["
           + enumClassAsStr + "]";
       getLog().error(errMsg);
       throw new MojoFailureException(errMsg);
@@ -96,10 +116,9 @@ public class VerifyMojo extends AbstractMojo {
     boolean failure = false;
     for (String localeName : localeNameArray) {
       Locale locale = new Locale(localeName);
-      List<Cai18nError> errorList = check(enumClass, locale);
+      List<String> errorList = mcv.typeIsolatedVerify(locale);
       if (errorList.size() == 0) {
-        String resouceBundleName = AnnotationExtractor
-            .getResourceBundleName(enumClass);
+        String resouceBundleName = mcv.getResourceBundleName();
         getLog().info(
             "SUCCESSFUL verification for resource bundle [" + resouceBundleName
                 + "] for locale [" + locale + "]");
@@ -108,8 +127,8 @@ public class VerifyMojo extends AbstractMojo {
         getLog().error(
             "FAILURE during verification of resource bundle for locale ["
                 + locale + "] enum class [" + enumClassAsStr + "]");
-        for (Cai18nError s : errorList) {
-          getLog().error(s.toString());
+        for (String s : errorList) {
+          getLog().error(s);
         }
       }
     }
@@ -119,40 +138,51 @@ public class VerifyMojo extends AbstractMojo {
     }
   }
 
-  public List<Cai18nError> check(Class<? extends Enum<?>> enumClass,
-      Locale locale) throws MojoFailureException {
-
-    MessageCodeVerifier mcv = new MessageCodeVerifier(enumClass,
-        getClassLoader());
-    List<Cai18nError> errorList = mcv.verify(locale);
-    return errorList;
-  }
-
-  @SuppressWarnings("unchecked")
-  Class<? extends Enum<?>> loadEnumClass(String enumClassAsStr)
+  IMessageCodeVerifier getMessageCodeVerifierInstance(String enumClassAsStr)
       throws MojoExecutionException {
-    String errMsg = "Failed to find enum class [" + enumClassAsStr + "]";
+    String errMsg = "Failed to instantiate MessageCodeVerifier class";
     try {
-      return (Class<? extends Enum<?>>) Class.forName(enumClassAsStr, true,
-          getClassLoader());
+
+      URLClassLoader cl = (URLClassLoader) buildClassLoader();
+      Class<?> cla = Class.forName(
+          "ch.qos.cai18n.verifier.MessageCodeVerifier", true, cl);
+
+      
+      Constructor<?> cons = cla.getConstructor(String.class);
+      IMessageCodeVerifier imcv = (IMessageCodeVerifier) cons
+          .newInstance(enumClassAsStr);
+      return imcv;
     } catch (ClassNotFoundException e) {
       throw new MojoExecutionException(errMsg, e);
     } catch (NoClassDefFoundError e) {
       throw new MojoExecutionException(errMsg, e);
+    } catch (Exception e) {
+      throw new MojoExecutionException(errMsg, e);
     }
   }
 
-  ClassLoader getClassLoader() {
-    if (classLoader == null) {
-      classLoader = buildClassLoader();
-    }
-    return classLoader;
-  }
-
   ClassLoader buildClassLoader() {
     ArrayList<URL> classpathURLArray = new ArrayList<URL>();
     classpathURLArray.add(toURL(outputDirectory));
-    return new URLClassLoader(classpathURLArray.toArray(new URL[] {}));
+    classpathURLArray.addAll(getDirectDependencies());
+    ClassLoader parentCL = this.getClass().getClassLoader();
+    return new ThisFirstClassLoader(classpathURLArray.toArray(new URL[] {}), parentCL);
+  }
+
+  List<URL> getDirectDependencies() {
+    ArrayList<URL> urlList = new ArrayList<URL>();
+    for (Artifact a : projectArtifacts) {
+      // localRepository.getUrl() returns a bogus URL
+      String pathOfArtifact = localRepository.getBasedir() + "/"
+          + localRepository.pathOf(a);
+      try {
+        URL url = new URL("file:/" + pathOfArtifact);
+        urlList.add(url);
+      } catch (MalformedURLException e) {
+        e.printStackTrace();
+      }
+    }
+    return urlList;
   }
 
   URL toURL(File file) {

-----------------------------------------------------------------------

Summary of changes:
 .../ch/qos/cai18n/util/AnnotationExtractor.java    |    2 -
 .../qos/cai18n/verifier/IMessageCodeVerifier.java  |   63 ++++++++++
 .../qos/cai18n/verifier/MessageCodeVerifier.java   |   85 +++++++++++----
 .../qos/cai18n/sample/MessageCodeVerifierTest.java |    7 +-
 maven-cai18n-plugin-smoke/pom.xml                  |    4 +-
 maven-cai18n-plugin/pom.xml                        |   32 +++++-
 .../java/ch/qos/cai18n/ThisFirstClassLoader.java   |   71 ++++++++++++
 .../src/main/java/ch/qos/cai18n/VerifyMojo.java    |  120 ++++++++++++--------
 8 files changed, 310 insertions(+), 74 deletions(-)
 create mode 100644 cai18n-api/src/main/java/ch/qos/cai18n/verifier/IMessageCodeVerifier.java
 create mode 100644 maven-cai18n-plugin/src/main/java/ch/qos/cai18n/ThisFirstClassLoader.java


hooks/post-receive
-- 
Compiler assisted internalization library



More information about the cal10n-dev mailing list