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/04/13 20:56:21 UTC
[29/51] [partial] git commit: [flex-falcon]
[refs/heads/feature/maven-migration-test] - - Check-In of the migrated
project to make error analysis easier
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/internal/visitor/mxml/MXMLNodeSwitch.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/visitor/mxml/MXMLNodeSwitch.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/visitor/mxml/MXMLNodeSwitch.java
new file mode 100644
index 0000000..9576e24
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/visitor/mxml/MXMLNodeSwitch.java
@@ -0,0 +1,187 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.internal.visitor.mxml;
+
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLArrayNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLBindingNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLBooleanNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLComponentNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDataBindingNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDeclarationsNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDeferredInstanceNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDocumentNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLEmbedNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLEventSpecifierNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLFactoryNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLFileNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLImplementsNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLInstanceNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLIntNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLLiteralNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLMetadataNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLNumberNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLObjectNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLPropertySpecifierNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLScriptNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLStringNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLStyleNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLStyleSpecifierNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLUintNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLVectorNode;
+import org.apache.flex.compiler.visitor.IASNodeStrategy;
+import org.apache.flex.compiler.visitor.IBlockVisitor;
+import org.apache.flex.compiler.visitor.mxml.IMXMLBlockVisitor;
+
+/**
+ * @author Michael Schmalle
+ * @author Erik de Bruin
+ */
+public class MXMLNodeSwitch implements IASNodeStrategy
+{
+ private final IMXMLBlockVisitor visitor;
+
+ public MXMLNodeSwitch(IBlockVisitor visitor)
+ {
+ this.visitor = (IMXMLBlockVisitor) visitor;
+ }
+
+ @Override
+ public void handle(IASNode node)
+ {
+ switch (node.getNodeID())
+ {
+ case MXMLArrayID:
+ visitor.visitArray((IMXMLArrayNode) node);
+ break;
+ case MXMLBooleanID:
+ visitor.visitBoolean((IMXMLBooleanNode) node);
+ break;
+ case MXMLDeclarationsID:
+ visitor.visitDeclarations((IMXMLDeclarationsNode) node);
+ break;
+ case MXMLDeferredInstanceID:
+ visitor.visitDeferredInstance((IMXMLDeferredInstanceNode) node);
+ break;
+ case MXMLDocumentID:
+ visitor.visitDocument((IMXMLDocumentNode) node);
+ break;
+ case MXMLEventSpecifierID:
+ visitor.visitEventSpecifier((IMXMLEventSpecifierNode) node);
+ break;
+ case MXMLFileID:
+ visitor.visitFile((IMXMLFileNode) node);
+ break;
+ case MXMLIntID:
+ visitor.visitInt((IMXMLIntNode) node);
+ break;
+ case MXMLInstanceID:
+ visitor.visitInstance((IMXMLInstanceNode) node);
+ break;
+ case MXMLLiteralID:
+ visitor.visitLiteral((IMXMLLiteralNode) node);
+ break;
+ case MXMLNumberID:
+ visitor.visitNumber((IMXMLNumberNode) node);
+ break;
+ case MXMLPropertySpecifierID:
+ visitor.visitPropertySpecifier((IMXMLPropertySpecifierNode) node);
+ break;
+ case MXMLScriptID:
+ visitor.visitScript((IMXMLScriptNode) node);
+ break;
+ case MXMLStringID:
+ visitor.visitString((IMXMLStringNode) node);
+ break;
+ case MXMLStyleSpecifierID:
+ visitor.visitStyleSpecifier((IMXMLStyleSpecifierNode) node);
+ break;
+ case MXMLUintID:
+ visitor.visitUint((IMXMLUintNode) node);
+ break;
+ case MXMLStyleID:
+ visitor.visitStyleBlock((IMXMLStyleNode)node);
+ break;
+ case MXMLStateID:
+ visitor.visitInstance((IMXMLInstanceNode) node);
+ break;
+ case MXMLFactoryID:
+ visitor.visitFactory((IMXMLFactoryNode) node);
+ break;
+ case MXMLComponentID:
+ visitor.visitComponent((IMXMLComponentNode) node);
+ break;
+ case MXMLMetadataID:
+ visitor.visitMetadata((IMXMLMetadataNode) node);
+ break;
+ case MXMLEmbedID:
+ visitor.visitEmbed((IMXMLEmbedNode) node);
+ break;
+ case MXMLImplementsID:
+ visitor.visitImplements((IMXMLImplementsNode) node);
+ break;
+ case MXMLVectorID:
+ visitor.visitVector((IMXMLVectorNode) node);
+ break;
+ case MXMLDataBindingID:
+ visitor.visitDatabinding((IMXMLDataBindingNode) node);
+ break;
+ case MXMLBindingID:
+ visitor.visitBinding((IMXMLBindingNode) node);
+ break;
+ case MXMLObjectID:
+ visitor.visitObject((IMXMLObjectNode) node);
+ break;
+ case MXMLApplicationID:
+ case MXMLBindingAttributeID:
+ case MXMLClassID:
+ case MXMLClassDefinitionID:
+ case MXMLClearID:
+ case MXMLConcatenatedDataBindingID:
+ case MXMLDateID:
+ case MXMLDefinitionID:
+ case MXMLDesignLayerID:
+ case MXMLEffectSpecifierID:
+ case MXMLFunctionID:
+ case MXMLHTTPServiceID:
+ case MXMLHTTPServiceRequestID:
+ case MXMLLibraryID:
+ case MXMLModelID:
+ case MXMLModelPropertyID:
+ case MXMLModelRootID:
+ case MXMLPrivateID:
+ case MXMLRegExpID:
+ case MXMLRemoteObjectID:
+ case MXMLRemoteObjectMethodID:
+ case MXMLReparentID:
+ //case MXMLRepeaterID:
+ case MXMLResourceID:
+ case MXMLWebServiceID:
+ case MXMLWebServiceOperationID:
+ case MXMLXMLID:
+ case MXMLXMLListID:
+ default:
+ throw new IllegalArgumentException(
+ "No handler specified for nodes of type '"
+ + node.getNodeID().getParaphrase() + "'");
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/problems/UnsupportedLanguageFeatureProblem.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/problems/UnsupportedLanguageFeatureProblem.java b/compiler-jx/src/main/java/org/apache/flex/compiler/problems/UnsupportedLanguageFeatureProblem.java
new file mode 100644
index 0000000..fbd55cd
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/problems/UnsupportedLanguageFeatureProblem.java
@@ -0,0 +1,37 @@
+/* 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.
+ *
+ */
+
+ package org.apache.flex.compiler.problems;
+
+import org.apache.flex.compiler.common.ISourceLocation;
+import org.apache.flex.compiler.problems.annotations.ProblemClassification;
+
+@ProblemClassification(CompilerProblemClassification.SYNTAX_ERROR)
+public class UnsupportedLanguageFeatureProblem extends CodegenProblem
+{
+
+ public static final String DESCRIPTION =
+ "'${tokenText}' cannot be cross-compiled.";
+
+ public UnsupportedLanguageFeatureProblem(ISourceLocation site, String text)
+ {
+ super(site);
+ tokenText = text;
+ }
+
+ public final String tokenText;
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/targets/IJSTarget.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/targets/IJSTarget.java b/compiler-jx/src/main/java/org/apache/flex/compiler/targets/IJSTarget.java
new file mode 100644
index 0000000..1fb4508
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/targets/IJSTarget.java
@@ -0,0 +1,52 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.targets;
+
+import java.util.Collection;
+
+import org.apache.flex.compiler.clients.JSConfiguration;
+import org.apache.flex.compiler.driver.IBackend;
+import org.apache.flex.compiler.driver.js.IJSApplication;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.projects.IASProject;
+
+/**
+ * The {@link IJSTarget} interface allows the compiler an abstraction to
+ * <em>how</em> the actual JavaScript is built.
+ * <p>
+ * The interface ties into the {@link IBackend} and is created at the start of
+ * compile before the {@link JSConfiguration} class is configured.
+ *
+ * @author Michael Schmalle
+ *
+ * @see IBackend#createJSTarget(IASProject, ITargetSettings,
+ * ITargetProgressMonitor)
+ */
+public interface IJSTarget extends ITarget
+{
+ /**
+ * Build the target JavaScript application and collect problems. Every time
+ * the method is called, a new {@link IJSApplication} model is created.
+ *
+ * @param problems compilation problems output
+ * @return IJSApplication if build is a success.
+ */
+ IJSApplication build(Collection<ICompilerProblem> problems);
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/utils/ASNodeUtils.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/ASNodeUtils.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/ASNodeUtils.java
new file mode 100644
index 0000000..b7c524e
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/ASNodeUtils.java
@@ -0,0 +1,93 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.utils;
+
+import java.util.ArrayList;
+
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IBlockNode;
+import org.apache.flex.compiler.tree.as.IConditionalNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IOperatorNode;
+import org.apache.flex.compiler.tree.as.ISwitchNode;
+import org.apache.flex.compiler.tree.as.ITerminalNode;
+
+/**
+ * @author Michael Schmalle
+ */
+public class ASNodeUtils
+{
+ //--------------------------------------------------------------------------
+ // Temp: These need JIRA tickets
+ //--------------------------------------------------------------------------
+
+ // there seems to be a bug in the ISwitchNode.getCaseNodes(), need to file a bug
+ public static final IConditionalNode[] getCaseNodes(ISwitchNode node)
+ {
+ IBlockNode block = (IBlockNode) node.getChild(1);
+ int childCount = block.getChildCount();
+ ArrayList<IConditionalNode> retVal = new ArrayList<IConditionalNode>(
+ childCount);
+
+ for (int i = 0; i < childCount; i++)
+ {
+ IASNode child = block.getChild(i);
+ if (child instanceof IConditionalNode)
+ retVal.add((IConditionalNode) child);
+ }
+
+ return retVal.toArray(new IConditionalNode[0]);
+ }
+
+ // there seems to be a bug in the ISwitchNode.getDefaultNode(), need to file a bug
+ public static final ITerminalNode getDefaultNode(ISwitchNode node)
+ {
+ IBlockNode block = (IBlockNode) node.getChild(1);
+ int childCount = block.getChildCount();
+ for (int i = childCount - 1; i >= 0; i--)
+ {
+ IASNode child = block.getChild(i);
+ if (child instanceof ITerminalNode)
+ return (ITerminalNode) child;
+ }
+
+ return null;
+ }
+
+ public static boolean hasParenOpen(IOperatorNode node)
+ {
+ return node.hasParenthesis();
+ //return node.getParent() instanceof IBinaryOperatorNode
+ // && !ASNodeUtils.isString(node.getRightOperandNode());
+ }
+
+ public static boolean hasParenClose(IOperatorNode node)
+ {
+ return node.hasParenthesis();
+ //return node.getParent() instanceof IBinaryOperatorNode
+ // && !ASNodeUtils.isString(node.getRightOperandNode());
+ }
+
+ public static boolean isString(IExpressionNode node)
+ {
+ return node.getNodeID() == ASTNodeID.LiteralStringID;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/utils/DefinitionUtils.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/DefinitionUtils.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/DefinitionUtils.java
new file mode 100644
index 0000000..f13c427
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/DefinitionUtils.java
@@ -0,0 +1,37 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.utils;
+
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.IInterfaceDefinition;
+
+/**
+ * @author Michael Schmalle
+ */
+public class DefinitionUtils
+{
+ public static final boolean isMemberDefinition(IDefinition definition)
+ {
+ return definition != null
+ && (definition.getParent() instanceof IClassDefinition || definition
+ .getParent() instanceof IInterfaceDefinition);
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerUtil.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerUtil.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerUtil.java
new file mode 100644
index 0000000..cab0752
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerUtil.java
@@ -0,0 +1,98 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.utils;
+
+import java.security.Permission;
+
+import com.google.javascript.jscomp.CommandLineRunner;
+
+public class JSClosureCompilerUtil
+{
+
+ public static void run(String[] options)
+ {
+ forbidSystemExitCall();
+ try
+ {
+ JSClosureCommandLineRunner.main(options);
+ }
+ catch (ExitTrappedException e)
+ {
+ // (erikdebruin) the CLR issued an System.Exit(), but we have
+ // denied the request ;-)
+ }
+ finally
+ {
+ enableSystemExitCall();
+ }
+ }
+
+ private static class JSClosureCommandLineRunner extends CommandLineRunner
+ {
+ JSClosureCommandLineRunner(String[] args)
+ {
+ super(args);
+ }
+
+ public static void main(String[] args)
+ {
+ JSClosureCommandLineRunner runner = new JSClosureCommandLineRunner(
+ args);
+
+ if (runner.shouldRunCompiler())
+ {
+ runner.run();
+ }
+ else
+ {
+ System.exit(-1);
+ }
+ }
+ }
+
+ private static class ExitTrappedException extends SecurityException
+ {
+ private static final long serialVersionUID = 666;
+ }
+
+ private static void forbidSystemExitCall()
+ {
+ final SecurityManager securityManager = new SecurityManager() {
+ @Override
+ public void checkPermission(Permission permission)
+ {
+ }
+
+ @Override
+ public void checkExit(int status)
+ {
+ throw new ExitTrappedException();
+ }
+ };
+
+ System.setSecurityManager(securityManager);
+ }
+
+ private static void enableSystemExitCall()
+ {
+ System.setSecurityManager(null);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
new file mode 100644
index 0000000..4008b01
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/JSClosureCompilerWrapper.java
@@ -0,0 +1,305 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.utils;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+
+import com.google.javascript.jscomp.CheckLevel;
+import com.google.javascript.jscomp.CommandLineRunner;
+import com.google.javascript.jscomp.CompilationLevel;
+import com.google.javascript.jscomp.Compiler;
+import com.google.javascript.jscomp.CompilerOptions;
+import com.google.javascript.jscomp.CompilerOptions.LanguageMode;
+import com.google.javascript.jscomp.DependencyOptions;
+import com.google.javascript.jscomp.DiagnosticGroups;
+import com.google.javascript.jscomp.FlexJSDiagnosticGroups;
+import com.google.javascript.jscomp.SourceFile;
+import com.google.javascript.jscomp.SourceMap;
+import com.google.javascript.jscomp.WarningLevel;
+
+public class JSClosureCompilerWrapper
+{
+
+ public JSClosureCompilerWrapper(List<String> args)
+ {
+ Compiler.setLoggingLevel(Level.INFO);
+
+ compiler_ = new Compiler();
+
+ ArrayList<String> splitArgs = new ArrayList<String>();
+ for (String s : args)
+ {
+ if (s.contains(" "))
+ {
+ String[] parts = s.split(" ");
+ for (String part : parts)
+ splitArgs.add(part);
+ }
+ else
+ splitArgs.add(s);
+ }
+ String[] stringArgs = new String[splitArgs.size()];
+ splitArgs.toArray(stringArgs);
+ options_ = new CompilerOptionsParser(stringArgs).getOptions();
+
+ jsSourceFiles_ = new ArrayList<SourceFile>();
+ jsExternsFiles_ = new ArrayList<SourceFile>();
+
+ initOptions(args);
+ initExterns();
+
+ }
+
+ private Compiler compiler_;
+ private CompilerOptions options_;
+ private List<SourceFile> jsExternsFiles_;
+ private List<SourceFile> jsSourceFiles_;
+
+ public String targetFilePath;
+
+ public void addJSExternsFile(String fileName)
+ {
+ addJSExternsFile(SourceFile.fromFile(fileName));
+ }
+
+ public void addJSExternsFile(SourceFile file)
+ {
+ jsExternsFiles_.add(file);
+ }
+
+ public void addJSSourceFile(String fileName)
+ {
+ jsSourceFiles_.add(SourceFile.fromFile(fileName));
+ }
+
+ public void compile()
+ {
+ compiler_.compile(jsExternsFiles_, jsSourceFiles_, options_);
+
+ try
+ {
+ FileWriter targetFile = new FileWriter(targetFilePath);
+ targetFile.write(compiler_.toSource());
+ targetFile.close();
+
+ FileWriter sourceMapFile = new FileWriter(options_.sourceMapOutputPath);
+ compiler_.getSourceMap().appendTo(sourceMapFile, "");
+ sourceMapFile.close();
+ }
+ catch (IOException error)
+ {
+ System.out.println(error);
+ }
+
+ /*
+ for (JSError message : compiler_.getWarnings())
+ {
+ System.err.println("Warning message: " + message.toString());
+ }
+
+ for (JSError message : compiler_.getErrors())
+ {
+ System.err.println("Error message: " + message.toString());
+ }
+ */
+ }
+
+ @SuppressWarnings( "deprecation" )
+ private void initExterns()
+ {
+ try
+ {
+ List<SourceFile> defaultExterns = CommandLineRunner.getDefaultExterns();
+ for (SourceFile defaultExtern : defaultExterns)
+ {
+ this.addJSExternsFile(defaultExtern);
+ }
+ }
+ catch (IOException error)
+ {
+ System.out.println(error);
+ }
+ }
+
+ private void initOptions(List<String> args)
+ {
+ final String JS_FLAG = "--js ";
+
+ boolean hasCompilationLevel = false;
+ boolean hasWarningLevel = false;
+ for (String s : args)
+ {
+ if (s.startsWith(JS_FLAG))
+ addJSSourceFile(s.substring(JS_FLAG.length()));
+
+ if (s.startsWith("--compilation_level ") ||
+ s.startsWith("-O "))
+ hasCompilationLevel = true;
+
+ if (s.startsWith("--warning_level ") ||
+ s.startsWith("-W "))
+ hasWarningLevel = true;
+ }
+ if (!hasCompilationLevel)
+ CompilationLevel.ADVANCED_OPTIMIZATIONS.setOptionsForCompilationLevel(
+ options_);
+
+ if (!hasWarningLevel)
+ WarningLevel.VERBOSE.setOptionsForWarningLevel(options_);
+
+ String[] asdocTags = new String[] {"productversion",
+ "playerversion", "langversion", "copy",
+ "asparam", "asreturn", "asprivate",
+ "flexjsignoreimport", "flexjsignorecoercion"};
+ options_.setExtraAnnotationNames(Arrays.asList(asdocTags));
+ }
+
+ public void setOptions(String sourceMapPath, boolean useStrictPublishing, String projectName)
+ {
+ if (useStrictPublishing)
+ {
+ // (erikdebruin) set compiler flags to 'strictest' to allow maximum
+ // code optimization
+
+ options_.setDefineToBooleanLiteral("goog.DEBUG", true);
+
+ // ToDo (erikdebruin): re-evaluate this option on future GC release
+ options_.setLanguageIn(LanguageMode.ECMASCRIPT5_STRICT);
+
+ options_.setPreferSingleQuotes(true);
+
+ options_.setFoldConstants(true);
+ options_.setDeadAssignmentElimination(true);
+ options_.setInlineConstantVars(true);
+ options_.setInlineFunctions(true);
+ options_.setInlineLocalFunctions(true);
+ options_.setCrossModuleCodeMotion(true);
+ options_.setCoalesceVariableNames(true);
+ options_.setCrossModuleMethodMotion(true);
+ options_.setInlineGetters(true);
+ options_.setInlineVariables(true);
+ options_.setSmartNameRemoval(true);
+ options_.setRemoveDeadCode(true);
+ options_.setCheckMissingReturn(CheckLevel.WARNING);
+ options_.setExtractPrototypeMemberDeclarations(true);
+ options_.setRemoveUnusedPrototypeProperties(true);
+ options_.setRemoveUnusedPrototypePropertiesInExterns(false);
+ options_.setRemoveUnusedClassProperties(true);
+ options_.setRemoveUnusedVars(true);
+ options_.setRemoveUnusedLocalVars(true);
+ options_.setCollapseVariableDeclarations(true);
+ options_.setCollapseAnonymousFunctions(true);
+ options_.setAliasAllStrings(true);
+ options_.setConvertToDottedProperties(true);
+ options_.setRewriteFunctionExpressions(true);
+ options_.setOptimizeParameters(true);
+ options_.setOptimizeReturns(true);
+ options_.setOptimizeCalls(true);
+ options_.setOptimizeArgumentsArray(true);
+ options_.setGenerateExports(true);
+ options_.setExportLocalPropertyDefinitions(true);
+
+ DependencyOptions dopts = new DependencyOptions();
+ ArrayList<String> entryPoints = new ArrayList<String>();
+ entryPoints.add(projectName);
+ dopts.setDependencyPruning(true)
+ .setDependencySorting(true)
+ .setMoocherDropping(true)
+ .setEntryPoints(entryPoints);
+ options_.setDependencyOptions(dopts);
+
+ // warnings already activated in previous incarnation
+ options_.setWarningLevel(DiagnosticGroups.ACCESS_CONTROLS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CONST, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CONSTANT_PROPERTY, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.STRICT_MODULE_DEP_CHECK, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.VISIBILITY, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.DEPRECATED, CheckLevel.OFF); // OFF
+
+ // the 'full' set of warnings
+ options_.setWarningLevel(DiagnosticGroups.AMBIGUOUS_FUNCTION_DECL, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CHECK_EVENTFUL_OBJECT_DISPOSAL, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.MISSING_PROVIDE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CHECK_REGEXP, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CHECK_TYPES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CHECK_USELESS_CODE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CHECK_VARIABLES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.DEBUGGER_STATEMENT_PRESENT, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.DUPLICATE_MESSAGE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.DUPLICATE_VARS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.ES3, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.ES5_STRICT, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.EXTERNS_VALIDATION, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.GLOBAL_THIS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.FILEOVERVIEW_JSDOC, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.INTERNET_EXPLORER_CHECKS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.INVALID_CASTS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.LINT_CHECKS, CheckLevel.OFF); // OFF
+ options_.setWarningLevel(DiagnosticGroups.MISPLACED_TYPE_ANNOTATION, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.MISSING_PROPERTIES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.MISSING_PROVIDE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.MISSING_REQUIRE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.MISSING_RETURN, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.NEW_CHECK_TYPES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.NON_STANDARD_JSDOC, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.REPORT_UNKNOWN_TYPES, CheckLevel.OFF); // OFF
+ options_.setWarningLevel(DiagnosticGroups.SUSPICIOUS_CODE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.TWEAKS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.TYPE_INVALIDATION, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.UNDEFINED_NAMES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.UNDEFINED_VARIABLES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.UNKNOWN_DEFINES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.UNNECESSARY_CASTS, CheckLevel.OFF); // OFF
+ options_.setWarningLevel(DiagnosticGroups.USE_OF_GOOG_BASE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.VIOLATED_MODULE_DEP, CheckLevel.WARNING);
+
+ // TODO (erikdebruin) Need to figure out how we can replace @expose
+ options_.setWarningLevel(DiagnosticGroups.DEPRECATED_ANNOTATIONS, CheckLevel.OFF);
+
+ // create custom DiagnosticGroups to shut off some individual warnings when we
+ // still want warnings for others in the group.
+ options_.setWarningLevel(FlexJSDiagnosticGroups.FLEXJS_NOT_A_CONSTRUCTOR, CheckLevel.OFF);
+ options_.setWarningLevel(FlexJSDiagnosticGroups.FLEXJS_SUPER_CALL_TO_DIFFERENT_NAME, CheckLevel.OFF);
+ options_.setWarningLevel(FlexJSDiagnosticGroups.FLEXJS_UNKNOWN_JSDOC_TYPE_NAME, CheckLevel.OFF);
+// options_.setWarningLevel(FlexJSDiagnosticGroups.FLEXJS_REFERENCE_BEFORE_DECLARE, CheckLevel.OFF);
+ }
+
+ options_.sourceMapFormat = SourceMap.Format.V3;
+ options_.sourceMapOutputPath = sourceMapPath + ".map";
+ }
+
+ private static class CompilerOptionsParser extends CommandLineRunner
+ {
+ public CompilerOptionsParser(String[] args)
+ {
+ super(args);
+ }
+
+ public CompilerOptions getOptions()
+ {
+ return createOptions();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NativeUtils.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NativeUtils.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NativeUtils.java
new file mode 100644
index 0000000..9ea630b
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/NativeUtils.java
@@ -0,0 +1,161 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.utils;
+
+/**
+ * @author Michael Schmalle
+ */
+public class NativeUtils
+{
+ public enum NativeASType
+ {
+ Any("*"), // not JS but use full in the context of native
+
+ Argument("Argument"),
+ Array("Array"),
+ Boolean("Boolean"),
+ Class("Class"),
+ Date("Date"),
+ Error("Error"),
+ EvalError("EvalError"),
+ Function("Function"),
+ Infinity("Infinity"),
+ Math("Math"),
+ JSON("JSON"),
+ NaN("NaN"),
+ Namespace("Namespace"),
+ Number("Number"),
+ Object("Object"),
+ QName("QName"),
+ RangeError("RangeError"),
+ ReferenceError("ReferenceError"),
+ RegExp("RegExp"),
+ String("String"),
+ SyntaxError("SyntaxError"),
+ TypeError("TypeError"),
+ URIError("URIError"),
+ Vector("Vector"),
+ XML("XML"),
+ XMLList("XMLList"),
+ _assert("assert"),
+ decodeURI("decodeURI"),
+ decodeURIComponent("decodeURIComponent"),
+ encodeURI("encodeURI"),
+ encodeURIComponent("encodeURIComponent"),
+ escape("escape"),
+ _int("int"),
+ isFinite("isFinite"),
+ isNaN("isNaN"),
+ isXMLName("isXMLName"),
+ parseFloat("parseFloat"),
+ parseInt("parseInt"),
+ trace("trace"),
+ uint("uint"),
+ undefined("undefined"),
+ unescape("unescape");
+
+ private final String value;
+
+ NativeASType(String value)
+ {
+ this.value = value;
+ }
+
+ public String getValue()
+ {
+ return value;
+ }
+ }
+
+ public enum NativeJSType
+ {
+ // (erikdebruin) Ref.: https://cwiki.apache.org/confluence/display/FLEX/Full+Table
+
+ Array("Array"),
+ Boolean("Boolean"),
+ decodeURI("decodeURI"),
+ decodeURIComponent("decodeURIComponent"),
+ encodeURI("encodeURI"),
+ encodeURIComponent("encodeURIComponent"),
+ escape("escape"),
+ isFinite("isFinite"),
+ isNaN("isNaN"),
+ Number("Number"),
+ Object("Object"),
+ parseFloat("parseFloat"),
+ parseInt("parseInt"),
+ String("String"),
+ unescape("unescape"),
+
+ // (erikdebruin) These aren't strictly 'native' to JS, but the
+ // Publisher provides global functions, so, for all
+ // intends and purposes they behave like they are.
+ _int("int"),
+ trace("trace"),
+ uint("uint"),
+
+ // (erikdebruin) These are left out, but should, at some point, be
+ // treated as if they actually are 'native'.
+ /*
+ isXMLName("isXMLName"),
+ Vector("Vector"),
+ XML("XML"),
+ XMLList("XMLList"),
+ */
+
+ _byte("byte"),
+
+ ;
+ private final String value;
+
+ NativeJSType(String value)
+ {
+ this.value = value;
+ }
+
+ public String getValue()
+ {
+ return value;
+ }
+ }
+
+ public static boolean isNative(String type)
+ {
+ for (NativeASType test : NativeASType.values())
+ {
+ if (test.getValue().equals(type))
+ return true;
+ }
+ if (type.startsWith("Vector.<"))
+ return true;
+ return false;
+ }
+
+ public static boolean isJSNative(String type)
+ {
+ for (NativeJSType test : NativeJSType.values())
+ {
+ if (test.getValue().equals(type))
+ return true;
+ }
+ return false;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
new file mode 100644
index 0000000..f1240e4
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
@@ -0,0 +1,224 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.utils;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.logging.Level;
+
+import com.google.javascript.jscomp.CheckLevel;
+import com.google.javascript.jscomp.CommandLineRunner;
+import com.google.javascript.jscomp.CompilationLevel;
+import com.google.javascript.jscomp.Compiler;
+import com.google.javascript.jscomp.CompilerOptions;
+import com.google.javascript.jscomp.DiagnosticGroups;
+import com.google.javascript.jscomp.SourceFile;
+import com.google.javascript.jscomp.SourceMap;
+import com.google.javascript.jscomp.WarningLevel;
+import com.google.javascript.rhino.Node;
+import com.google.javascript.rhino.Token;
+
+public class VF2JSClosureCompilerWrapper
+{
+
+ public VF2JSClosureCompilerWrapper()
+ {
+ Compiler.setLoggingLevel(Level.ALL);
+
+ compiler_ = new Compiler();
+
+ options_ = new CompilerOptions();
+ initOptions();
+
+ jsExternsFiles_ = new ArrayList<SourceFile>();
+ initExterns();
+
+ jsSourceFiles_ = new ArrayList<SourceFile>();
+ }
+
+ private Compiler compiler_;
+ private CompilerOptions options_;
+ private List<SourceFile> jsExternsFiles_;
+ private List<SourceFile> jsSourceFiles_;
+
+ public String targetFilePath;
+
+ public void addJSExternsFile(String fileName)
+ {
+ addJSExternsFile(SourceFile.fromFile(fileName));
+ }
+
+ public void addJSExternsFile(SourceFile file)
+ {
+ jsExternsFiles_.add(file);
+ }
+
+ public void addJSSourceFile(String fileName)
+ {
+ jsSourceFiles_.add(SourceFile.fromFile(fileName));
+ }
+
+ public void compile()
+ {
+ compiler_.compile(jsExternsFiles_, jsSourceFiles_, options_);
+
+ try
+ {
+ FileWriter targetFile = new FileWriter(targetFilePath);
+ targetFile.write(compiler_.toSource());
+ targetFile.close();
+
+ FileWriter sourceMapFile = new FileWriter(options_.sourceMapOutputPath);
+ compiler_.getSourceMap().appendTo(sourceMapFile, "");
+ sourceMapFile.close();
+ }
+ catch (IOException error)
+ {
+ System.out.println(error);
+ }
+ }
+
+ @SuppressWarnings( "deprecation" )
+ private void initExterns()
+ {
+ try
+ {
+ List<SourceFile> defaultExterns = CommandLineRunner.getDefaultExterns();
+ for (SourceFile defaultExtern : defaultExterns)
+ {
+ this.addJSExternsFile(defaultExtern);
+ }
+ }
+ catch (IOException error)
+ {
+ System.out.println(error);
+ }
+ }
+
+ private void initOptions()
+ {
+ CompilationLevel.ADVANCED_OPTIMIZATIONS.setOptionsForCompilationLevel(
+ options_);
+
+ WarningLevel.VERBOSE.setOptionsForWarningLevel(options_);
+
+ String[] asdocTags = new String[] {"productversion",
+ "playerversion", "langversion", "copy"};
+ options_.setExtraAnnotationNames(Arrays.asList(asdocTags));
+ }
+
+ public void setOptions(String sourceMapPath, boolean useStrictPublishing)
+ {
+ if (useStrictPublishing)
+ {
+ // (erikdebruin) set compiler flags to 'strictest' to allow maximum
+ // code optimization
+
+ options_.getDefineReplacements().put(
+ "goog.DEBUG", new Node(Token.TRUE));
+
+ // ToDo (erikdebruin): re-evaluate this option on future GC release
+ //options_.setLanguageIn(LanguageMode.ECMASCRIPT6_STRICT);
+
+ options_.setPreferSingleQuotes(true);
+
+ options_.setFoldConstants(true);
+ options_.setDeadAssignmentElimination(true);
+ options_.setInlineConstantVars(true);
+ options_.setInlineFunctions(true);
+ options_.setInlineLocalFunctions(true);
+ options_.setCrossModuleCodeMotion(true);
+ options_.setCoalesceVariableNames(true);
+ options_.setCrossModuleMethodMotion(true);
+ options_.setInlineGetters(true);
+ options_.setInlineVariables(true);
+ options_.setSmartNameRemoval(true);
+ options_.setRemoveDeadCode(true);
+ options_.setCheckMissingReturn(CheckLevel.WARNING);
+ options_.setExtractPrototypeMemberDeclarations(true);
+ options_.setRemoveUnusedPrototypeProperties(true);
+ options_.setRemoveUnusedPrototypePropertiesInExterns(true);
+ options_.setRemoveUnusedClassProperties(true);
+ options_.setRemoveUnusedVars(true);
+ options_.setRemoveUnusedLocalVars(true);
+ options_.setCollapseVariableDeclarations(true);
+ options_.setCollapseAnonymousFunctions(true);
+ options_.setAliasAllStrings(true);
+ options_.setConvertToDottedProperties(true);
+ options_.setRewriteFunctionExpressions(true);
+ options_.setOptimizeParameters(true);
+ options_.setOptimizeReturns(true);
+ options_.setOptimizeCalls(true);
+ options_.setOptimizeArgumentsArray(true);
+
+ // warnings already activated in previous incarnation
+ options_.setWarningLevel(DiagnosticGroups.ACCESS_CONTROLS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CONST, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CONSTANT_PROPERTY, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.STRICT_MODULE_DEP_CHECK, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.VISIBILITY, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.DEPRECATED, CheckLevel.OFF); // OFF
+
+ // the 'full' set of warnings
+ options_.setWarningLevel(DiagnosticGroups.AMBIGUOUS_FUNCTION_DECL, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CHECK_EVENTFUL_OBJECT_DISPOSAL, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.MISSING_PROVIDE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CHECK_REGEXP, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CHECK_TYPES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CHECK_USELESS_CODE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.CHECK_VARIABLES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.DEBUGGER_STATEMENT_PRESENT, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.DUPLICATE_MESSAGE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.DUPLICATE_VARS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.ES3, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.ES5_STRICT, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.EXTERNS_VALIDATION, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.GLOBAL_THIS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.FILEOVERVIEW_JSDOC, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.INTERNET_EXPLORER_CHECKS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.INVALID_CASTS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.LINT_CHECKS, CheckLevel.OFF); // OFF
+ options_.setWarningLevel(DiagnosticGroups.MISPLACED_TYPE_ANNOTATION, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.MISSING_PROPERTIES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.MISSING_PROVIDE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.MISSING_REQUIRE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.MISSING_RETURN, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.NEW_CHECK_TYPES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.NON_STANDARD_JSDOC, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.REPORT_UNKNOWN_TYPES, CheckLevel.OFF); // OFF
+ options_.setWarningLevel(DiagnosticGroups.SUSPICIOUS_CODE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.TWEAKS, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.TYPE_INVALIDATION, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.UNDEFINED_NAMES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.UNDEFINED_VARIABLES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.UNKNOWN_DEFINES, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.UNNECESSARY_CASTS, CheckLevel.OFF); // OFF
+ options_.setWarningLevel(DiagnosticGroups.USE_OF_GOOG_BASE, CheckLevel.WARNING);
+ options_.setWarningLevel(DiagnosticGroups.VIOLATED_MODULE_DEP, CheckLevel.WARNING);
+ }
+
+ options_.sourceMapFormat = SourceMap.Format.V3;
+ options_.sourceMapOutputPath = sourceMapPath + ".map";
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSProjectUtils.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSProjectUtils.java b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSProjectUtils.java
new file mode 100644
index 0000000..0542097
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/utils/VF2JSProjectUtils.java
@@ -0,0 +1,132 @@
+/*
+ *
+ * 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.
+ *
+ */
+package org.apache.flex.compiler.utils;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.commons.io.FileUtils;
+
+import com.google.common.io.Files;
+
+
+public class VF2JSProjectUtils
+{
+
+ private static File tempDir;
+
+ public static final String createTempProject(String projectFilePath,
+ boolean isFlashBuilderProject)
+ {
+ tempDir = Files.createTempDir();
+
+ String fileName = projectFilePath.substring(projectFilePath.lastIndexOf(File.separator) + 1, projectFilePath.length());
+
+ String path = projectFilePath.substring(0, projectFilePath.lastIndexOf(File.separator));
+
+ createTempProjectDir(new File(path).listFiles(), "");
+
+ return tempDir.getAbsolutePath() + File.separator + fileName;
+ }
+
+ private static void createTempProjectDir(File[] files, String parentPath)
+ {
+ for (File file : files)
+ {
+ if (file.isDirectory())
+ {
+ String path = parentPath + File.separator + file.getName();
+
+ new File(tempDir + File.separator + path).mkdirs();
+
+ createTempProjectDir(file.listFiles(), path);
+ }
+ else
+ {
+ String fileName = file.getName();
+
+ if (fileName.contains(".") && fileName.charAt(0) != '.')
+ {
+ String extension = fileName.substring(fileName.lastIndexOf("."), fileName.length());
+
+ if (extension.equals(".mxml") || extension.equals(".as"))
+ {
+ File intermediateFile = file;
+ String tempFileName = fileName.substring(0, fileName.indexOf("."));
+ File targetDir = new File(tempDir + File.separator + parentPath);
+
+ createTempFileWithVF2JSNamespace(intermediateFile,
+ tempFileName, false, targetDir, extension);
+ }
+ }
+ }
+ }
+ }
+
+ private static File createTempFileWithVF2JSNamespace(File intermediateFile,
+ String tempFileName, boolean createTempFile, File targetDir,
+ String extension)
+ {
+ File tempFile = null;
+
+ try
+ {
+ String content = FileUtils.readFileToString(intermediateFile, "UTF-8");
+
+ // mx (MXML)
+ content = content.replace(
+ "xmlns:mx=\"library://ns.adobe.com/flex/mx\"",
+ "xmlns:vf2js_mx=\"http://flex.apache.org/vf2js_mx/ns\"");
+ content = content.replace("<mx:", "<vf2js_mx:");
+ content = content.replace("</mx:", "</vf2js_mx:");
+
+ // mx (AS)
+ content = content.replace("mx.", "vf2js_mx.");
+
+ // s (MXML)
+ content = content.replace(
+ "xmlns:s=\"library://ns.adobe.com/flex/spark\"",
+ "xmlns:vf2js_s=\"http://flex.apache.org/vf2js_s/ns\"");
+ content = content.replace("<s:", "<vf2js_s:");
+ content = content.replace("</s:", "</vf2js_s:");
+
+ // s (AS)
+ content = content.replace("spark.", "vf2js_s.");
+
+ if (createTempFile)
+ {
+ tempFile = File.createTempFile(tempFileName, extension,
+ targetDir);
+ tempFile.deleteOnExit();
+ }
+ else
+ {
+ tempFile = new File(targetDir.getAbsolutePath(),
+ tempFileName + extension);
+ }
+ FileUtils.writeStringToFile(tempFile, content, "UTF-8");
+ }
+ catch (IOException e)
+ {
+ throw new RuntimeException("Generating file failed", e);
+ }
+
+ return tempFile;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IASNodeStrategy.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IASNodeStrategy.java b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IASNodeStrategy.java
new file mode 100644
index 0000000..589e00e
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IASNodeStrategy.java
@@ -0,0 +1,38 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.visitor;
+
+import org.apache.flex.compiler.tree.as.IASNode;
+
+/**
+ * A simple strategy to allow composition of {@link IASNode} handling when
+ * walking the AST node tree.
+ *
+ * @author Michael Schmalle
+ */
+public interface IASNodeStrategy
+{
+ /**
+ * The strategy will handle the specific {@link IASNode}.
+ *
+ * @param node The {@link IASNode} to handle.
+ */
+ void handle(IASNode node);
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IBlockVisitor.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IBlockVisitor.java b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IBlockVisitor.java
new file mode 100644
index 0000000..5681b21
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IBlockVisitor.java
@@ -0,0 +1,28 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.visitor;
+
+/**
+ * @author Erik de Bruin
+ */
+public interface IBlockVisitor
+{
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IBlockWalker.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IBlockWalker.java b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IBlockWalker.java
new file mode 100644
index 0000000..3bba54c
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/IBlockWalker.java
@@ -0,0 +1,47 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.visitor;
+
+import org.apache.flex.compiler.projects.ICompilerProject;
+import org.apache.flex.compiler.tree.as.IASNode;
+
+/**
+ * @author Michael Schmalle
+ * @author Erik de Bruin
+ */
+public interface IBlockWalker
+{
+
+ /**
+ * Returns the current {@link ICompilerProject} for the traverse state.
+ */
+ ICompilerProject getProject();
+
+ /**
+ * Traverses an {@link IASNode} based on the semantics of the known node.
+ * <p>
+ * Typically uses the {@link IASNodeStrategy#handle(IASNode)} to delegate
+ * how the node will be traversed.
+ *
+ * @param node The {@link IASNode} to traverse using the current strategy
+ */
+ void walk(IASNode node);
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/as/IASBlockVisitor.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/as/IASBlockVisitor.java b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/as/IASBlockVisitor.java
new file mode 100644
index 0000000..db3cda0
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/as/IASBlockVisitor.java
@@ -0,0 +1,229 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.visitor.as;
+
+import org.apache.flex.compiler.internal.codegen.as.ASBlockWalker;
+import org.apache.flex.compiler.internal.tree.as.LabeledStatementNode;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
+import org.apache.flex.compiler.tree.as.IBlockNode;
+import org.apache.flex.compiler.tree.as.ICatchNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IContainerNode;
+import org.apache.flex.compiler.tree.as.IDefaultXMLNamespaceNode;
+import org.apache.flex.compiler.tree.as.IDynamicAccessNode;
+import org.apache.flex.compiler.tree.as.IEmbedNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IFileNode;
+import org.apache.flex.compiler.tree.as.IForLoopNode;
+import org.apache.flex.compiler.tree.as.IFunctionCallNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
+import org.apache.flex.compiler.tree.as.IGetterNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.tree.as.IIfNode;
+import org.apache.flex.compiler.tree.as.IImportNode;
+import org.apache.flex.compiler.tree.as.IInterfaceNode;
+import org.apache.flex.compiler.tree.as.IIterationFlowNode;
+import org.apache.flex.compiler.tree.as.IKeywordNode;
+import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
+import org.apache.flex.compiler.tree.as.ILiteralNode;
+import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
+import org.apache.flex.compiler.tree.as.INamespaceAccessExpressionNode;
+import org.apache.flex.compiler.tree.as.INamespaceNode;
+import org.apache.flex.compiler.tree.as.INumericLiteralNode;
+import org.apache.flex.compiler.tree.as.IObjectLiteralValuePairNode;
+import org.apache.flex.compiler.tree.as.IPackageNode;
+import org.apache.flex.compiler.tree.as.IParameterNode;
+import org.apache.flex.compiler.tree.as.IReturnNode;
+import org.apache.flex.compiler.tree.as.ISetterNode;
+import org.apache.flex.compiler.tree.as.ISwitchNode;
+import org.apache.flex.compiler.tree.as.ITerminalNode;
+import org.apache.flex.compiler.tree.as.ITernaryOperatorNode;
+import org.apache.flex.compiler.tree.as.IThrowNode;
+import org.apache.flex.compiler.tree.as.ITryNode;
+import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
+import org.apache.flex.compiler.tree.as.IUnaryOperatorNode;
+import org.apache.flex.compiler.tree.as.IUseNamespaceNode;
+import org.apache.flex.compiler.tree.as.IVariableExpressionNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+import org.apache.flex.compiler.tree.as.IWhileLoopNode;
+import org.apache.flex.compiler.tree.as.IWithNode;
+import org.apache.flex.compiler.tree.metadata.IMetaTagNode;
+import org.apache.flex.compiler.tree.metadata.IMetaTagsNode;
+import org.apache.flex.compiler.units.ICompilationUnit;
+import org.apache.flex.compiler.visitor.IASNodeStrategy;
+import org.apache.flex.compiler.visitor.IBlockVisitor;
+
+/**
+ * The {@link IASBlockVisitor} interface allows an {@link IASNodeStrategy} to
+ * delegate within it's {@link IASNodeStrategy#handle(IASNode)} method to this
+ * API's visitor method.
+ * <p>
+ * <strong>Note</strong> This API is not complete.
+ *
+ * @author Michael Schmalle
+ *
+ * @see ASBlockWalker
+ */
+public interface IASBlockVisitor extends IBlockVisitor
+{
+ //--------------------------------------------------------------------------
+ // Top level nodes
+ //--------------------------------------------------------------------------
+
+ void visitCompilationUnit(ICompilationUnit unit);
+
+ void visitFile(IFileNode node);
+
+ void visitPackage(IPackageNode node);
+
+ void visitClass(IClassNode node);
+
+ void visitInterface(IInterfaceNode node);
+
+ //--------------------------------------------------------------------------
+ // Member nodes
+ //--------------------------------------------------------------------------
+
+ // block var or field
+ void visitVariable(IVariableNode node);
+
+ void visitFunction(IFunctionNode node);
+
+ void visitGetter(IGetterNode node);
+
+ void visitSetter(ISetterNode node);
+
+ void visitNamespace(INamespaceNode node);
+
+ //--------------------------------------------------------------------------
+ // Statement nodes
+ //--------------------------------------------------------------------------
+
+ void visitIf(IIfNode node);
+
+ void visitForLoop(IForLoopNode node);
+
+ void visitWhileLoop(IWhileLoopNode node);
+
+ void visitTry(ITryNode node);
+
+ void visitCatch(ICatchNode node);
+
+ void visitSwitch(ISwitchNode node);
+
+ void visitLabeledStatement(LabeledStatementNode node);
+
+ void visitWith(IWithNode node);
+
+ void visitThrow(IThrowNode node);
+
+ //--------------------------------------------------------------------------
+ // Statement helper nodes
+ //--------------------------------------------------------------------------
+
+ void visitIterationFlow(IIterationFlowNode node);
+
+ // is a IVariableNode
+ void visitParameter(IParameterNode node);
+
+ void visitObjectLiteralValuePair(IObjectLiteralValuePairNode node);
+
+ //--------------------------------------------------------------------------
+ // Expression Statement nodes
+ //--------------------------------------------------------------------------
+
+ void visitMemberAccessExpression(IMemberAccessExpressionNode node);
+
+ void visitNamespaceAccessExpression(INamespaceAccessExpressionNode node);
+
+ void visitVariableExpression(IVariableExpressionNode node);
+
+ void visitLanguageIdentifierNode(ILanguageIdentifierNode node);
+
+ void visitReturn(IReturnNode node);
+
+ void visitDefaultXMLNamespace(IDefaultXMLNamespaceNode node);
+
+ void visitTypedExpression(ITypedExpressionNode node);
+
+ // this is a IBinaryOperatorNode goes before
+ void visitDynamicAccess(IDynamicAccessNode node);
+
+ void visitTernaryOperator(ITernaryOperatorNode node);
+
+ //--------------------------------------------------------------------------
+ // Container nodes
+ //--------------------------------------------------------------------------
+
+ void visitBlock(IBlockNode node);
+
+ //--------------------------------------------------------------------------
+ // Expression nodes
+ //--------------------------------------------------------------------------
+
+ void visitFunctionObject(IFunctionObjectNode node);
+
+ void visitFunctionCall(IFunctionCallNode node);
+
+ void visitAsOperator(IBinaryOperatorNode node);
+
+ void visitIsOperator(IBinaryOperatorNode node);
+
+ void visitBinaryOperator(IBinaryOperatorNode node);
+
+ void visitUnaryOperator(IUnaryOperatorNode node);
+
+ void visitExpression(IExpressionNode node);
+
+ //--------------------------------------------------------------------------
+ // Terminal like Expression nodes
+ //--------------------------------------------------------------------------
+
+ void visitIdentifier(IIdentifierNode node);
+
+ void visitKeyword(IKeywordNode node);
+
+ void visitLiteral(ILiteralNode node);
+
+ void visitNumericLiteral(INumericLiteralNode node);
+
+ void visitTerminal(ITerminalNode node);
+
+ //--------------------------------------------------------------------------
+ // Various nodes
+ //--------------------------------------------------------------------------
+
+ void visitImport(IImportNode node);
+
+ void visitMetaTags(IMetaTagsNode node);
+
+ void visitMetaTag(IMetaTagNode node);
+
+ void visitUseNamespace(IUseNamespaceNode node);
+
+ void visitEmbed(IEmbedNode node);
+
+ void visitContainer(IContainerNode node);
+
+ void visitE4XFilter(IMemberAccessExpressionNode node);
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/as/IASBlockWalker.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/as/IASBlockWalker.java b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/as/IASBlockWalker.java
new file mode 100644
index 0000000..f97b9ad
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/as/IASBlockWalker.java
@@ -0,0 +1,43 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.visitor.as;
+
+import java.util.List;
+
+import org.apache.flex.compiler.codegen.as.IASEmitter;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.visitor.IBlockWalker;
+
+/**
+ * @author Michael Schmalle
+ */
+public interface IASBlockWalker extends IASBlockVisitor, IBlockWalker
+{
+
+ /**
+ * The current code emitter.
+ */
+ IASEmitter getEmitter();
+
+ /**
+ * The current project errors.
+ */
+ List<ICompilerProblem> getErrors();
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/mxml/IMXMLBlockVisitor.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/mxml/IMXMLBlockVisitor.java b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/mxml/IMXMLBlockVisitor.java
new file mode 100644
index 0000000..d6c45a8
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/mxml/IMXMLBlockVisitor.java
@@ -0,0 +1,138 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.visitor.mxml;
+
+import org.apache.flex.compiler.tree.mxml.IMXMLArrayNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLBindingNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLBooleanNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLClassDefinitionNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLComponentNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDataBindingNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDeclarationsNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDeferredInstanceNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLDocumentNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLEmbedNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLEventSpecifierNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLFactoryNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLFileNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLImplementsNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLInstanceNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLIntNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLLiteralNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLMetadataNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLNumberNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLObjectNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLPropertySpecifierNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLScriptNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLStringNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLStyleNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLStyleSpecifierNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLUintNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLVectorNode;
+import org.apache.flex.compiler.units.ICompilationUnit;
+import org.apache.flex.compiler.visitor.IBlockVisitor;
+
+/**
+ * @author Michael Schmalle
+ * @author Erik de Bruin
+ */
+public interface IMXMLBlockVisitor extends IBlockVisitor
+{
+
+ //--------------------------------------------------------------------------
+
+ void visitCompilationUnit(ICompilationUnit unit);
+
+ void visitFile(IMXMLFileNode node);
+
+ void visitDocument(IMXMLDocumentNode node);
+
+ void visitClassDefinition(IMXMLClassDefinitionNode node);
+
+ void visitDeclarations(IMXMLDeclarationsNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitDeferredInstance(IMXMLDeferredInstanceNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitEventSpecifier(IMXMLEventSpecifierNode node);
+
+ void visitInstance(IMXMLInstanceNode node);
+
+ void visitPropertySpecifier(IMXMLPropertySpecifierNode node);
+
+ void visitScript(IMXMLScriptNode node);
+
+ void visitStyleBlock(IMXMLStyleNode node);
+
+ void visitStyleSpecifier(IMXMLStyleSpecifierNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitArray(IMXMLArrayNode node);
+
+ void visitBoolean(IMXMLBooleanNode node);
+
+ void visitInt(IMXMLIntNode node);
+
+ void visitNumber(IMXMLNumberNode node);
+
+ void visitString(IMXMLStringNode node);
+
+ void visitUint(IMXMLUintNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitLiteral(IMXMLLiteralNode node);
+
+ void visitFactory(IMXMLFactoryNode node);
+
+ void visitComponent(IMXMLComponentNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitMetadata(IMXMLMetadataNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitEmbed(IMXMLEmbedNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitImplements(IMXMLImplementsNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitVector(IMXMLVectorNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitDatabinding(IMXMLDataBindingNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitBinding(IMXMLBindingNode node);
+
+ //--------------------------------------------------------------------------
+
+ void visitObject(IMXMLObjectNode node);
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/mxml/IMXMLBlockWalker.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/mxml/IMXMLBlockWalker.java b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/mxml/IMXMLBlockWalker.java
new file mode 100644
index 0000000..1aab260
--- /dev/null
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/visitor/mxml/IMXMLBlockWalker.java
@@ -0,0 +1,43 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.visitor.mxml;
+
+import org.apache.flex.compiler.codegen.as.IASEmitter;
+import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
+import org.apache.flex.compiler.visitor.IBlockWalker;
+
+/**
+ * @author Michael Schmalle
+ * @author Erik de Bruin
+ */
+public interface IMXMLBlockWalker extends IMXMLBlockVisitor, IBlockWalker
+{
+
+ /**
+ * The current code emitter.
+ */
+ IASEmitter getASEmitter();
+
+ /**
+ * The current code emitter.
+ */
+ IMXMLEmitter getMXMLEmitter();
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/main/resources/META-INF/services/org.apache.flex.tools.FlexToolGroup
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/resources/META-INF/services/org.apache.flex.tools.FlexToolGroup b/compiler-jx/src/main/resources/META-INF/services/org.apache.flex.tools.FlexToolGroup
new file mode 100644
index 0000000..b2ad16f
--- /dev/null
+++ b/compiler-jx/src/main/resources/META-INF/services/org.apache.flex.tools.FlexToolGroup
@@ -0,0 +1,2 @@
+org.apache.flex.compiler.clients.FlexJSToolGroup
+org.apache.flex.compiler.clients.VF2JSToolGroup
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/c3dce49f/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/as/TestAccessorMembers.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/as/TestAccessorMembers.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/as/TestAccessorMembers.java
new file mode 100644
index 0000000..922af9c
--- /dev/null
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/as/TestAccessorMembers.java
@@ -0,0 +1,101 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+package org.apache.flex.compiler.internal.codegen.as;
+
+import org.apache.flex.compiler.internal.test.ASTestBase;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
+import org.junit.Test;
+
+/**
+ * This class tests the production of valid ActionScript3 code for Class
+ * Accessor members.
+ *
+ * @author Michael Schmalle
+ */
+public class TestAccessorMembers extends ASTestBase
+{
+ //--------------------------------------------------------------------------
+ // Accessor
+ //--------------------------------------------------------------------------
+
+ @Test
+ public void testGetAccessor()
+ {
+ IAccessorNode node = getAccessor("function get foo():int{return -1;}");
+ asBlockWalker.visitFunction(node);
+ assertOut("function get foo():int {\n\treturn -1;\n}");
+ }
+
+ @Test
+ public void testGetAccessor_withNamespace()
+ {
+ IAccessorNode node = getAccessor("public function get foo():int{return -1;}");
+ asBlockWalker.visitFunction(node);
+ assertOut("public function get foo():int {\n\treturn -1;\n}");
+ }
+
+ @Test
+ public void testGetAccessor_withNamespaceOverride()
+ {
+ IAccessorNode node = getAccessor("public override function get foo():int{return -1;}");
+ asBlockWalker.visitFunction(node);
+ assertOut("public override function get foo():int {\n\treturn -1;\n}");
+ }
+
+ @Test
+ public void testGetAccessor_withStatic()
+ {
+ IAccessorNode node = getAccessor("public static function get foo():int{return -1;}");
+ asBlockWalker.visitFunction(node);
+ assertOut("public static function get foo():int {\n\treturn -1;\n}");
+ }
+
+ @Test
+ public void testSetAccessor()
+ {
+ IAccessorNode node = getAccessor("function set foo(value:int):void{}");
+ asBlockWalker.visitFunction(node);
+ assertOut("function set foo(value:int):void {\n}");
+ }
+
+ @Test
+ public void testSetAccessor_withNamespace()
+ {
+ IAccessorNode node = getAccessor("public function set foo(value:int):void{}");
+ asBlockWalker.visitFunction(node);
+ assertOut("public function set foo(value:int):void {\n}");
+ }
+
+ @Test
+ public void testSetAccessor_withNamespaceOverride()
+ {
+ IAccessorNode node = getAccessor("public override function set foo(value:int):void{}");
+ asBlockWalker.visitFunction(node);
+ assertOut("public override function set foo(value:int):void {\n}");
+ }
+
+ @Test
+ public void testSetAccessor_withStatic()
+ {
+ IAccessorNode node = getAccessor("public static function set foo(value:int):void{}");
+ asBlockWalker.visitFunction(node);
+ assertOut("public static function set foo(value:int):void {\n}");
+ }
+}