[hibernate-commits] Hibernate SVN: r17816 - in core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr: metadata and 1 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Oct 21 20:59:55 EDT 2009


Author: steve.ebersole at jboss.com
Date: 2009-10-21 20:59:53 -0400 (Wed, 21 Oct 2009)
New Revision: 17816

Added:
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarDelegate.java
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarFileMetadata.java
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarMetadata.java
Removed:
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/Grammar.java
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarFile.java
Modified:
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrPlugin.java
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrSourceVirtualDirectory.java
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrSourceVirtualDirectoryImpl.java
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrTask.java
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/MetadataExtracter.java
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/XRef.java
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/plan/GenerationPlan.java
   core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/plan/GenerationPlanBuilder.java
Log:
cleaned up javadocs, reorganized code a bit

Modified: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrPlugin.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrPlugin.java	2009-10-21 22:01:02 UTC (rev 17815)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrPlugin.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -50,7 +50,9 @@
 public class AntlrPlugin implements Plugin {
 	public static final String ANTLR_CONFIGURATION_NAME = "antlr";
 
-
+	/**
+	 * {@inheritDoc}
+	 */
     public void use(final Project project, ProjectPluginsContainer projectPluginsHandler) {
         projectPluginsHandler.usePlugin( JavaPlugin.class, project );
 

Modified: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrSourceVirtualDirectory.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrSourceVirtualDirectory.java	2009-10-21 22:01:02 UTC (rev 17815)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrSourceVirtualDirectory.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -28,7 +28,10 @@
 import groovy.lang.Closure;
 
 /**
- * Virtual directory mapping handler for 'antlr'.
+ * Contract for a Gradle "convention object" that acts as a handler for what I call a virtual directory mapping,
+ * injecting a virtual directory named 'antlr' into the project's various
+ * {@link org.gradle.api.tasks.SourceSet source sets}.  Its implementation gets pushed onto the
+ * {@link org.gradle.api.internal.DynamicObjectAware} portion of the source set under the name 'antlr'.
  *
  * @author Steve Ebersole
  */

Modified: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrSourceVirtualDirectoryImpl.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrSourceVirtualDirectoryImpl.java	2009-10-21 22:01:02 UTC (rev 17815)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrSourceVirtualDirectoryImpl.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -33,9 +33,7 @@
 import groovy.lang.Closure;
 
 /**
- * Acts as a delegate to the {@link org.gradle.api.internal.DynamicObjectAware} portion of
- * Gradle's {@link org.gradle.api.tasks.SourceSet} in order to add Antlr-relate directory
- * mapping to the source sets.
+ * The implementation of the {@link AntlrSourceVirtualDirectory} contract.
  *
  * @author Steve Ebersole
  */

Modified: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrTask.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrTask.java	2009-10-21 22:01:02 UTC (rev 17815)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/AntlrTask.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -39,6 +39,13 @@
 
 /**
  * Gradle task for executing Antlr generations.  Wrapper around the Ant {@link ANTLR} task.
+ * <p/>
+ * Most properties here are self-evident, but I wanted to highlight one in particular:
+ * {@link #setAntlrClasspath} is used to define the classpath that should be passed along to the
+ * Ant {@link ANTLR} task as its classpath.  That is the classpath it uses to perform generation
+ * execution.  This <b>should<b> really only require the antlr jar.  In {@link AntlrPlugin}
+ * usage, this would happen simply by adding your antlr jar into the 'antlr' dependency configuration
+ * created and exposed by the {@link AntlrPlugin} itself.
  *
  * @author Steve Ebersole
  */

Deleted: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/Grammar.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/Grammar.java	2009-10-21 22:01:02 UTC (rev 17815)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/Grammar.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -1,100 +0,0 @@
-/*
- * Hibernate, Relational Persistence for Idiomatic Java
- *
- * Copyright (c) 2009 by Red Hat Inc and/or its affiliates or by
- * third-party contributors as indicated by either @author tags or express
- * copyright attribution statements applied by the authors.  All
- * third-party contributions are distributed under license by Red Hat Inc.
- *
- * This copyrighted material is made available to anyone wishing to use, modify,
- * copy, or redistribute it subject to the terms and conditions of the GNU
- * Lesser General Public License, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this distribution; if not, write to:
- * Free Software Foundation, Inc.
- * 51 Franklin Street, Fifth Floor
- * Boston, MA  02110-1301  USA\
- */
-package org.gradle.plugin.antlr.metadata;
-
-import java.io.File;
-
-/**
- * Models a grammar defined within an Antlr grammar file.
- *
- * @author Steve Ebersole
- */
-public class Grammar {
-	private final GrammarFile grammarFile;
-	private String className;
-    private String superGrammarName;
-	private String importVocab;
-	private String exportVocab;
-
-	public Grammar(GrammarFile grammarFile) {
-		this.grammarFile = grammarFile;
-		grammarFile.addGrammar( this );
-	}
-
-	public GrammarFile getGrammarFile() {
-		return grammarFile;
-	}
-
-	public String getClassName() {
-		return className;
-	}
-
-	public void setClassName(String className) {
-		this.className = className;
-	}
-
-	public String getSuperGrammarName() {
-		return superGrammarName;
-	}
-
-	public void setSuperGrammarName(String superGrammarName) {
-		this.superGrammarName = superGrammarName;
-	}
-
-	public String getImportVocab() {
-		return importVocab;
-	}
-
-	public void setImportVocab(String importVocab) {
-		this.importVocab = importVocab;
-	}
-
-	public String getExportVocab() {
-		return exportVocab;
-	}
-
-	public void setExportVocab(String exportVocab) {
-		this.exportVocab = exportVocab;
-	}
-
-	public String getPackageName() {
-		return getGrammarFile().getPackageName();
-	}
-
-	public String determineGeneratedParserPath() {
-		if ( isEmpty( getPackageName() ) ) {
-			return getClassName() + ".java";
-		}
-		else {
-			return getPackageName().replace( '.', File.separatorChar )
-					+ File.separatorChar
-					+ getClassName()
-					+ ".java";
-		}
-	}
-
-	private boolean isEmpty(String packageName) {
-		return packageName == null || packageName.trim().length() == 0;
-	}
-}

Added: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarDelegate.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarDelegate.java	                        (rev 0)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarDelegate.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -0,0 +1,172 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2009 by Red Hat Inc and/or its affiliates or by
+ * third-party contributors as indicated by either @author tags or express
+ * copyright attribution statements applied by the authors.  All
+ * third-party contributions are distributed under license by Red Hat Inc.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA\
+ */
+package org.gradle.plugin.antlr.metadata;
+
+import java.lang.reflect.Method;
+import java.util.Enumeration;
+import java.util.ArrayList;
+import java.util.List;
+
+import antlr.collections.impl.IndexedVector;
+import antlr.preprocessor.GrammarFile;
+
+/**
+ * Antlr defines its {@link antlr.preprocessor.Grammar} class as package-protected for some unfortunate reason.
+ * So this class acts as a delegate to the Antlr {@link antlr.preprocessor.Grammar} class, hiding all the
+ * ugly necessary reflection code.
+ *
+ * @author Steve Ebersole
+ */
+public class GrammarDelegate {
+	public static List<GrammarDelegate> extractGrammarDelegates(GrammarFile antlrGrammarFile) {
+		List<GrammarDelegate> grammarDelegates = new ArrayList<GrammarDelegate>();
+		Enumeration grammarFileGramars = antlrGrammarFile.getGrammars().elements();
+		while ( grammarFileGramars.hasMoreElements() ) {
+			grammarDelegates.add( new GrammarDelegate( grammarFileGramars.nextElement() ) );
+		}
+		return grammarDelegates;
+	}
+
+	private final String className;
+	private final String importVocab;
+	private final String exportVocab;
+	private final GrammarDelegate superGrammarDelegate;
+
+	public GrammarDelegate(Object antlrGrammarMetadata) {
+		try {
+			final Method getNameMethod = antlrGrammarClass.getDeclaredMethod( "getName", NO_ARG_SIGNATURE );
+			getNameMethod.setAccessible( true );
+			this.className = ( String ) getNameMethod.invoke( antlrGrammarMetadata, NO_ARGS );
+
+			final Method getSuperGrammarMethod = antlrGrammarClass.getMethod( "getSuperGrammar", NO_ARG_SIGNATURE );
+			getSuperGrammarMethod.setAccessible( true );
+			final Object antlrSuperGrammarGrammarMetadata = getSuperGrammarMethod.invoke( antlrGrammarMetadata, NO_ARGS );
+			this.superGrammarDelegate = antlrSuperGrammarGrammarMetadata == null
+					? null
+					: new GrammarDelegate( antlrSuperGrammarGrammarMetadata );
+
+			Method getOptionsMethod = antlrGrammarClass.getMethod( "getOptions", NO_ARG_SIGNATURE );
+			getOptionsMethod.setAccessible( true );
+			IndexedVector options = ( IndexedVector ) getOptionsMethod.invoke( antlrGrammarMetadata, NO_ARGS );
+
+			Method getRHSMethod = antlrOptionClass.getMethod( "getRHS", NO_ARG_SIGNATURE );
+			getRHSMethod.setAccessible( true );
+
+			final Object importVocabOption = options == null
+					? null
+					: options.getElement( "importVocab" );
+			this.importVocab = importVocabOption == null
+					? null
+					: vocabName( (String) getRHSMethod.invoke( importVocabOption, NO_ARGS ) );
+
+			final Object exportVocabOption = options == null
+					? null
+					: options.getElement( "exportVocab" );
+			this.exportVocab = exportVocabOption == null
+					? null
+					: vocabName( (String) getRHSMethod.invoke( exportVocabOption, NO_ARGS ) );
+		}
+		catch ( Throwable t ) {
+			throw new IllegalStateException( "Error accessing  Antlr grammar metadata", t );
+		}
+	}
+
+	/**
+	 * Retrieves the unqualified name of the lexer/parser class.
+	 *
+	 * @return The unqualified lexer/parser class name.
+	 */
+	public String getClassName() {
+		return className;
+	}
+
+	/**
+	 * Retrieves the name of this vocabulary imported by this grammar.
+	 *
+	 * @return The gammar's imported vocabulary name.
+	 */
+	public String getImportVocab() {
+		return importVocab;
+	}
+
+	/**
+	 * Retrieves the name of this vocabulary exported by this grammar.
+	 *
+	 * @return The gammar's exported vocabulary name.
+	 */
+	public String getExportVocab() {
+		return exportVocab;
+	}
+
+	/**
+	 * Retrieves the grammar delegate associated with this grammars super grammar deduced during preprocessing
+	 * from its extends clause.
+	 *
+	 * @return The super-grammar grammar delegate
+	 */
+	public GrammarDelegate getSuperGrammarDelegate() {
+		return superGrammarDelegate;
+	}
+
+	private GrammarMetadata associatedGrammarMetadata;
+
+	public void associateWith(GrammarMetadata associatedGrammarMetadata) {
+		this.associatedGrammarMetadata = associatedGrammarMetadata;
+	}
+
+	public GrammarMetadata getAssociatedGrammarMetadata() {
+		return associatedGrammarMetadata;
+	}
+
+	private String vocabName(String vocabName) {
+		if ( vocabName == null ) {
+			return null;
+		}
+		vocabName = vocabName.trim();
+		if ( vocabName.endsWith( ";" ) ) {
+			vocabName = vocabName.substring( 0, vocabName.length() - 1 );
+		}
+		return vocabName;
+	}
+
+	private static final Class antlrGrammarClass;
+	private static final Class antlrOptionClass;
+
+	static {
+		antlrGrammarClass = loadAntlrClass( "antlr.preprocessor.Grammar" );
+		antlrOptionClass = loadAntlrClass( "antlr.preprocessor.Option" );
+	}
+
+	public static final Class[] NO_ARG_SIGNATURE = new Class[0];
+	public static final Object[] NO_ARGS = new Object[0];
+
+	private static Class loadAntlrClass(String className) {
+		try {
+			return Class.forName( className, true, GrammarDelegate.class.getClassLoader() );
+		}
+		catch ( ClassNotFoundException e ) {
+			throw new IllegalStateException( "Unable to locate Antlr class [" + className + "]", e );
+		}
+	}
+}

Deleted: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarFile.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarFile.java	2009-10-21 22:01:02 UTC (rev 17815)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarFile.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -1,68 +0,0 @@
-/*
- * Hibernate, Relational Persistence for Idiomatic Java
- *
- * Copyright (c) 2009 by Red Hat Inc and/or its affiliates or by
- * third-party contributors as indicated by either @author tags or express
- * copyright attribution statements applied by the authors.  All
- * third-party contributions are distributed under license by Red Hat Inc.
- *
- * This copyrighted material is made available to anyone wishing to use, modify,
- * copy, or redistribute it subject to the terms and conditions of the GNU
- * Lesser General Public License, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this distribution; if not, write to:
- * Free Software Foundation, Inc.
- * 51 Franklin Street, Fifth Floor
- * Boston, MA  02110-1301  USA\
- */
-package org.gradle.plugin.antlr.metadata;
-
-import java.util.List;
-import java.util.ArrayList;
-
-/**
- * TODO : javadoc
- *
- * @author Steve Ebersole
- */
-public class GrammarFile {
-	private final String fileName;
-	private final String[] glibs;
-	private String packageName;
-	private List<Grammar> grammars = new ArrayList<Grammar>();
-
-	public GrammarFile(String fileName, String[] glibs) {
-		this.fileName = fileName;
-		this.glibs = glibs != null ? glibs : new String[0];
-	}
-
-	public String getFileName() {
-		return fileName;
-	}
-
-	public String[] getGlibs() {
-		return glibs;
-	}
-
-	public String getPackageName() {
-		return packageName;
-	}
-
-	void setPackageName(String packageName) {
-		this.packageName = packageName;
-	}
-
-	void addGrammar(Grammar grammar) {
-		grammars.add( grammar );
-	}
-
-	public List<Grammar> getGrammars() {
-		return grammars;
-	}
-}

Copied: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarFileMetadata.java (from rev 17800, core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarFile.java)
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarFileMetadata.java	                        (rev 0)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarFileMetadata.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -0,0 +1,69 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2009 by Red Hat Inc and/or its affiliates or by
+ * third-party contributors as indicated by either @author tags or express
+ * copyright attribution statements applied by the authors.  All
+ * third-party contributions are distributed under license by Red Hat Inc.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA\
+ */
+package org.gradle.plugin.antlr.metadata;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.io.File;
+
+/**
+ * Models information about an Antlr grammar file, including the inidividual {@link #getGrammars grammars}
+ * (lexers, parsers, etc) contained within it.
+ *
+ * @author Steve Ebersole
+ */
+public class GrammarFileMetadata {
+	private final File filePath;
+	private final antlr.preprocessor.GrammarFile antlrGrammarFile;
+	private final String packageName;
+	private List<GrammarMetadata> grammarMetadatas = new ArrayList<GrammarMetadata>();
+
+	public GrammarFileMetadata(File filePath, antlr.preprocessor.GrammarFile antlrGrammarFile, String packageName) {
+		this.filePath = filePath;
+		this.antlrGrammarFile = antlrGrammarFile;
+		this.packageName = packageName;
+
+		List<GrammarDelegate> antlrGrammarDelegates = GrammarDelegate.extractGrammarDelegates( antlrGrammarFile );
+		for ( GrammarDelegate antlrGrammarDelegate : antlrGrammarDelegates ) {
+			GrammarMetadata grammarMetadata = new GrammarMetadata( this, antlrGrammarDelegate );
+			grammarMetadatas.add( grammarMetadata );
+		}
+	}
+
+	public File getFilePath() {
+		return filePath;
+	}
+
+	public antlr.preprocessor.GrammarFile getAntlrGrammarFile() {
+		return antlrGrammarFile;
+	}
+
+	public String getPackageName() {
+		return packageName;
+	}
+
+	public List<GrammarMetadata> getGrammars() {
+		return grammarMetadatas;
+	}
+}

Copied: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarMetadata.java (from rev 17800, core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/Grammar.java)
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarMetadata.java	                        (rev 0)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/GrammarMetadata.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -0,0 +1,108 @@
+/*
+ * Hibernate, Relational Persistence for Idiomatic Java
+ *
+ * Copyright (c) 2009 by Red Hat Inc and/or its affiliates or by
+ * third-party contributors as indicated by either @author tags or express
+ * copyright attribution statements applied by the authors.  All
+ * third-party contributions are distributed under license by Red Hat Inc.
+ *
+ * This copyrighted material is made available to anyone wishing to use, modify,
+ * copy, or redistribute it subject to the terms and conditions of the GNU
+ * Lesser General Public License, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this distribution; if not, write to:
+ * Free Software Foundation, Inc.
+ * 51 Franklin Street, Fifth Floor
+ * Boston, MA  02110-1301  USA\
+ */
+package org.gradle.plugin.antlr.metadata;
+
+import java.io.File;
+
+import antlr.TreeParser;
+import antlr.Parser;
+
+/**
+ * Models a grammar defined within an Antlr grammar file.
+ *
+ * @author Steve Ebersole
+ */
+public class GrammarMetadata {
+	private final GrammarFileMetadata grammarFileMetadata;
+	private final GrammarDelegate grammarDelegate;
+
+	public GrammarMetadata(GrammarFileMetadata grammarFileMetadata, GrammarDelegate grammarDelegate) {
+		this.grammarFileMetadata = grammarFileMetadata;
+		this.grammarDelegate = grammarDelegate;
+		grammarDelegate.associateWith( this );
+	}
+
+	public GrammarFileMetadata getGrammarFile() {
+		return grammarFileMetadata;
+	}
+
+	public String getClassName() {
+		return grammarDelegate.getClassName();
+	}
+
+	public String getQualifiedClassName() {
+		if ( isEmpty( getPackageName() ) ) {
+			return getClassName();
+		}
+		else {
+			return getPackageName() + '.' + getClassName();
+		}
+	}
+
+	public GrammarDelegate getSuperGrammarDelegate() {
+		return grammarDelegate.getSuperGrammarDelegate();
+	}
+
+	public boolean extendsStandardGrammar() {
+		final String superGrammarClassName = getSuperGrammarDelegate().getClassName();
+		return Parser.class.getName().equals( superGrammarClassName )
+				|| Parser.class.getSimpleName().equals( superGrammarClassName )
+				|| TreeParser.class.getName().equals( superGrammarClassName )
+				|| TreeParser.class.getSimpleName().equals( superGrammarClassName )
+				|| "Lexer".equals( superGrammarClassName );
+	}
+
+	public String getImportVocab() {
+		return grammarDelegate.getImportVocab();
+	}
+
+	public String getExportVocab() {
+		return grammarDelegate.getExportVocab();
+	}
+
+	public String getPackageName() {
+		return getGrammarFile().getPackageName();
+	}
+
+	/**
+	 * Determine the relative path of the generated parser java file.
+	 * 
+	 * @return The relative generated parser file path.
+	 */
+	public String determineGeneratedParserPath() {
+		if ( isEmpty( getPackageName() ) ) {
+			return getClassName() + ".java";
+		}
+		else {
+			return getPackageName().replace( '.', File.separatorChar )
+					+ File.separatorChar
+					+ getClassName()
+					+ ".java";
+		}
+	}
+
+	private boolean isEmpty(String packageName) {
+		return packageName == null || packageName.trim().length() == 0;
+	}
+}

Modified: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/MetadataExtracter.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/MetadataExtracter.java	2009-10-21 22:01:02 UTC (rev 17815)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/MetadataExtracter.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -28,17 +28,13 @@
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.FileNotFoundException;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.lang.reflect.Method;
 
 import org.gradle.api.file.FileTree;
-import antlr.collections.impl.IndexedVector;
 
 /**
- * Preprocess an Antlr grammar file to that dependencies between grammars
- * can be properly determined so that they can be passed to the Antlr {@link antlr.Tool}
- * in proper order.
+ * Preprocess an Antlr grammar file so that dependencies between grammars
+ * can be properly determined such that they can be processed for generation
+ * in proper order later.
  *
  * @author Steve Ebersole
  */
@@ -48,23 +44,33 @@
 		antlr.Tool tool = new antlr.Tool();
 		antlr.preprocessor.Hierarchy hierarchy = new antlr.preprocessor.Hierarchy( tool );
 
-		final ArrayList<GrammarFile> grammarFiles = new ArrayList<GrammarFile>();
+		// first let antlr preprocess the grammars...
 		for ( File grammarFileFile : source.getFiles() ) {
 			final String grammarFilePath = grammarFileFile.getPath();
-			GrammarFile grammarFile = new GrammarFile(
-					grammarFilePath,
-					null // todo : account for glibs
-			);
 
-			// :(  antlr.preprocessor.GrammarFile's only access to package is through a protected field :(
 			try {
+				hierarchy.readGrammarFile( grammarFilePath );
+			}
+			catch ( FileNotFoundException e ) {
+				// should never happen here
+				throw new IllegalStateException( "Received FileNotFoundException on already read file", e );
+			}
+		}
+
+		// now, do our processing using the antlr preprocessor results whenever possible.
+		XRef xref = new XRef( hierarchy );
+		for ( File grammarFileFile : source.getFiles() ) {
+
+			// determine the package name :(
+			String grammarPackageName = null;
+			try {
 				BufferedReader in = new BufferedReader( new FileReader( grammarFileFile ) );
 				try {
 					String line;
 					while ( ( line = in.readLine() ) != null ) {
 						line = line.trim();
 						if ( line.startsWith( "package" ) && line.endsWith( ";" ) ) {
-							grammarFile.setPackageName( line.substring( 8, line.length() -1 ) );
+							grammarPackageName = line.substring( 8, line.length() -1 );
 							break;
 						}
 					}
@@ -81,114 +87,18 @@
 				e.printStackTrace();
 			}
 
-			grammarFiles.add( grammarFile );
+			final String grammarFilePath = grammarFileFile.getPath();
+			antlr.preprocessor.GrammarFile antlrGrammarFile = hierarchy.getFile( grammarFilePath );
 
-			try {
-				hierarchy.readGrammarFile( grammarFilePath );
-			}
-			catch ( FileNotFoundException e ) {
-				// should never happen here
-				throw new IllegalStateException( "Received FileNotFoundException on already read file", e );
-			}
-		}
+			GrammarFileMetadata grammarFileMetadata = new GrammarFileMetadata(
+					grammarFileFile,
+					antlrGrammarFile,
+					grammarPackageName
+			);
 
-		XRef xref = new XRef( hierarchy );
-		for ( GrammarFile grammarFile : grammarFiles ) {
-			final String grammarFilePath = grammarFile.getFileName();
-			try {
-				antlr.preprocessor.GrammarFile antlrToolGrammarFile = hierarchy.getFile( grammarFilePath );
-				intrepretMetadata( grammarFile, antlrToolGrammarFile );
-				xref.addGrammarFile( grammarFile );
-			}
-			catch ( Throwable t ) {
-				throw new IllegalStateException( "Unable to build grammar metadata", t );
-			}
+			xref.addGrammarFile( grammarFileMetadata );
 		}
 
 		return xref;
 	}
-
-	private void intrepretMetadata(GrammarFile grammarFile, antlr.preprocessor.GrammarFile antlrToolGrammarFile) {
-		final Enumeration antlrGrammars = antlrToolGrammarFile.getGrammars().elements();
-		while ( antlrGrammars.hasMoreElements() ) {
-			Grammar grammar = new Grammar( grammarFile );
-			intrepret( grammar, antlrGrammars.nextElement() );
-		}
-	}
-
-
-
-	private void intrepret(Grammar grammar, Object antlrGrammarDef) {
-		// antlr.preprocessor.Grammar is defined as package-protected, ugh...
-		final Class antlrGrammarClass = loadAntlrClass( "antlr.preprocessor.Grammar" );
-		final Class antlrOptionClass = loadAntlrClass( "antlr.preprocessor.Option" );
-
-		try {
-			final Method getNameMethod = antlrGrammarClass.getDeclaredMethod( "getName", NO_ARG_SIGNATURE );
-			getNameMethod.setAccessible( true );
-			final String name = ( String ) getNameMethod.invoke( antlrGrammarDef, NO_ARGS );
-			grammar.setClassName( name );
-
-			final Method getSuperGrammarNameMethod = antlrGrammarClass.getMethod( "getSuperGrammarName", NO_ARG_SIGNATURE );
-			getSuperGrammarNameMethod.setAccessible( true );
-			final String superGrammarName = ( String ) getSuperGrammarNameMethod.invoke( antlrGrammarDef, NO_ARGS );
-			grammar.setSuperGrammarName( superGrammarName );
-
-			Method getOptionsMethod = antlrGrammarClass.getMethod( "getOptions", NO_ARG_SIGNATURE );
-			getOptionsMethod.setAccessible( true );
-			IndexedVector options = ( IndexedVector ) getOptionsMethod.invoke( antlrGrammarDef, NO_ARGS );
-
-			Method getRHSMethod = antlrOptionClass.getMethod( "getRHS", NO_ARG_SIGNATURE );
-			getRHSMethod.setAccessible( true );
-
-			Object importVocabOption = options.getElement( "importVocab" );
-			if ( importVocabOption != null ) {
-				String importVocab = ( String ) getRHSMethod.invoke( importVocabOption, NO_ARGS );
-				if ( importVocab != null ) {
-					importVocab = importVocab.trim();
-					if ( importVocab.endsWith( ";" ) ) {
-						importVocab = importVocab.substring( 0, importVocab.length() - 1 );
-					}
-					grammar.setImportVocab( importVocab );
-				}
-			}
-
-			Object exportVocabOption = options.getElement( "exportVocab" );
-			if  ( exportVocabOption != null ) {
-				String exportVocab = ( String ) getRHSMethod.invoke( exportVocabOption, NO_ARGS );
-				if ( exportVocab != null ) {
-					exportVocab = exportVocab.trim();
-					if ( exportVocab.endsWith( ";" ) ) {
-						exportVocab = exportVocab.substring( 0, exportVocab.length() -1 );
-					}
-				}
-				grammar.setExportVocab( exportVocab );
-			}
-		}
-		catch ( Throwable t ) {
-			throw new IllegalStateException( "Error accessing  Antlr grammar metadata", t );
-		}
-	}
-
-	public static final Class[] NO_ARG_SIGNATURE = new Class[0];
-	public static final Object[] NO_ARGS = new Object[0];
-
-	private Class loadAntlrClass(String className) {
-		try {
-			return Class.forName( className, true, ANTLR_CLASSLOADER );
-		}
-		catch ( ClassNotFoundException e ) {
-			throw new IllegalStateException( "Unable to locate Antlr class [" + className + "]", e );
-		}
-	}
-
-	private static ClassLoader ANTLR_CLASSLOADER = determineAntlrClassLoader();
-
-	private static ClassLoader determineAntlrClassLoader() {
-		ClassLoader cl = Thread.currentThread().getContextClassLoader();
-		if ( cl == null ) {
-			cl = MetadataExtracter.class.getClassLoader();
-		}
-		return cl;
-	}
 }

Modified: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/XRef.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/XRef.java	2009-10-21 22:01:02 UTC (rev 17815)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/metadata/XRef.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -30,17 +30,17 @@
 import antlr.preprocessor.Hierarchy;
 
 /**
- * TODO : javadoc
+ * Models cross-reference (x-ref) info about {@link GrammarFileMetadata grammar files} such as {@link #filesByPath},
+ * {@link #filesByExportVocab} and {@link #filesByClassName}.
  *
  * @author Steve Ebersole
  */
 public class XRef {
 	private final Hierarchy antlrHierarchy;
 
-//	private LinkedHashMap<String, GrammarFile> filesById = new LinkedHashMap<String, GrammarFile>();
-	private LinkedHashMap<String, GrammarFile> filesByPath = new LinkedHashMap<String, GrammarFile>();
-	private HashMap<String, GrammarFile> filesByExportVocab = new HashMap<String, GrammarFile>();
-	private HashMap<String, GrammarFile> filesByClassName = new HashMap<String, GrammarFile>();
+	private LinkedHashMap<String, GrammarFileMetadata> filesByPath = new LinkedHashMap<String, GrammarFileMetadata>();
+	private HashMap<String, GrammarFileMetadata> filesByExportVocab = new HashMap<String, GrammarFileMetadata>();
+	private HashMap<String, GrammarFileMetadata> filesByClassName = new HashMap<String, GrammarFileMetadata>();
 
 	public XRef(Hierarchy antlrHierarchy) {
 		this.antlrHierarchy = antlrHierarchy;
@@ -50,40 +50,56 @@
 		return antlrHierarchy;
 	}
 
-	void addGrammarFile(GrammarFile grammarFile) {
-//		filesById.put( grammarFile.getId(), grammarFile );
-		filesByPath.put( grammarFile.getFileName(), grammarFile );
-		for ( Grammar grammar : grammarFile.getGrammars() ) {
-			filesByClassName.put( grammar.getClassName(), grammarFile );
-			if ( grammar.getExportVocab() != null ) {
-				GrammarFile old = filesByExportVocab.put( grammar.getExportVocab(), grammarFile );
-				if ( old != null && old != grammarFile ) {
-					System.out.println( "[WARNING] : multiple grammars defined the same exportVocab : " + grammar.getExportVocab() );
+	/**
+	 * Adds a grammar file to this cross-reference.
+	 * 
+	 * @param grammarFileMetadata The grammar file to add (and to be cross referenced).
+	 */
+	void addGrammarFile(GrammarFileMetadata grammarFileMetadata) {
+		filesByPath.put( grammarFileMetadata.getFilePath().getPath(), grammarFileMetadata );
+		for ( GrammarMetadata grammarMetadata : grammarFileMetadata.getGrammars() ) {
+			filesByClassName.put( grammarMetadata.getClassName(), grammarFileMetadata );
+			if ( grammarMetadata.getExportVocab() != null ) {
+				GrammarFileMetadata old = filesByExportVocab.put( grammarMetadata.getExportVocab(), grammarFileMetadata );
+				if ( old != null && old != grammarFileMetadata ) {
+					System.out.println( "[WARNING] : multiple grammars defined the same exportVocab : " + grammarMetadata
+							.getExportVocab() );
 				}
 			}
 		}
 	}
 
-//	public Iterator iterateGrammarFiles() {
-//		return filesById.values().iterator();
-//	}
-//
-//	public GrammarFile getGrammarFileById(String id) {
-//		return filesById.get( id );
-//	}
-	public Iterator<GrammarFile> iterateGrammarFiles() {
+	public Iterator<GrammarFileMetadata> iterateGrammarFiles() {
 		return filesByPath.values().iterator();
 	}
 
-	public GrammarFile getGrammarFileByPath(String path) {
+	/**
+	 * Locate the grammar file metadata by grammar file path.
+	 *
+	 * @param path The grammar file path.
+	 * @return The grammar file metadata.  May be null if none found.
+	 */
+	public GrammarFileMetadata getGrammarFileByPath(String path) {
 		return filesByPath.get( path );
 	}
 
-	public GrammarFile getGrammarFileByClassName(String className) {
+	/**
+	 * Locate the grammar file metadata by the name of a class generated from one of its included grammars.
+	 *
+	 * @param className The generated class name.
+	 * @return The grammar file metadata.  May be null if none found.
+	 */
+	public GrammarFileMetadata getGrammarFileByClassName(String className) {
 		return filesByClassName.get( className );
 	}
 
-	public GrammarFile getGrammarFileByExportVocab(String exportVocab) {
-		return filesByExportVocab.get( exportVocab );
+	/**
+	 * Locate the grammar file metadata by the name of a vocabulary exported from one of its included grammars.
+	 *
+	 * @param vocabName The vocabulary name
+	 * @return The grammar file metadata.  May be null if none found.
+	 */
+	public GrammarFileMetadata getGrammarFileByExportVocab(String vocabName) {
+		return filesByExportVocab.get( vocabName );
 	}
 }

Modified: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/plan/GenerationPlan.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/plan/GenerationPlan.java	2009-10-21 22:01:02 UTC (rev 17815)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/plan/GenerationPlan.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -24,36 +24,33 @@
 package org.gradle.plugin.antlr.plan;
 
 import java.io.File;
-import java.util.LinkedHashSet;
 
 /**
- * TODO : javadoc
+ * Models information relevant to generation of a particular Antlr grammar file.
  *
  * @author Steve Ebersole
  */
 public class GenerationPlan {
-	private final String id;
 	private final File source;
 	private final File generationDirectory;
 
 	private File importVocabTokenTypesDirectory;
 	private boolean outOfDate;
 
-	private LinkedHashSet<String> collectedSuperGrammarIds = new LinkedHashSet<String>();
-
-	GenerationPlan(String id, File source, File generationDirectory, String[] glibIds) {
-		this.id = id;
+	/**
+	 * Instantiates a generation plan.
+	 *
+	 * @param source The grammar file.
+	 * @param generationDirectory The directory into which generated lexers and parsers should be written, accounting
+	 * for delared package.
+	 */
+	GenerationPlan(File source, File generationDirectory) {
 		this.source = source;
 		this.generationDirectory = generationDirectory;
-		if ( glibIds != null ) {
-			for ( String glibId : glibIds ) {
-				addSuperGrammarId( glibId );
-			}
-		}
 	}
 
 	public String getId() {
-		return id;
+		return getSource().getPath();
 	}
 
 	public File getSource() {
@@ -64,14 +61,6 @@
 		return generationDirectory;
 	}
 
-	void addSuperGrammarId(String id) {
-		collectedSuperGrammarIds.add( id );
-	}
-
-	public LinkedHashSet<String> getCollectedSuperGrammarIds() {
-		return collectedSuperGrammarIds;
-	}
-
 	public File getImportVocabTokenTypesDirectory() {
 		return importVocabTokenTypesDirectory;
 	}
@@ -80,10 +69,18 @@
 		this.importVocabTokenTypesDirectory = importVocabTokenTypesDirectory;
 	}
 
+	/**
+	 * Is the grammar file modeled by this plan out of considered out of date?
+	 *
+	 * @return True if the grammar generation is out of date (needs regen); false otherwise.
+	 */
 	public boolean isOutOfDate() {
 		return outOfDate;
 	}
 
+	/**
+	 * Marks the plan as out of date.
+	 */
 	void markOutOfDate() {
 		this.outOfDate = true;
 	}

Modified: core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/plan/GenerationPlanBuilder.java
===================================================================
--- core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/plan/GenerationPlanBuilder.java	2009-10-21 22:01:02 UTC (rev 17815)
+++ core/branches/gradle/buildSrc/src/main/java/org/gradle/plugin/antlr/plan/GenerationPlanBuilder.java	2009-10-22 00:59:53 UTC (rev 17816)
@@ -30,13 +30,15 @@
 import java.util.ArrayList;
 
 import org.gradle.plugin.antlr.metadata.XRef;
-import org.gradle.plugin.antlr.metadata.GrammarFile;
-import org.gradle.plugin.antlr.metadata.Grammar;
+import org.gradle.plugin.antlr.metadata.GrammarFileMetadata;
+import org.gradle.plugin.antlr.metadata.GrammarMetadata;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
- * TODO : javadoc
+ * Builder for the properly order list of {@link GenerationPlan generation plans}.
+ * <p/>
+ * IMPL NOTE : Uses recursive calls to achieve ordering.
  *
  * @author Steve Ebersole
  */
@@ -55,54 +57,38 @@
 	public synchronized List<GenerationPlan> buildGenerationPlans(XRef metadataXRef) {
 		this.metadataXRef = metadataXRef;
 
-		Iterator<GrammarFile> grammarFiles = metadataXRef.iterateGrammarFiles();
+		Iterator<GrammarFileMetadata> grammarFiles = metadataXRef.iterateGrammarFiles();
 		while ( grammarFiles.hasNext() ) {
-			final GrammarFile grammarFile = grammarFiles.next();
+			final GrammarFileMetadata grammarFileMetadata = grammarFiles.next();
 			// NOTE : loacteOrBuildGenerationPlan populates the generationPlans map
-			loacteOrBuildGenerationPlan( grammarFile );
+			loacteOrBuildGenerationPlan( grammarFileMetadata );
 		}
 
 		return new ArrayList<GenerationPlan>( generationPlans.values() );
 	}
 
-	private GenerationPlan loacteOrBuildGenerationPlan(GrammarFile grammarFile) {
-		GenerationPlan generationPlan = generationPlans.get( grammarFile.getFileName() );
+	private GenerationPlan loacteOrBuildGenerationPlan(GrammarFileMetadata grammarFileMetadata) {
+		GenerationPlan generationPlan = generationPlans.get( grammarFileMetadata.getFilePath().getPath() );
 		if ( generationPlan == null ) {
-			generationPlan = buildGenerationPlan( grammarFile );
+			generationPlan = buildGenerationPlan( grammarFileMetadata );
 		}
 		return generationPlan;
 	}
 
-	private GenerationPlan buildGenerationPlan(GrammarFile grammarFile) {
-		File generationDirectory = isEmpty( grammarFile.getPackageName() )
+	private GenerationPlan buildGenerationPlan(GrammarFileMetadata grammarFileMetadata) {
+		File generationDirectory = isEmpty( grammarFileMetadata.getPackageName() )
 				? outputDirectory
-				: new File( outputDirectory, grammarFile.getPackageName().replace( '.', File.separatorChar ) );
+				: new File( outputDirectory, grammarFileMetadata.getPackageName().replace( '.', File.separatorChar ) );
 
 		GenerationPlan generationPlan = new GenerationPlan(
-				grammarFile.getFileName(),
-				new File( grammarFile.getFileName() ),
-				generationDirectory,
-				grammarFile.getGlibs()
+				grammarFileMetadata.getFilePath(),
+				generationDirectory
 		);
 
-		File leastRecentGrammarOutput = locateLeastRecentlyModifiedOutputFile( generationDirectory );
-
-		// see if the grammar is out-of-date by way super-grammars from user defined glib options
-		for ( int i = 0; i < grammarFile.getGlibs().length; i++ ) {
-			final GrammarFile superGrammarGrammarFile =  metadataXRef.getGrammarFileByPath( grammarFile.getGlibs()[i] );
-			final GenerationPlan superGrammarGenerationPlan = loacteOrBuildGenerationPlan( superGrammarGrammarFile );
-			if ( superGrammarGenerationPlan.isOutOfDate() ) {
-				generationPlan.markOutOfDate();
-			}
-			else if ( superGrammarGenerationPlan.getSource().lastModified() > leastRecentGrammarOutput.lastModified() ) {
-				generationPlan.markOutOfDate();
-			}
-		}
-
-		for ( Grammar grammar : grammarFile.getGrammars() ) {
+		for ( GrammarMetadata grammarMetadata : grammarFileMetadata.getGrammars() ) {
 			final File generatedParserFile = new File(
 					outputDirectory,
-					grammar.determineGeneratedParserPath()
+					grammarMetadata.determineGeneratedParserPath()
 			);
 
 			if ( !generatedParserFile.exists() ) {
@@ -113,35 +99,36 @@
 			}
 
 			// see if the grammar if out-of-date by way of its super-grammar(s) as gleaned from parsing the grammar file
-			if ( isNotEmpty( grammar.getSuperGrammarName() ) ) {
-				final GrammarFile superGrammarGrammarFile = metadataXRef.getGrammarFileByClassName( grammar.getSuperGrammarName() );
-				if ( superGrammarGrammarFile != null ) {
+			if ( !grammarMetadata.extendsStandardGrammar() ) {
+				final GrammarFileMetadata superGrammarGrammarFileMetadata = grammarMetadata.getSuperGrammarDelegate()
+						.getAssociatedGrammarMetadata()
+						.getGrammarFile();
+				if ( superGrammarGrammarFileMetadata != null ) {
 					final GenerationPlan superGrammarGenerationPlan = loacteOrBuildGenerationPlan(
-							superGrammarGrammarFile
+							superGrammarGrammarFileMetadata
 					);
-					generationPlan.addSuperGrammarId( superGrammarGenerationPlan.getId() );
 					if ( superGrammarGenerationPlan.isOutOfDate() ) {
 						generationPlan.markOutOfDate();
 					}
-					else if ( superGrammarGenerationPlan.getSource()
-							.lastModified() > generatedParserFile.lastModified() ) {
+					else if ( superGrammarGenerationPlan.getSource().lastModified()
+							> generatedParserFile.lastModified() ) {
 						generationPlan.markOutOfDate();
 					}
 				}
 			}
 
 			// see if the grammar if out-of-date by way of its importVocab
-			if ( isNotEmpty( grammar.getImportVocab() ) ) {
-				final GrammarFile importVocabGrammarFile = metadataXRef.getGrammarFileByExportVocab( grammar.getImportVocab() );
-				if ( importVocabGrammarFile == null ) {
-					log.warn( "unable to locate grammar exporting specifcied import vocab [" + grammar.getImportVocab() + "]" );
+			if ( isNotEmpty( grammarMetadata.getImportVocab() ) ) {
+				final GrammarFileMetadata importVocabGrammarFileMetadata = metadataXRef.getGrammarFileByExportVocab( grammarMetadata.getImportVocab() );
+				if ( importVocabGrammarFileMetadata == null ) {
+					log.warn( "unable to locate grammar exporting specifcied import vocab [" + grammarMetadata.getImportVocab() + "]" );
 				}
-				else if ( importVocabGrammarFile.getFileName().equals( grammarFile.getFileName() ) ) {
+				else if ( importVocabGrammarFileMetadata.getFilePath().equals( grammarFileMetadata.getFilePath() ) ) {
 
 				}
 				else {
 					final GenerationPlan importVocabGrammarGenerationPlan = loacteOrBuildGenerationPlan(
-							importVocabGrammarFile
+							importVocabGrammarFileMetadata
 					);
 					generationPlan.setImportVocabTokenTypesDirectory(
 							importVocabGrammarGenerationPlan.getGenerationDirectory()
@@ -169,25 +156,4 @@
 		return ! isEmpty( string );
 	}
 
-	private static File locateLeastRecentlyModifiedOutputFile(File directory) {
-		if ( !directory.exists() ) {
-			return null;
-		}
-
-		File[] contents = directory.listFiles();
-		if ( contents.length == 0 ) {
-			return null;
-		}
-
-		File oldest = contents[0];
-		for ( int i = 1; i < contents.length; i++ ) {
-			if ( contents[i].lastModified() < oldest.lastModified() ) {
-				oldest = contents[i];
-			}
-		}
-
-		return oldest;
-	}
-
-
 }



More information about the hibernate-commits mailing list