You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2016/03/19 12:53:30 UTC

[3/3] git commit: [flex-falcon] [refs/heads/feature/maven-migration] - - Updated the migration script - Updated the closure compiler version to v20151015 - Updated guava version to 18.0 - Added some more build-tool goals needed to patch, copy, cut and ot

- Updated the migration script
- Updated the closure compiler version to v20151015
- Updated guava version to 18.0
- Added some more build-tool goals needed to patch, copy, cut and otherwise update stuff in the externs modules
- Extern modules
-- Added poms
-- Added config files for generation and compilation
- Added a new flexjs-maven-plugin


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/dec07727
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/dec07727
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/dec07727

Branch: refs/heads/feature/maven-migration
Commit: dec07727ac4e0b7869cafd7154cdacbb0bc2f2fa
Parents: 5088977
Author: Christofer Dutz <ch...@codecentric.de>
Authored: Sat Mar 19 12:53:21 2016 +0100
Committer: Christofer Dutz <ch...@codecentric.de>
Committed: Sat Mar 19 12:53:21 2016 +0100

----------------------------------------------------------------------
 compiler-build-tools/pom.xml                    |   5 +
 .../compiler/tools/AnnotateClassesMojo.java     | 135 ---------------
 .../tools/BaseProblemGeneratorMojo.java         | 127 --------------
 .../tools/ProblemEnumGeneratorMojo.java         | 152 ----------------
 .../ProblemResourceBundleGeneratorMojo.java     | 101 -----------
 .../tools/annotate/AnnotateClassesMojo.java     | 135 +++++++++++++++
 .../tools/patchfiles/CopyFileOperation.java     |  31 ++++
 .../compiler/tools/patchfiles/CutOperation.java |  54 ++++++
 .../tools/patchfiles/DeleteFileOperation.java   |  23 +++
 .../compiler/tools/patchfiles/Operation.java    |  13 ++
 .../tools/patchfiles/PreProcessSourcesMojo.java |  86 +++++++++
 .../tools/patchfiles/ReplaceOperation.java      |  46 +++++
 .../patchfiles/ReplaceRegexpOperation.java      |  68 ++++++++
 .../problems/BaseProblemGeneratorMojo.java      | 127 ++++++++++++++
 .../problems/ProblemEnumGeneratorMojo.java      | 152 ++++++++++++++++
 .../ProblemResourceBundleGeneratorMojo.java     | 101 +++++++++++
 .../tools/unpack/UnpackResourceMojo.java        | 100 +++++++++++
 compiler.jx/pom.xml                             |   2 +-
 compiler/pom.xml                                |   2 +-
 externs/GCL/pom.xml                             |  23 +++
 externs/GCL/src/main/config/compile-config.xml  | 103 +++++++++++
 externs/cordova/pom.xml                         |  49 ++++++
 .../cordova/src/main/config/compile-config.xml  |  44 +++++
 .../cordova/src/main/config/generate-config.xml |  39 +++++
 externs/createjs/pom.xml                        | 167 ++++++++++++++++++
 .../createjs/src/main/config/compile-config.xml | 102 +++++++++++
 .../src/main/config/generate-config.xml         | 130 ++++++++++++++
 externs/google_maps/pom.xml                     |  88 ++++++++++
 .../src/main/config/compile-config.xml          |  97 +++++++++++
 .../src/main/config/generate-config.xml         |  39 +++++
 externs/jasmine/pom.xml                         |  62 +++++++
 .../jasmine/src/main/config/compile-config.xml  |  97 +++++++++++
 .../jasmine/src/main/config/generate-config.xml |  45 +++++
 externs/jquery/pom.xml                          |  62 +++++++
 .../jquery/src/main/config/compile-config.xml   | 101 +++++++++++
 .../jquery/src/main/config/generate-config.xml  |  59 +++++++
 externs/js/pom.xml                              | 131 ++++++++++++++
 externs/js/src/main/config/compile-config.xml   |  93 ++++++++++
 externs/js/src/main/config/generate-config.xml  | 173 +++++++++++++++++++
 .../js/src/main/flex/__AS3__/vec/Vector$int.as  |  81 +++++++++
 .../src/main/flex/__AS3__/vec/Vector$object.as  |  81 +++++++++
 .../js/src/main/flex/__AS3__/vec/Vector$uint.as |  81 +++++++++
 externs/node/pom.xml                            |  38 ++++
 externs/node/src/main/config/compile-config.xml |  43 +++++
 .../node/src/main/config/generate-config.xml    |  38 ++++
 externs/pom.xml                                 |  29 ++++
 flexjs-maven-plugin/pom.xml                     | 100 +++++++++++
 .../apache/flex/maven/flexjs/CompileMojo.java   |  59 +++++++
 .../apache/flex/maven/flexjs/ExterncMojo.java   |  52 ++++++
 maven/falcon-jx-compiler.pom                    |   2 +-
 migrate-to-maven.sh                             |  40 +++++
 pom.xml                                         |   2 +
 52 files changed, 3292 insertions(+), 518 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/pom.xml
----------------------------------------------------------------------
diff --git a/compiler-build-tools/pom.xml b/compiler-build-tools/pom.xml
index d773ee7..4f9e05f 100644
--- a/compiler-build-tools/pom.xml
+++ b/compiler-build-tools/pom.xml
@@ -46,6 +46,11 @@
       <version>3.0.3</version>
     </dependency>
     <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-compress</artifactId>
+      <version>1.10</version>
+    </dependency>
+    <dependency>
       <groupId>junit</groupId>
       <artifactId>junit</artifactId>
       <version>4.10</version>

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/AnnotateClassesMojo.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/AnnotateClassesMojo.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/AnnotateClassesMojo.java
deleted file mode 100644
index cae1ad7..0000000
--- a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/AnnotateClassesMojo.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.apache.flex.compiler.tools;
-
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.MavenProject;
-import org.codehaus.plexus.compiler.util.scan.InclusionScanException;
-import org.codehaus.plexus.compiler.util.scan.SimpleSourceInclusionScanner;
-import org.codehaus.plexus.compiler.util.scan.mapping.SuffixMapping;
-
-import java.io.*;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Goal which adds annotations to generated classes.
- */
-@Mojo(name="add-class-annotation",defaultPhase = LifecyclePhase.PROCESS_SOURCES)
-public class AnnotateClassesMojo
-    extends AbstractMojo
-{
-    @Parameter
-    protected Set<String> includes = new HashSet<String>();
-
-    @Parameter
-    protected Set<String> excludes = new HashSet<String>();
-
-    @Parameter(defaultValue="${project.build.directory}/generated-sources")
-    private File directory;
-
-    @Parameter(property="annotation", required=true)
-    private String annotation;
-
-    public void execute()
-        throws MojoExecutionException
-    {
-        SuffixMapping mapping = new SuffixMapping("jbg", Collections.<String>emptySet());
-        SimpleSourceInclusionScanner scan = new SimpleSourceInclusionScanner(includes, excludes);
-        scan.addSourceMapping(mapping);
-
-        try {
-            Set<File> candidates = scan.getIncludedSources(directory, null);
-            for(File candidate : candidates) {
-                processFile(candidate);
-            }
-        } catch (InclusionScanException e) {
-            throw new MojoExecutionException("Error scanning filed to be processed.", e);
-        }
-    }
-
-    private void processFile(File file) {
-        if(!file.exists()) {
-            System.out.println("Missing file: " + file.getPath());
-            return;
-        }
-        System.out.println("Adding " + annotation + " to class: " + file.getPath());
-        try
-        {
-            // Prepare to read the file.
-            FileInputStream fileInputStream = new FileInputStream(file);
-            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
-            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
-
-            File tmpOutputFile = new File(file.getParentFile(), file.getName() + ".tmp");
-            FileOutputStream fileOutputStream = new FileOutputStream(tmpOutputFile);
-            PrintStream outputStream = new PrintStream(fileOutputStream);
-            try
-            {
-                // Read it line-by-line.
-                String line;
-                while ((line = bufferedReader.readLine()) != null)
-                {
-                    // If the line starts with "public class", output the annotation on the previous line.
-                    if (line.startsWith("public class") || line.startsWith("public interface")) {
-                        outputStream.println(annotation);
-                    }
-                    outputStream.println(line);
-                }
-            }
-            finally
-            {
-                try {
-                    bufferedReader.close();
-                } catch(Exception e) {
-                    // Ignore.
-                }
-                try {
-                    outputStream.close();
-                } catch(Exception e) {
-                    // Ignore.
-                }
-                try {
-                    fileOutputStream.close();
-                } catch(Exception e) {
-                    // Ignore.
-                }
-            }
-
-            // Remove the original file.
-            if(!file.delete()) {
-                throw new MojoExecutionException("Error deleting original file at: " + file.getPath());
-            }
-
-            // Rename the temp file to the name of the original file.
-            if(!tmpOutputFile.renameTo(file)) {
-                throw new MojoExecutionException("Error renaming the temp file from: " + tmpOutputFile.getPath() +
-                        " to: " + file.getPath());
-            }
-        }
-        catch (Exception e)
-        {
-            e.printStackTrace();
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/BaseProblemGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/BaseProblemGeneratorMojo.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/BaseProblemGeneratorMojo.java
deleted file mode 100644
index 3845be9..0000000
--- a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/BaseProblemGeneratorMojo.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.apache.flex.compiler.tools;
-
-import com.google.common.base.Predicate;
-import com.google.common.collect.Collections2;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.io.Files;
-import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.FilenameUtils;
-import org.apache.maven.plugin.AbstractMojo;
-import org.apache.maven.plugin.MojoExecutionException;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.nio.charset.Charset;
-import java.util.Collection;
-import java.util.Iterator;
-
-/**
- * Created by christoferdutz on 20.02.16.
- */
-public abstract class BaseProblemGeneratorMojo extends AbstractMojo
-{
-
-    private ImmutableSet<String> nonProblemClassesToFilter =
-            new ImmutableSet.Builder<String>()
-                    .add("DefaultSeverity.java")
-                    .add("CompositeProblemFilter.java")
-                    .add("FilteredIterator.java")
-                    .add("CompilerProblemSeverity.java")
-                    .build();
-
-    abstract protected File getInputDirectory();
-    abstract protected File getOutputDirectory();
-    abstract protected String getOutputFile();
-
-    public void execute() throws MojoExecutionException
-    {
-        File generatedFile = new File(getOutputDirectory(), getOutputFile());
-
-        if(!generatedFile.getParentFile().exists()) {
-            if(!generatedFile.getParentFile().mkdirs()) {
-                throw new MojoExecutionException("Could not create output directory: " + generatedFile.getParentFile());
-            }
-        }
-
-        try {
-            PrintWriter writer = new PrintWriter(new FileWriter(generatedFile, true));
-            try {
-                printHeader(writer);
-
-                Collection<File> problemClassSourceFiles = getProblemClassSourceFiles(getInputDirectory());
-                Iterator<File> problemClassSourceFileIterator = problemClassSourceFiles.iterator();
-                while (problemClassSourceFileIterator.hasNext()) {
-                    File problemClassSourceFile = problemClassSourceFileIterator.next();
-                    printEntry(writer, problemClassSourceFile, !problemClassSourceFileIterator.hasNext());
-                }
-
-                printFooter(writer);
-            } finally {
-                writer.close();
-            }
-        } catch (IOException e) {
-            throw new MojoExecutionException("Caught Exception while trying to create output file: " + generatedFile);
-        }
-    }
-
-
-    protected void printHeader(PrintWriter writer) {
-        // Optional.
-    }
-
-    abstract protected void printEntry(PrintWriter writer, File source, boolean last);
-
-    protected void printFooter(PrintWriter writer) {
-        // Optional.
-    }
-
-    /**
-     * Recursively search a directory and its sub-directories for .class files.
-     * Use the file name to determine what equivalent class name should be
-     * available to the current classloader.
-     *
-     * @param dir - the directory to search
-     * @return list of source files found
-     */
-    protected Collection<File> getProblemClassSourceFiles(File dir)
-    {
-        Collection<File> problemFiles = FileUtils.listFiles(dir, new String[] { "java" }, true);
-        return Collections2.filter(problemFiles,
-                new Predicate<File>() {
-                    @Override
-                    public boolean apply(File input)
-                    {
-                        return isProblemClass(input);
-                    }
-                });
-    }
-
-    private boolean isProblemClass(File javaFile)
-    {
-        if (nonProblemClassesToFilter.contains(javaFile.getName()))
-            return false;
-        final String javaClassName = FilenameUtils.getBaseName(javaFile.getAbsolutePath());
-        try
-        {
-            Collection<String> lines =  Files.readLines(javaFile, Charset.forName("UTF8"));
-            for (String line : lines)
-            {
-                if (line.matches("^\\s*public\\s+final\\s+class\\s+" + javaClassName + "\\s+extends\\s+.*"))
-                    return true;
-                if (line.matches("^\\s*final\\s+public\\s+class\\s+" + javaClassName + "\\s+extends\\s+.*"))
-                    return true;
-                if (line.matches("^\\s*public\\s+class\\s+" + javaClassName + "\\s+extends\\s+.*"))
-                    return true;
-            }
-            return false;
-        }
-        catch (IOException e)
-        {
-            return false;
-        }
-
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/ProblemEnumGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/ProblemEnumGeneratorMojo.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/ProblemEnumGeneratorMojo.java
deleted file mode 100644
index 54b621b..0000000
--- a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/ProblemEnumGeneratorMojo.java
+++ /dev/null
@@ -1,152 +0,0 @@
-package org.apache.flex.compiler.tools;
-
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.maven.plugin.MojoExecutionException;
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.MavenProject;
-
-import java.io.File;
-import java.io.PrintWriter;
-
-/**
- * Goal which touches a timestamp file.
- */
-@Mojo(name="generate-problems-enum",defaultPhase = LifecyclePhase.GENERATE_SOURCES)
-public class ProblemEnumGeneratorMojo
-    extends BaseProblemGeneratorMojo
-{
-    @Parameter(defaultValue="${project.basedir}/src/main/java/org/apache/flex/compiler/problems",
-            property="inputDir", required=true)
-    private File inputDirectory;
-
-    @Parameter(defaultValue="${project.build.directory}/generated-sources/build-tools",
-            property="outputDir", required=true)
-    private File outputDirectory;
-
-    @Parameter(defaultValue="org/apache/flex/compiler/problems/ProblemID.java",
-            property="outputFile", required=true)
-    private String outputFile;
-
-    @Parameter(defaultValue="${project}")
-    private MavenProject project;
-
-    @Override
-    protected File getInputDirectory() {
-        return inputDirectory;
-    }
-
-    @Override
-    protected File getOutputDirectory() {
-        return outputDirectory;
-    }
-
-    @Override
-    protected String getOutputFile() {
-        return outputFile;
-    }
-
-    @Override
-    public void execute() throws MojoExecutionException {
-        super.execute();
-
-        // Add the output directory to the source path.
-        project.addCompileSourceRoot(outputDirectory.getPath());
-    }
-
-    @Override
-    protected void printHeader(PrintWriter writer) {
-        writer.println("/*");
-        writer.println(" *  Licensed to the Apache Software Foundation (ASF) under one or more");
-        writer.println(" *  contributor license agreements.  See the NOTICE file distributed with");
-        writer.println(" *  this work for additional information regarding copyright ownership.");
-        writer.println(" *  The ASF licenses this file to You under the Apache License, Version 2.0");
-        writer.println(" *  (the \"License\"); you may not use this file except in compliance with");
-        writer.println(" *  the License.  You may obtain a copy of the License at");
-        writer.println();
-        writer.println(" *      http://www.apache.org/licenses/LICENSE-2.0");
-        writer.println();
-        writer.println(" *  Unless required by applicable law or agreed to in writing, software");
-        writer.println(" *  distributed under the License is distributed on an \"AS IS\" BASIS,");
-        writer.println(" *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.");
-        writer.println(" *  See the License for the specific language governing permissions and");
-        writer.println(" *  limitations under the License.");
-        writer.println(" */");
-        writer.println();
-        writer.println("package org.apache.flex.compiler.problems;");
-        writer.println();
-        writer.println("import java.util.EnumSet;");
-        writer.println("import com.google.common.collect.ImmutableMap;");
-        writer.println();
-        writer.println("public enum ProblemID");
-        writer.println("{");
-    }
-
-    @Override
-    protected void printEntry(PrintWriter writer, File source, boolean last) {
-        writer.println("    " + getProblemEnumEntry(source.getName()) + (last ? ";" : ","));
-    }
-
-    @Override
-    protected void printFooter(PrintWriter writer) {
-        writer.println();
-        writer.println("    private ProblemID(Class<? extends CompilerProblem> problemClass)");
-        writer.println("    {");
-        writer.println("        this.problemClass = problemClass;");
-        writer.println("    }");
-        writer.println();
-        writer.println("    private final Class<? extends CompilerProblem> problemClass;");
-        writer.println("    public final Class<? extends CompilerProblem> getProblemClass()");
-        writer.println("    {");
-        writer.println("        return problemClass;");
-        writer.println("    }");
-        writer.println();
-        writer.println("    public static final ProblemID getID(ICompilerProblem problem)");
-        writer.println("    {");
-        writer.println("        final CompilerProblem problemImpl = (CompilerProblem)problem;");
-        writer.println("        return classToIDMap.get(problemImpl.getClass());");
-        writer.println("    }");
-        writer.println();
-        writer.println("    public static final ProblemID getID(Class<?> problemClass)");
-        writer.println("    {");
-        writer.println("        return classToIDMap.get(problemClass);");
-        writer.println("    }");
-        writer.println();
-        writer.println("    private static final ImmutableMap<Class<? extends CompilerProblem>, ProblemID> classToIDMap = createClassToIDMap();");
-        writer.println("    private static ImmutableMap<Class<? extends CompilerProblem>, ProblemID> createClassToIDMap()");
-        writer.println("    {");
-        writer.println("        final ImmutableMap.Builder<Class<? extends CompilerProblem>, ProblemID> builder = new ImmutableMap.Builder<Class<? extends CompilerProblem>, ProblemID>();");
-        writer.println("        for (ProblemID id : EnumSet.allOf(ProblemID.class))");
-        writer.println("            builder.put(id.getProblemClass(), id);");
-        writer.println("        return builder.build();");
-        writer.println("    }");
-        writer.println("}");
-    }
-
-    private static String getProblemEnumEntry(String problemClassName) {
-        String problemTypeName = problemClassName.substring(0, problemClassName.length() - "class".length());
-        String enumConstantName = getEnumName(problemTypeName.replaceAll("Problem$", ""));
-        return enumConstantName + "(" + problemTypeName + ".class" + ")";
-    }
-
-    private static String getEnumName(String problemTypeName) {
-        return "PROBLEM_" + problemTypeName;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/ProblemResourceBundleGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/ProblemResourceBundleGeneratorMojo.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/ProblemResourceBundleGeneratorMojo.java
deleted file mode 100644
index dcbedce..0000000
--- a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/ProblemResourceBundleGeneratorMojo.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.apache.flex.compiler.tools;
-
-/*
- * Copyright 2001-2005 The Apache Software Foundation.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import org.apache.maven.plugins.annotations.LifecyclePhase;
-import org.apache.maven.plugins.annotations.Mojo;
-import org.apache.maven.plugins.annotations.Parameter;
-import org.apache.maven.project.MavenProject;
-
-import java.io.*;
-
-/**
- * Goal which touches a timestamp file.
- */
-@Mojo(name="generate-problems-resource-bundle",defaultPhase = LifecyclePhase.PROCESS_RESOURCES)
-public class ProblemResourceBundleGeneratorMojo
-    extends BaseProblemGeneratorMojo
-{
-    @Parameter(defaultValue="${project.basedir}/src/main/java/org/apache/flex/compiler/problems",
-            property="inputDir", required=true)
-    private File inputDirectory;
-
-    @Parameter(defaultValue="${project.build.directory}/classes/org/apache/flex/compiler",
-            property="outputDir", required=true)
-    private File outputDirectory;
-
-    @Parameter(defaultValue="messages_en.properties",
-            property="outputFile", required=true)
-    private String outputFile;
-
-    @Parameter(defaultValue="${project}")
-    private MavenProject project;
-
-    @Override
-    protected File getInputDirectory() {
-        return inputDirectory;
-    }
-
-    @Override
-    protected File getOutputDirectory() {
-        return outputDirectory;
-    }
-
-    @Override
-    protected String getOutputFile() {
-        return outputFile;
-    }
-
-    @Override
-    protected void printEntry(PrintWriter writer, File source, boolean last) {
-        writer.println(getProblemName(source) + "=" + getProblemDescription(source));
-    }
-
-    private String getProblemName(File sourceFile) {
-        String fileName = sourceFile.getName();
-        return fileName.substring(0, fileName.length() - "class".length());
-    }
-
-    private String getProblemDescription(File sourceFile) {
-        try {
-            BufferedReader sourceFileReader = new BufferedReader(new FileReader(sourceFile));
-            String line;
-            StringBuilder sb = null;
-            while((line = sourceFileReader.readLine()) != null) {
-                if(line.contains("DESCRIPTION")) {
-                    sb = new StringBuilder();
-                }
-                if(sb != null) {
-                    sb.append(line);
-                    if(line.trim().endsWith(";")) {
-                        break;
-                    }
-                }
-            }
-            if(sb != null) {
-                line = sb.toString();
-                return line.substring(line.indexOf("\"") + 1, line.lastIndexOf("\""));
-            }
-        } catch (FileNotFoundException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        return "";
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/annotate/AnnotateClassesMojo.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/annotate/AnnotateClassesMojo.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/annotate/AnnotateClassesMojo.java
new file mode 100644
index 0000000..82712da
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/annotate/AnnotateClassesMojo.java
@@ -0,0 +1,135 @@
+package org.apache.flex.compiler.tools.annotate;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.compiler.util.scan.InclusionScanException;
+import org.codehaus.plexus.compiler.util.scan.SimpleSourceInclusionScanner;
+import org.codehaus.plexus.compiler.util.scan.mapping.SuffixMapping;
+
+import java.io.*;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Goal which adds annotations to generated classes.
+ */
+@Mojo(name="add-class-annotation",defaultPhase = LifecyclePhase.PROCESS_SOURCES)
+public class AnnotateClassesMojo
+    extends AbstractMojo
+{
+    @Parameter
+    protected Set<String> includes = new HashSet<String>();
+
+    @Parameter
+    protected Set<String> excludes = new HashSet<String>();
+
+    @Parameter(defaultValue="${project.build.directory}/generated-sources")
+    private File directory;
+
+    @Parameter(property="annotation", required=true)
+    private String annotation;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        SuffixMapping mapping = new SuffixMapping("jbg", Collections.<String>emptySet());
+        SimpleSourceInclusionScanner scan = new SimpleSourceInclusionScanner(includes, excludes);
+        scan.addSourceMapping(mapping);
+
+        try {
+            Set<File> candidates = scan.getIncludedSources(directory, null);
+            for(File candidate : candidates) {
+                processFile(candidate);
+            }
+        } catch (InclusionScanException e) {
+            throw new MojoExecutionException("Error scanning files to be processed.", e);
+        }
+    }
+
+    private void processFile(File file) {
+        if(!file.exists()) {
+            System.out.println("Missing file: " + file.getPath());
+            return;
+        }
+        System.out.println("Adding " + annotation + " to class: " + file.getPath());
+        try
+        {
+            // Prepare to read the file.
+            FileInputStream fileInputStream = new FileInputStream(file);
+            InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
+            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
+
+            File tmpOutputFile = new File(file.getParentFile(), file.getName() + ".tmp");
+            FileOutputStream fileOutputStream = new FileOutputStream(tmpOutputFile);
+            PrintStream outputStream = new PrintStream(fileOutputStream);
+            try
+            {
+                // Read it line-by-line.
+                String line;
+                while ((line = bufferedReader.readLine()) != null)
+                {
+                    // If the line starts with "public class", output the annotation on the previous line.
+                    if (line.startsWith("public class") || line.startsWith("public interface")) {
+                        outputStream.println(annotation);
+                    }
+                    outputStream.println(line);
+                }
+            }
+            finally
+            {
+                try {
+                    bufferedReader.close();
+                } catch(Exception e) {
+                    // Ignore.
+                }
+                try {
+                    outputStream.close();
+                } catch(Exception e) {
+                    // Ignore.
+                }
+                try {
+                    fileOutputStream.close();
+                } catch(Exception e) {
+                    // Ignore.
+                }
+            }
+
+            // Remove the original file.
+            if(!file.delete()) {
+                throw new MojoExecutionException("Error deleting original file at: " + file.getPath());
+            }
+
+            // Rename the temp file to the name of the original file.
+            if(!tmpOutputFile.renameTo(file)) {
+                throw new MojoExecutionException("Error renaming the temp file from: " + tmpOutputFile.getPath() +
+                        " to: " + file.getPath());
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/CopyFileOperation.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/CopyFileOperation.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/CopyFileOperation.java
new file mode 100644
index 0000000..188d946
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/CopyFileOperation.java
@@ -0,0 +1,31 @@
+package org.apache.flex.compiler.tools.patchfiles;
+
+import org.apache.commons.io.FileUtils;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Created by christoferdutz on 16.03.16.
+ */
+public class CopyFileOperation extends Operation {
+
+    private File targetDirectory;
+
+    public CopyFileOperation() {
+    }
+
+    public File getTargetDirectory() {
+        return targetDirectory;
+    }
+
+    public void setTargetDirectory(File targetDirectory) {
+        this.targetDirectory = targetDirectory;
+    }
+
+    @Override
+    public void perform(File file) throws IOException {
+        FileUtils.copyFile(file, new File(targetDirectory, file.getName()));
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/CutOperation.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/CutOperation.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/CutOperation.java
new file mode 100644
index 0000000..2834704
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/CutOperation.java
@@ -0,0 +1,54 @@
+package org.apache.flex.compiler.tools.patchfiles;
+
+import org.apache.commons.io.IOUtils;
+
+import java.io.*;
+
+/**
+ * Created by christoferdutz on 16.03.16.
+ */
+public class CutOperation extends Operation {
+
+    private Integer startCuttingLine = -1;
+    private Integer stopCuttingLine = -1;
+
+    public CutOperation() {
+    }
+
+    public Integer getStartCuttingLine() {
+        return startCuttingLine;
+    }
+
+    public void setStartCuttingLine(Integer startCuttingLine) {
+        this.startCuttingLine = startCuttingLine;
+    }
+
+    public Integer getStopCuttingLine() {
+        return stopCuttingLine;
+    }
+
+    public void setStopCuttingLine(Integer stopCuttingLine) {
+        this.stopCuttingLine = stopCuttingLine;
+    }
+
+    @Override
+    public void perform(File file) throws IOException {
+        StringBuilder sb = new StringBuilder();
+        BufferedReader reader = null;
+        try {
+            reader = new BufferedReader(new FileReader(file));
+            String line;
+            for (int lineNumber = 1; (line = reader.readLine()) != null; lineNumber++) {
+                if((startCuttingLine > lineNumber) || (lineNumber > stopCuttingLine))  {
+                    sb.append(line).append("\n");
+                }
+            }
+        } finally {
+            if(reader != null) {
+                reader.close();
+            }
+        }
+        IOUtils.write(sb.toString(), new FileOutputStream(file), "UTF-8");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/DeleteFileOperation.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/DeleteFileOperation.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/DeleteFileOperation.java
new file mode 100644
index 0000000..ab225cb
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/DeleteFileOperation.java
@@ -0,0 +1,23 @@
+package org.apache.flex.compiler.tools.patchfiles;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Created by christoferdutz on 16.03.16.
+ */
+public class DeleteFileOperation extends Operation {
+
+    public DeleteFileOperation() {
+    }
+
+    @Override
+    public void perform(File file) throws IOException {
+        if(file.exists()) {
+            if(!file.delete()) {
+                throw new IOException("Could not delete file " + file.getPath());
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/Operation.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/Operation.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/Operation.java
new file mode 100644
index 0000000..3c387d3
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/Operation.java
@@ -0,0 +1,13 @@
+package org.apache.flex.compiler.tools.patchfiles;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * Created by christoferdutz on 16.03.16.
+ */
+public abstract class Operation {
+
+    public abstract void perform(File file) throws IOException;
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/PreProcessSourcesMojo.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/PreProcessSourcesMojo.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/PreProcessSourcesMojo.java
new file mode 100644
index 0000000..facd686
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/PreProcessSourcesMojo.java
@@ -0,0 +1,86 @@
+package org.apache.flex.compiler.tools.patchfiles;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.codehaus.plexus.compiler.util.scan.InclusionScanException;
+import org.codehaus.plexus.compiler.util.scan.SimpleSourceInclusionScanner;
+import org.codehaus.plexus.compiler.util.scan.mapping.SuffixMapping;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Goal which pre-processes the JavaScript input files so they can be processed by EXTERNC.
+ */
+@Mojo(name="pre-process-sources",defaultPhase = LifecyclePhase.GENERATE_SOURCES)
+public class PreProcessSourcesMojo
+    extends AbstractMojo
+{
+
+    @Parameter
+    private Set<String> includes = new HashSet<String>();
+
+    @Parameter
+    private Set<String> excludes = new HashSet<String>();
+
+    @Parameter(defaultValue="${project.build.directory}/downloads")
+    private File downloadesSourceDirectory;
+
+    @Parameter
+    private List<Operation> operations;
+
+    @Parameter(defaultValue="${project}")
+    private MavenProject project;
+
+    public void execute()
+        throws MojoExecutionException
+    {
+        SuffixMapping mapping = new SuffixMapping("js", Collections.<String>emptySet());
+        SimpleSourceInclusionScanner scan = new SimpleSourceInclusionScanner(includes, excludes);
+        scan.addSourceMapping(mapping);
+        try {
+            Set<File> candidates = scan.getIncludedSources(downloadesSourceDirectory, null);
+            for(File candidate : candidates) {
+                if(operations != null) {
+                    for (Operation operation : operations) {
+                        try {
+                            operation.perform(candidate);
+                        } catch (IOException e) {
+                            throw new MojoExecutionException("Error performing pre-processing operation " +
+                                    operation + " on file " + candidate.getPath(), e);
+                        }
+                    }
+                }
+            }
+        } catch (InclusionScanException e) {
+            throw new MojoExecutionException("Error scanning files to be processed.", e);
+        }
+    }
+
+
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/ReplaceOperation.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/ReplaceOperation.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/ReplaceOperation.java
new file mode 100644
index 0000000..ef85301
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/ReplaceOperation.java
@@ -0,0 +1,46 @@
+package org.apache.flex.compiler.tools.patchfiles;
+
+import org.apache.commons.io.IOUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * Created by christoferdutz on 16.03.16.
+ */
+public class ReplaceOperation extends Operation {
+
+    private String token;
+    private String value;
+
+    public ReplaceOperation() {
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    @Override
+    public void perform(File file) throws IOException {
+        String content = IOUtils.toString(new FileInputStream(file), "UTF-8");
+        content = content.replaceAll(Pattern.quote(token), Matcher.quoteReplacement((value == null) ? "" : value));
+        IOUtils.write(content, new FileOutputStream(file), "UTF-8");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/ReplaceRegexpOperation.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/ReplaceRegexpOperation.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/ReplaceRegexpOperation.java
new file mode 100644
index 0000000..e76fc84
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/patchfiles/ReplaceRegexpOperation.java
@@ -0,0 +1,68 @@
+package org.apache.flex.compiler.tools.patchfiles;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Created by christoferdutz on 16.03.16.
+ */
+public class ReplaceRegexpOperation extends Operation {
+
+    private String match;
+    private String replace;
+    private String flags;
+
+    public ReplaceRegexpOperation() {
+    }
+
+    public String getMatch() {
+        return match;
+    }
+
+    public void setMatch(String match) {
+        this.match = match;
+    }
+
+    public String getReplace() {
+        return replace;
+    }
+
+    public void setReplace(String replace) {
+        this.replace = replace;
+    }
+
+    public String getFlags() {
+        return flags;
+    }
+
+    public void setFlags(String flags) {
+        this.flags = flags;
+    }
+
+    @Override
+    public void perform(File file) throws IOException {
+        String content = IOUtils.toString(new FileInputStream(file), "UTF-8");
+        // TODO: Add the "flags" support
+        String matchExpression = match;
+        if(matchExpression.contains("§{file.base}")) {
+            matchExpression = matchExpression.replaceAll("§\\{file.base\\}", FilenameUtils.getBaseName(file.getName()));
+        }
+        String replaceExpression = (replace == null) ? "" : replace;
+        if(replaceExpression.contains("§{file.base}")) {
+            replaceExpression = replaceExpression.replaceAll("§\\{file.base\\}", FilenameUtils.getBaseName(file.getName()));
+        }
+        if(replaceExpression.contains("_")) {
+            replaceExpression = replaceExpression.replaceAll("_", " ");
+        }
+
+        //content = Pattern.compile(matchExpression, Pattern.DOTALL).matcher(content).replaceAll(replaceExpression);
+        content = content.replaceAll(matchExpression, replaceExpression);
+        IOUtils.write(content, new FileOutputStream(file), "UTF-8");
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/BaseProblemGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/BaseProblemGeneratorMojo.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/BaseProblemGeneratorMojo.java
new file mode 100644
index 0000000..24f2560
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/BaseProblemGeneratorMojo.java
@@ -0,0 +1,127 @@
+package org.apache.flex.compiler.tools.problems;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Collections2;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.io.Files;
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.io.FilenameUtils;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.nio.charset.Charset;
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ * Created by christoferdutz on 20.02.16.
+ */
+public abstract class BaseProblemGeneratorMojo extends AbstractMojo
+{
+
+    private ImmutableSet<String> nonProblemClassesToFilter =
+            new ImmutableSet.Builder<String>()
+                    .add("DefaultSeverity.java")
+                    .add("CompositeProblemFilter.java")
+                    .add("FilteredIterator.java")
+                    .add("CompilerProblemSeverity.java")
+                    .build();
+
+    abstract protected File getInputDirectory();
+    abstract protected File getOutputDirectory();
+    abstract protected String getOutputFile();
+
+    public void execute() throws MojoExecutionException
+    {
+        File generatedFile = new File(getOutputDirectory(), getOutputFile());
+
+        if(!generatedFile.getParentFile().exists()) {
+            if(!generatedFile.getParentFile().mkdirs()) {
+                throw new MojoExecutionException("Could not create output directory: " + generatedFile.getParentFile());
+            }
+        }
+
+        try {
+            PrintWriter writer = new PrintWriter(new FileWriter(generatedFile, true));
+            try {
+                printHeader(writer);
+
+                Collection<File> problemClassSourceFiles = getProblemClassSourceFiles(getInputDirectory());
+                Iterator<File> problemClassSourceFileIterator = problemClassSourceFiles.iterator();
+                while (problemClassSourceFileIterator.hasNext()) {
+                    File problemClassSourceFile = problemClassSourceFileIterator.next();
+                    printEntry(writer, problemClassSourceFile, !problemClassSourceFileIterator.hasNext());
+                }
+
+                printFooter(writer);
+            } finally {
+                writer.close();
+            }
+        } catch (IOException e) {
+            throw new MojoExecutionException("Caught Exception while trying to create output file: " + generatedFile);
+        }
+    }
+
+
+    protected void printHeader(PrintWriter writer) {
+        // Optional.
+    }
+
+    abstract protected void printEntry(PrintWriter writer, File source, boolean last);
+
+    protected void printFooter(PrintWriter writer) {
+        // Optional.
+    }
+
+    /**
+     * Recursively search a directory and its sub-directories for .class files.
+     * Use the file name to determine what equivalent class name should be
+     * available to the current classloader.
+     *
+     * @param dir - the directory to search
+     * @return list of source files found
+     */
+    protected Collection<File> getProblemClassSourceFiles(File dir)
+    {
+        Collection<File> problemFiles = FileUtils.listFiles(dir, new String[] { "java" }, true);
+        return Collections2.filter(problemFiles,
+                new Predicate<File>() {
+                    @Override
+                    public boolean apply(File input)
+                    {
+                        return isProblemClass(input);
+                    }
+                });
+    }
+
+    private boolean isProblemClass(File javaFile)
+    {
+        if (nonProblemClassesToFilter.contains(javaFile.getName()))
+            return false;
+        final String javaClassName = FilenameUtils.getBaseName(javaFile.getAbsolutePath());
+        try
+        {
+            Collection<String> lines =  Files.readLines(javaFile, Charset.forName("UTF8"));
+            for (String line : lines)
+            {
+                if (line.matches("^\\s*public\\s+final\\s+class\\s+" + javaClassName + "\\s+extends\\s+.*"))
+                    return true;
+                if (line.matches("^\\s*final\\s+public\\s+class\\s+" + javaClassName + "\\s+extends\\s+.*"))
+                    return true;
+                if (line.matches("^\\s*public\\s+class\\s+" + javaClassName + "\\s+extends\\s+.*"))
+                    return true;
+            }
+            return false;
+        }
+        catch (IOException e)
+        {
+            return false;
+        }
+
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/ProblemEnumGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/ProblemEnumGeneratorMojo.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/ProblemEnumGeneratorMojo.java
new file mode 100644
index 0000000..d3acb6a
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/ProblemEnumGeneratorMojo.java
@@ -0,0 +1,152 @@
+package org.apache.flex.compiler.tools.problems;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+
+import java.io.File;
+import java.io.PrintWriter;
+
+/**
+ * Goal which touches a timestamp file.
+ */
+@Mojo(name="generate-problems-enum",defaultPhase = LifecyclePhase.GENERATE_SOURCES)
+public class ProblemEnumGeneratorMojo
+    extends BaseProblemGeneratorMojo
+{
+    @Parameter(defaultValue="${project.basedir}/src/main/java/org/apache/flex/compiler/problems",
+            property="inputDir", required=true)
+    private File inputDirectory;
+
+    @Parameter(defaultValue="${project.build.directory}/generated-sources/build-tools",
+            property="outputDir", required=true)
+    private File outputDirectory;
+
+    @Parameter(defaultValue="org/apache/flex/compiler/problems/ProblemID.java",
+            property="outputFile", required=true)
+    private String outputFile;
+
+    @Parameter(defaultValue="${project}")
+    private MavenProject project;
+
+    @Override
+    protected File getInputDirectory() {
+        return inputDirectory;
+    }
+
+    @Override
+    protected File getOutputDirectory() {
+        return outputDirectory;
+    }
+
+    @Override
+    protected String getOutputFile() {
+        return outputFile;
+    }
+
+    @Override
+    public void execute() throws MojoExecutionException {
+        super.execute();
+
+        // Add the output directory to the source path.
+        project.addCompileSourceRoot(outputDirectory.getPath());
+    }
+
+    @Override
+    protected void printHeader(PrintWriter writer) {
+        writer.println("/*");
+        writer.println(" *  Licensed to the Apache Software Foundation (ASF) under one or more");
+        writer.println(" *  contributor license agreements.  See the NOTICE file distributed with");
+        writer.println(" *  this work for additional information regarding copyright ownership.");
+        writer.println(" *  The ASF licenses this file to You under the Apache License, Version 2.0");
+        writer.println(" *  (the \"License\"); you may not use this file except in compliance with");
+        writer.println(" *  the License.  You may obtain a copy of the License at");
+        writer.println();
+        writer.println(" *      http://www.apache.org/licenses/LICENSE-2.0");
+        writer.println();
+        writer.println(" *  Unless required by applicable law or agreed to in writing, software");
+        writer.println(" *  distributed under the License is distributed on an \"AS IS\" BASIS,");
+        writer.println(" *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.");
+        writer.println(" *  See the License for the specific language governing permissions and");
+        writer.println(" *  limitations under the License.");
+        writer.println(" */");
+        writer.println();
+        writer.println("package org.apache.flex.compiler.problems;");
+        writer.println();
+        writer.println("import java.util.EnumSet;");
+        writer.println("import com.google.common.collect.ImmutableMap;");
+        writer.println();
+        writer.println("public enum ProblemID");
+        writer.println("{");
+    }
+
+    @Override
+    protected void printEntry(PrintWriter writer, File source, boolean last) {
+        writer.println("    " + getProblemEnumEntry(source.getName()) + (last ? ";" : ","));
+    }
+
+    @Override
+    protected void printFooter(PrintWriter writer) {
+        writer.println();
+        writer.println("    private ProblemID(Class<? extends CompilerProblem> problemClass)");
+        writer.println("    {");
+        writer.println("        this.problemClass = problemClass;");
+        writer.println("    }");
+        writer.println();
+        writer.println("    private final Class<? extends CompilerProblem> problemClass;");
+        writer.println("    public final Class<? extends CompilerProblem> getProblemClass()");
+        writer.println("    {");
+        writer.println("        return problemClass;");
+        writer.println("    }");
+        writer.println();
+        writer.println("    public static final ProblemID getID(ICompilerProblem problem)");
+        writer.println("    {");
+        writer.println("        final CompilerProblem problemImpl = (CompilerProblem)problem;");
+        writer.println("        return classToIDMap.get(problemImpl.getClass());");
+        writer.println("    }");
+        writer.println();
+        writer.println("    public static final ProblemID getID(Class<?> problemClass)");
+        writer.println("    {");
+        writer.println("        return classToIDMap.get(problemClass);");
+        writer.println("    }");
+        writer.println();
+        writer.println("    private static final ImmutableMap<Class<? extends CompilerProblem>, ProblemID> classToIDMap = createClassToIDMap();");
+        writer.println("    private static ImmutableMap<Class<? extends CompilerProblem>, ProblemID> createClassToIDMap()");
+        writer.println("    {");
+        writer.println("        final ImmutableMap.Builder<Class<? extends CompilerProblem>, ProblemID> builder = new ImmutableMap.Builder<Class<? extends CompilerProblem>, ProblemID>();");
+        writer.println("        for (ProblemID id : EnumSet.allOf(ProblemID.class))");
+        writer.println("            builder.put(id.getProblemClass(), id);");
+        writer.println("        return builder.build();");
+        writer.println("    }");
+        writer.println("}");
+    }
+
+    private static String getProblemEnumEntry(String problemClassName) {
+        String problemTypeName = problemClassName.substring(0, problemClassName.length() - "class".length());
+        String enumConstantName = getEnumName(problemTypeName.replaceAll("Problem$", ""));
+        return enumConstantName + "(" + problemTypeName + ".class" + ")";
+    }
+
+    private static String getEnumName(String problemTypeName) {
+        return "PROBLEM_" + problemTypeName;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/ProblemResourceBundleGeneratorMojo.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/ProblemResourceBundleGeneratorMojo.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/ProblemResourceBundleGeneratorMojo.java
new file mode 100644
index 0000000..be1b467
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/problems/ProblemResourceBundleGeneratorMojo.java
@@ -0,0 +1,101 @@
+package org.apache.flex.compiler.tools.problems;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+
+import java.io.*;
+
+/**
+ * Goal which touches a timestamp file.
+ */
+@Mojo(name="generate-problems-resource-bundle",defaultPhase = LifecyclePhase.PROCESS_RESOURCES)
+public class ProblemResourceBundleGeneratorMojo
+    extends BaseProblemGeneratorMojo
+{
+    @Parameter(defaultValue="${project.basedir}/src/main/java/org/apache/flex/compiler/problems",
+            property="inputDir", required=true)
+    private File inputDirectory;
+
+    @Parameter(defaultValue="${project.build.directory}/classes/org/apache/flex/compiler",
+            property="outputDir", required=true)
+    private File outputDirectory;
+
+    @Parameter(defaultValue="messages_en.properties",
+            property="outputFile", required=true)
+    private String outputFile;
+
+    @Parameter(defaultValue="${project}")
+    private MavenProject project;
+
+    @Override
+    protected File getInputDirectory() {
+        return inputDirectory;
+    }
+
+    @Override
+    protected File getOutputDirectory() {
+        return outputDirectory;
+    }
+
+    @Override
+    protected String getOutputFile() {
+        return outputFile;
+    }
+
+    @Override
+    protected void printEntry(PrintWriter writer, File source, boolean last) {
+        writer.println(getProblemName(source) + "=" + getProblemDescription(source));
+    }
+
+    private String getProblemName(File sourceFile) {
+        String fileName = sourceFile.getName();
+        return fileName.substring(0, fileName.length() - "class".length());
+    }
+
+    private String getProblemDescription(File sourceFile) {
+        try {
+            BufferedReader sourceFileReader = new BufferedReader(new FileReader(sourceFile));
+            String line;
+            StringBuilder sb = null;
+            while((line = sourceFileReader.readLine()) != null) {
+                if(line.contains("DESCRIPTION")) {
+                    sb = new StringBuilder();
+                }
+                if(sb != null) {
+                    sb.append(line);
+                    if(line.trim().endsWith(";")) {
+                        break;
+                    }
+                }
+            }
+            if(sb != null) {
+                line = sb.toString();
+                return line.substring(line.indexOf("\"") + 1, line.lastIndexOf("\""));
+            }
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return "";
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/unpack/UnpackResourceMojo.java
----------------------------------------------------------------------
diff --git a/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/unpack/UnpackResourceMojo.java b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/unpack/UnpackResourceMojo.java
new file mode 100644
index 0000000..aa5ac4f
--- /dev/null
+++ b/compiler-build-tools/src/main/java/org/apache/flex/compiler/tools/unpack/UnpackResourceMojo.java
@@ -0,0 +1,100 @@
+package org.apache.flex.compiler.tools.unpack;
+
+import org.apache.commons.compress.archivers.ArchiveEntry;
+import org.apache.commons.compress.archivers.ArchiveException;
+import org.apache.commons.compress.archivers.ArchiveInputStream;
+import org.apache.commons.compress.archivers.ArchiveStreamFactory;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+
+import java.io.*;
+
+/**
+ * Created by christoferdutz on 18.03.16.
+ */
+@Mojo(name="unpack-resources",defaultPhase = LifecyclePhase.GENERATE_SOURCES)
+public class UnpackResourceMojo
+        extends AbstractMojo {
+
+    private static final int KILOBYTE = 1024;
+    private static final int MEGABYTE = KILOBYTE * 1024;
+    private static final int BUFFER_MAX = MEGABYTE;
+
+    @Parameter(required = true)
+    private String resource;
+
+    @Parameter(defaultValue="${project.build.directory}/downloads")
+    private File targetDirectory;
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        InputStream is = getClass().getClassLoader().getResourceAsStream(resource);
+        if(is == null) {
+            throw new MojoExecutionException("Could not find resource " + resource);
+        }
+
+        if(!targetDirectory.exists() && !targetDirectory.mkdirs()) {
+            throw new MojoExecutionException("Could not create output directory " + targetDirectory.getPath());
+        }
+
+        final byte[] data = new byte[BUFFER_MAX];
+        ArchiveInputStream archiveInputStream = null;
+        ArchiveEntry entry;
+        try {
+            archiveInputStream = new ArchiveStreamFactory().createArchiveInputStream(
+                    new BufferedInputStream(is));
+
+            while ((entry = archiveInputStream.getNextEntry()) != null) {
+                final File outputFile = new File(targetDirectory, entry.getName());
+
+                // Entry is a directory.
+                if (entry.isDirectory()) {
+                    if (!outputFile.exists()) {
+                        if(!outputFile.mkdirs()) {
+                            throw new MojoExecutionException(
+                                    "Could not create output directory " + outputFile.getAbsolutePath());
+                        }
+                    }
+                }
+
+                // Entry is a file.
+                else {
+                    final FileOutputStream fos = new FileOutputStream(outputFile);
+                    BufferedOutputStream dest = null;
+                    try {
+                        dest = new BufferedOutputStream(fos, BUFFER_MAX);
+
+                        int count;
+                        while ((count = archiveInputStream.read(data, 0, BUFFER_MAX)) != -1) {
+                            dest.write(data, 0, count);
+                        }
+                    } finally {
+                        if(dest != null) {
+                            dest.flush();
+                            dest.close();
+                        }
+                    }
+                }
+            }
+        } catch (FileNotFoundException e) {
+            throw new MojoExecutionException("Error unpacking resources", e);
+        } catch (IOException e) {
+            throw new MojoExecutionException("Error unpacking resources", e);
+        } catch (ArchiveException e) {
+            throw new MojoExecutionException("Error unpacking resources", e);
+        } finally {
+            if(archiveInputStream != null) {
+                try {
+                    archiveInputStream.close();
+                } catch(Exception e) {
+                    // Ignore...
+                }
+            }
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler.jx/pom.xml
----------------------------------------------------------------------
diff --git a/compiler.jx/pom.xml b/compiler.jx/pom.xml
index 0b90a3c..e1f748e 100644
--- a/compiler.jx/pom.xml
+++ b/compiler.jx/pom.xml
@@ -94,7 +94,7 @@
         <dependency>
             <groupId>com.google.javascript</groupId>
             <artifactId>closure-compiler</artifactId>
-            <version>v20150609</version>
+            <version>v20151015</version>
         </dependency>
         <dependency>
             <groupId>org.clojure</groupId>

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/compiler/pom.xml
----------------------------------------------------------------------
diff --git a/compiler/pom.xml b/compiler/pom.xml
index a2ee9b6..84b6cab 100644
--- a/compiler/pom.xml
+++ b/compiler/pom.xml
@@ -408,7 +408,7 @@
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
-            <version>17.0</version>
+            <version>18.0</version>
         </dependency>
         <dependency>
             <groupId>net.sourceforge.jburg</groupId>

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/externs/GCL/pom.xml
----------------------------------------------------------------------
diff --git a/externs/GCL/pom.xml b/externs/GCL/pom.xml
new file mode 100644
index 0000000..6fae9b2
--- /dev/null
+++ b/externs/GCL/pom.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.flex.flexjs.compiler</groupId>
+        <artifactId>flex-compiler-externs</artifactId>
+        <version>0.6.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>flex-compiler-externs-gcl</artifactId>
+    <version>0.6.0-SNAPSHOT</version>
+    <packaging>jar</packaging>
+
+    <name>Apache Flex - FlexJS Compiler: Externs: GCL</name>
+
+    <build>
+        <plugins>
+        </plugins>
+    </build>
+
+</project>

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/externs/GCL/src/main/config/compile-config.xml
----------------------------------------------------------------------
diff --git a/externs/GCL/src/main/config/compile-config.xml b/externs/GCL/src/main/config/compile-config.xml
new file mode 100644
index 0000000..715ef39
--- /dev/null
+++ b/externs/GCL/src/main/config/compile-config.xml
@@ -0,0 +1,103 @@
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+	  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<flex-config>
+
+    <compiler>
+
+        <accessible>true</accessible>
+
+        <!--
+        <external-library-path>
+            <path-element>${env.PLAYERGLOBAL_HOME}/${playerglobal.version}/playerglobal.swc</path-element>
+            <path-element>../../libs/framework.swc</path-element>
+            <path-element>../../libs/mx/mx.swc</path-element>
+            <path-element>../../libs/osmf.swc</path-element>
+            <path-element>../../libs/textLayout.swc</path-element>
+        </external-library-path>
+
+        <keep-as3-metadata>
+            <name>SkinPart</name>
+        </keep-as3-metadata>
+
+        <mxml>
+            <minimum-supported-version>4.0.0</minimum-supported-version>
+        </mxml>
+
+        <locale/>
+
+        <library-path/>
+
+        <namespaces>
+            <namespace>
+                <uri>library://ns.adobe.com/flex/spark</uri>
+                <manifest>manifest.xml</manifest>
+            </namespace>
+        </namespaces>
+        -->
+
+        <external-library-path>
+            <path-element>../js/out/bin/js.swc</path-element>
+        </external-library-path>
+        
+        <source-path>
+            <path-element>src</path-element>
+            <!--<path-element>out/as/classes</path-element>
+            <path-element>out/as/interfaces</path-element>
+            <path-element>out/as/constants</path-element>
+            <path-element>out/as/functions</path-element>
+            <path-element>out/as/interfaces</path-element>
+            <path-element>out/as/typedefs</path-element>-->
+        </source-path>
+
+        <warn-no-constructor>false</warn-no-constructor>
+    </compiler>
+
+    <include-sources>
+            <path-element>src</path-element>
+        <!--<path-element>out/as/classes</path-element>
+        <path-element>out/as/interfaces</path-element>
+        <path-element>out/as/constants</path-element>
+        <path-element>out/as/functions</path-element>
+        <path-element>out/as/interfaces</path-element>
+        <path-element>out/as/typedefs</path-element>-->
+    </include-sources>
+
+    <!--
+    <include-file>
+        <name>defaults.css</name>
+        <path>defaults.css</path>
+    </include-file>
+    <include-file>
+        <name>assets/ErrorIndicator.png</name>
+        <path>assets/ErrorIndicator.png</path>
+    </include-file>
+    <include-file>
+        <name>assets/RequiredIndicator.png</name>
+        <path>assets/RequiredIndicator.png</path>
+    </include-file>
+
+    <include-namespaces>
+        <uri>library://ns.adobe.com/flex/spark</uri>
+    </include-namespaces>
+
+    <resource-bundle-list>bundles.properties</resource-bundle-list>
+
+    <target-player>${playerglobal.version}</target-player>
+     -->
+</flex-config>

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/externs/cordova/pom.xml
----------------------------------------------------------------------
diff --git a/externs/cordova/pom.xml b/externs/cordova/pom.xml
new file mode 100644
index 0000000..9ccad91
--- /dev/null
+++ b/externs/cordova/pom.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.flex.flexjs.compiler</groupId>
+        <artifactId>flex-compiler-externs</artifactId>
+        <version>0.6.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>flex-compiler-externs-cordova</artifactId>
+    <version>0.6.0-SNAPSHOT</version>
+    <packaging>jar</packaging>
+
+    <name>Apache Flex - FlexJS Compiler: Externs: Cordova</name>
+
+    <properties>
+        <cordova.version>4.11</cordova.version>
+    </properties>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.flex.flexjs.compiler</groupId>
+                <artifactId>externc-maven-plugin</artifactId>
+                <version>0.6.0-SNAPSHOT</version>
+                <executions>
+                    <execution>
+                        <id>generate</id>
+                        <goals>
+                            <goal>generate</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>compile</id>
+                        <goals>
+                            <goal>compile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+    </dependencies>
+
+</project>

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/externs/cordova/src/main/config/compile-config.xml
----------------------------------------------------------------------
diff --git a/externs/cordova/src/main/config/compile-config.xml b/externs/cordova/src/main/config/compile-config.xml
new file mode 100644
index 0000000..5499e36
--- /dev/null
+++ b/externs/cordova/src/main/config/compile-config.xml
@@ -0,0 +1,44 @@
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License"); you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<flex-config>
+
+    <compiler>
+        <accessible>true</accessible>
+		
+        <external-library-path>
+            <!--path-element>../js/out/bin/js.swc</path-element-->
+        </external-library-path>
+		
+        <source-path>
+            <path-element>../../../target/generated-sources/externc/constants</path-element>
+        </source-path>
+        
+        <warn-no-constructor>false</warn-no-constructor>
+    </compiler>
+    
+    <include-sources>
+        <path-element>../../../target/generated-sources/externc/constants</path-element>
+    </include-sources>
+
+    <include-file>
+        <name>externs/cordova_file_plugin-4-11.js</name>
+        <path>../javascript/cordova_file_plugin-4-11.js</path>
+    </include-file>
+
+</flex-config>

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dec07727/externs/cordova/src/main/config/generate-config.xml
----------------------------------------------------------------------
diff --git a/externs/cordova/src/main/config/generate-config.xml b/externs/cordova/src/main/config/generate-config.xml
new file mode 100644
index 0000000..f10016a
--- /dev/null
+++ b/externs/cordova/src/main/config/generate-config.xml
@@ -0,0 +1,39 @@
+<!--
+
+  Licensed to the Apache Software Foundation (ASF) under one or more
+  contributor license agreements.  See the NOTICE file distributed with
+  this work for additional information regarding copyright ownership.
+  The ASF licenses this file to You under the Apache License, Version 2.0
+  (the "License</name></exclude> you may not use this file except in compliance with
+  the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+-->
+<flex-config>
+
+    <compiler>
+        <accessible>true</accessible>
+        
+        <locale/>
+        
+        <source-path>
+            <path-element>src/main/javascript</path-element>
+        </source-path>
+        
+        <warn-no-constructor>false</warn-no-constructor>
+    </compiler>
+    
+    <external>
+        <path-element>../javascript/cordova_file_plugin-4-11.js</path-element>
+    </external>
+        
+    <as-root>../../../target/generated-sources/externc</as-root>
+
+</flex-config>