You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2015/06/04 08:06:07 UTC
[01/42] git commit: [flex-falcon] [refs/heads/develop] - Can now
compile with IntelliJ Application and Libraries - Would be nice to stub the
legacy oem Configuration now.
Repository: flex-falcon
Updated Branches:
refs/heads/develop fc1fe3883 -> 06a2533bb
Can now compile with IntelliJ Application and Libraries
- Would be nice to stub the legacy oem Configuration now.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6ddfb7b2
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6ddfb7b2
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6ddfb7b2
Branch: refs/heads/develop
Commit: 6ddfb7b228d55d22663d570a2b2266f2efcb34af
Parents: 1208609
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Thu May 28 15:19:12 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Thu May 28 15:19:12 2015 +0100
----------------------------------------------------------------------
.../apache/flex/compiler/clients/COMPJSC.java | 4 +-
.../compiler/clients/JSCompilerEntryPoint.java | 15 +
.../apache/flex/compiler/clients/MXMLJSC.java | 14 +-
.../clients/problems/ProblemQueryProvider.java | 12 +
.../src/flex2/compiler/CompilerAPI.java | 55 +++-
.../compiler/common/LocalFilePathResolver.java | 83 +++++
.../config/CommandLineConfigurator.java | 7 +-
.../src/flex2/compiler/io/NetworkFile.java | 148 +++++++++
.../src/flex2/compiler/util/ManifestParser.java | 239 ++++++++++++++
.../src/flex2/compiler/util/NameMappings.java | 183 +++++++++++
.../flex2/compiler/util/ThreadLocalToolkit.java | 7 +-
.../flex2/compiler/util/URLPathResolver.java | 75 +++++
flex-compiler-oem/src/flex2/tools/CompJSC.java | 15 +
flex-compiler-oem/src/flex2/tools/Compc.java | 57 ++++
flex-compiler-oem/src/flex2/tools/MxmlJSC.java | 76 +++++
flex-compiler-oem/src/flex2/tools/Mxmlc.java | 325 +++++++++++++++++++
flex-compiler-oem/src/flex2/tools/Tool.java | 242 ++++++++++++++
17 files changed, 1535 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
index 5a953f8..694e521 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
@@ -61,7 +61,7 @@ import sun.reflect.generics.reflectiveObjects.NotImplementedException;
* @author Erik de Bruin
* @author Michael Schmalle
*/
-public class COMPJSC extends MXMLJSC implements FlexTool
+public class COMPJSC extends MXMLJSC
{
/*
* Exit code enumerations.
@@ -153,7 +153,7 @@ public class COMPJSC extends MXMLJSC implements FlexTool
return exitCode;
}
- protected COMPJSC(IBackend backend)
+ public COMPJSC(IBackend backend)
{
super(backend);
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/compiler.jx/src/org/apache/flex/compiler/clients/JSCompilerEntryPoint.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/JSCompilerEntryPoint.java b/compiler.jx/src/org/apache/flex/compiler/clients/JSCompilerEntryPoint.java
new file mode 100644
index 0000000..b30066a
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/JSCompilerEntryPoint.java
@@ -0,0 +1,15 @@
+package org.apache.flex.compiler.clients;
+
+import org.apache.flex.compiler.problems.ICompilerProblem;
+
+import java.util.Set;
+
+/**
+ * @author: Frederic Thomas
+ * Date: 26/05/2015
+ * Time: 16:56
+ */
+public interface JSCompilerEntryPoint {
+ public int mainNoExit(final String[] args, Set<ICompilerProblem> problems,
+ Boolean printProblems);
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
index c968086..60f9915 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -34,6 +34,7 @@ import java.util.Set;
import org.apache.commons.io.FilenameUtils;
import org.apache.flex.compiler.clients.problems.ProblemPrinter;
import org.apache.flex.compiler.clients.problems.ProblemQuery;
+import org.apache.flex.compiler.clients.problems.ProblemQueryProvider;
import org.apache.flex.compiler.clients.problems.WorkspaceProblemFormatter;
import org.apache.flex.compiler.codegen.as.IASWriter;
import org.apache.flex.compiler.codegen.js.IJSPublisher;
@@ -89,11 +90,15 @@ import com.google.common.collect.Iterables;
* @author Erik de Bruin
* @author Michael Schmalle
*/
-public class MXMLJSC implements FlexTool
+public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider, FlexTool
{
+ public ProblemQuery getProblemQuery() {
+ return problems;
+ }
+
/*
- * JS output type enumerations.
- */
+ * JS output type enumerations.
+ */
public enum JSOutputType
{
AMD("amd"), FLEXJS("flexjs"), GOOG("goog"), VF2JS("vf2js");
@@ -222,6 +227,7 @@ public class MXMLJSC implements FlexTool
protected Workspace workspace;
protected FlexJSProject project;
+
protected ProblemQuery problems;
protected ISourceFileHandler asFileHandler;
protected Configuration config;
@@ -233,7 +239,7 @@ public class MXMLJSC implements FlexTool
protected IJSApplication jsTarget;
private IJSPublisher jsPublisher;
- protected MXMLJSC(IBackend backend)
+ public MXMLJSC(IBackend backend)
{
JSSharedData.backend = backend;
workspace = new Workspace();
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/compiler/src/org/apache/flex/compiler/clients/problems/ProblemQueryProvider.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/clients/problems/ProblemQueryProvider.java b/compiler/src/org/apache/flex/compiler/clients/problems/ProblemQueryProvider.java
new file mode 100644
index 0000000..dcce2cc
--- /dev/null
+++ b/compiler/src/org/apache/flex/compiler/clients/problems/ProblemQueryProvider.java
@@ -0,0 +1,12 @@
+package org.apache.flex.compiler.clients.problems;
+
+import org.apache.flex.compiler.clients.problems.ProblemQuery;
+
+/**
+ * @author: Frederic Thomas
+ * Date: 26/05/2015
+ * Time: 15:44
+ */
+public interface ProblemQueryProvider {
+ public ProblemQuery getProblemQuery();
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/compiler/CompilerAPI.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/compiler/CompilerAPI.java b/flex-compiler-oem/src/flex2/compiler/CompilerAPI.java
index 54cd78e..a4f7201 100644
--- a/flex-compiler-oem/src/flex2/compiler/CompilerAPI.java
+++ b/flex-compiler-oem/src/flex2/compiler/CompilerAPI.java
@@ -22,11 +22,16 @@ package flex2.compiler;
import java.io.File;
import java.io.IOException;
+import flex2.compiler.common.Configuration;
+import flex2.compiler.common.LocalFilePathResolver;
+import flex2.compiler.common.SinglePathResolver;
import flex2.compiler.io.LocalFile;
import flex2.compiler.io.VirtualFile;
import flex2.compiler.config.ConfigurationException;
+import flex2.compiler.util.ConsoleLogger;
import flex2.compiler.util.ThreadLocalToolkit;
import flex2.compiler.common.PathResolver;
+import flex2.compiler.util.URLPathResolver;
/**
* This class orchestrates delegation to the subcompilers using
@@ -35,14 +40,6 @@ import flex2.compiler.common.PathResolver;
* an incremental compilation, resolving dependences, loading a cache
* from a previous compilation, and storing a compilation cache.
*
- * @see flex2.compiler.SubCompiler
- * @see flex2.compiler.PersistentStore
- * @see flex2.compiler.abc.AbcCompiler
- * @see flex2.compiler.as3.As3Compiler
- * @see flex2.compiler.css.CssCompiler
- * @see flex2.compiler.fxg.FXGCompiler
- * @see flex2.compiler.i18n.I18nCompiler
- * @see flex2.compiler.mxml.MxmlCompiler
* @author Clement Wong
*/
public final class CompilerAPI
@@ -52,6 +49,48 @@ public final class CompilerAPI
//private final static int TYPES = 3;
//private final static int EXPRESSIONS = 4;
+
+ public static void useAS3()
+ {
+ // do this so there is no need to start java with -DAS3 and -DAVMPLUS...
+ // this will likely not work in server environment.
+ System.setProperty("AS3", "");
+ System.setProperty("AVMPLUS", "");
+ }
+
+ public static void useConsoleLogger()
+ {
+ useConsoleLogger(true, true, true, true);
+ }
+
+ public static void useConsoleLogger(boolean isInfoEnabled, boolean isDebugEnabled, boolean isWarningEnabled, boolean isErrorEnabled)
+ {
+ ThreadLocalToolkit.setLogger(new ConsoleLogger(isInfoEnabled, isDebugEnabled, isWarningEnabled, isErrorEnabled));
+ }
+
+ public static void usePathResolver()
+ {
+ usePathResolver(null);
+ }
+
+ public static void usePathResolver(SinglePathResolver resolver)
+ {
+ PathResolver pathResolver = new PathResolver();
+ if (resolver != null)
+ {
+ pathResolver.addSinglePathResolver(resolver);
+ }
+ pathResolver.addSinglePathResolver( LocalFilePathResolver.getSingleton() );
+ pathResolver.addSinglePathResolver( URLPathResolver.getSingleton() );
+ ThreadLocalToolkit.setPathResolver(pathResolver);
+ }
+
+ public static void removePathResolver()
+ {
+ ThreadLocalToolkit.setPathResolver(null);
+ ThreadLocalToolkit.resetResolvedPaths();
+ }
+
static String constructClassName(String namespaceURI, String localPart)
{
return (namespaceURI.length() == 0) ? localPart : new StringBuilder(namespaceURI.length() + localPart.length() + 1).append(namespaceURI).append(":").append(localPart).toString();
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/compiler/common/LocalFilePathResolver.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/compiler/common/LocalFilePathResolver.java b/flex-compiler-oem/src/flex2/compiler/common/LocalFilePathResolver.java
new file mode 100644
index 0000000..e329edf
--- /dev/null
+++ b/flex-compiler-oem/src/flex2/compiler/common/LocalFilePathResolver.java
@@ -0,0 +1,83 @@
+/*
+ *
+ * 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 flex2.compiler.common;
+
+import flash.util.FileUtils;
+import flash.util.Trace;
+import flex2.compiler.io.VirtualFile;
+import flex2.compiler.io.FileUtil;
+import flex2.compiler.io.LocalFile;
+
+import java.io.File;
+
+/**
+ * This class handles resolving absolute file paths. This resolver
+ * explicitly does not resolve relative paths, because it is included
+ * in the ThreadLocalToolkit's global PathResolver. The
+ * ThreadLocalToolkit's global PathResolver is used to resolve things
+ * like @Embed assets and we don't want paths which are relative to
+ * the current working directory and not relative to the containing
+ * Mxml document to be resolved. For example, if we have:
+ *
+ * C:/foo/bar.mxml
+ *
+ * with:
+ *
+ * <mx:Image source="@Embed(source='image.jpg')"/>
+ *
+ * and:
+ *
+ * C:/foo/image.jpg
+ * C:/image.jpg
+ *
+ * When the current working directory is C:/, we don't want resolve() to return
+ * C:/image.jpg.
+ */
+public class LocalFilePathResolver implements SinglePathResolver
+{
+ private static final LocalFilePathResolver singleton = new LocalFilePathResolver();
+
+ private LocalFilePathResolver()
+ {
+ }
+
+ public static LocalFilePathResolver getSingleton()
+ {
+ return singleton;
+ }
+
+ public VirtualFile resolve( String pathStr )
+ {
+ File path = FileUtil.openFile(pathStr);
+ VirtualFile virt = null;
+
+ if (path != null && FileUtils.exists(path) && FileUtils.isAbsolute(path))
+ {
+ virt = new LocalFile(path);
+ }
+
+ if ((virt != null) && Trace.pathResolver)
+ {
+ Trace.trace("LocalFilePathResolver.resolve: resolved " + pathStr + " to " + virt.getName());
+ }
+
+ return virt;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/compiler/config/CommandLineConfigurator.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/compiler/config/CommandLineConfigurator.java b/flex-compiler-oem/src/flex2/compiler/config/CommandLineConfigurator.java
index 9632b47..3c07a6f 100644
--- a/flex-compiler-oem/src/flex2/compiler/config/CommandLineConfigurator.java
+++ b/flex-compiler-oem/src/flex2/compiler/config/CommandLineConfigurator.java
@@ -19,11 +19,12 @@
package flex2.compiler.config;
-//import flash.localization.LocalizationManager;
+import flash.localization.LocalizationManager;
import java.util.Arrays;
import java.util.List;
import java.util.LinkedList;
+import java.util.TreeSet;
import java.util.Set;
import java.util.Iterator;
import java.util.HashSet;
@@ -369,7 +370,6 @@ public class CommandLineConfigurator
return ((c == boolean.class) || (c == Boolean.class));
}
- /*
public static String brief( String program, String defaultvar, LocalizationManager l10n, String l10nPrefix )
{
Map<String, String> params = new HashMap<String, String>();
@@ -486,7 +486,7 @@ public class CommandLineConfigurator
printSet.add( var );
}
}
- *//*
+ */
}
}
}
@@ -637,7 +637,6 @@ public class CommandLineConfigurator
}
return text;
}
- */
public static final String source = SOURCE_COMMAND_LINE;
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/compiler/io/NetworkFile.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/compiler/io/NetworkFile.java b/flex-compiler-oem/src/flex2/compiler/io/NetworkFile.java
new file mode 100644
index 0000000..44d7a2f
--- /dev/null
+++ b/flex-compiler-oem/src/flex2/compiler/io/NetworkFile.java
@@ -0,0 +1,148 @@
+/*
+ *
+ * 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 flex2.compiler.io;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+
+/**
+ * A VirtualFile implemenation, which is backed by a file not on a
+ * local disk.
+ */
+public class NetworkFile implements VirtualFile
+{
+ public NetworkFile(URL u) throws IOException
+ {
+ name = u.toExternalForm();
+ conn = u.openConnection();
+ }
+
+ private String name;
+ private URLConnection conn;
+
+ /**
+ * Return name... It could be canonical path name, URL, etc. But it must be unique among all the files
+ * processed by the compiler...
+ *
+ * The compiler should not use this to get... e.g. parent path... There is no guarantee that this returns
+ * a pathname even though the underlying implementation deals with files...
+ */
+ public String getName()
+ {
+ return name;
+ }
+
+ public String getNameForReporting()
+ {
+ return getName();
+ }
+
+ public String getURL()
+ {
+ return name;
+ }
+
+ public String getParent()
+ {
+ return null;
+ }
+
+ public boolean isDirectory()
+ {
+ return false;
+ }
+
+ /**
+ * Return file size...
+ */
+ public long size()
+ {
+ return conn.getContentLength();
+ }
+
+ /**
+ * Return mime type
+ */
+ public String getMimeType()
+ {
+ return conn.getContentType();
+ }
+
+ /**
+ * Return input stream...
+ */
+ public InputStream getInputStream() throws IOException
+ {
+ return conn.getInputStream();
+ }
+
+ public byte[] toByteArray() throws IOException
+ {
+ throw new UnsupportedOperationException("toByteArray() not supported in " + this.getClass().getName());
+ }
+
+ /**
+ * Return last time the underlying source is modified.
+ */
+ public long getLastModified()
+ {
+ return conn.getLastModified();
+ }
+
+ /**
+ * Return an instance of this interface which represents the specified relative path.
+ */
+ public VirtualFile resolve(String relative)
+ {
+ return null;
+ }
+
+ /**
+ * Signal the hosting environment that this instance is no longer used.
+ */
+ public void close()
+ {
+ }
+
+
+ public boolean equals(Object obj)
+ {
+ if (obj instanceof NetworkFile)
+ {
+ return (this == obj) || name.equals(((NetworkFile) obj).name);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ public int hashCode()
+ {
+ return name.hashCode();
+ }
+
+ public boolean isTextBased()
+ {
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/compiler/util/ManifestParser.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/compiler/util/ManifestParser.java b/flex-compiler-oem/src/flex2/compiler/util/ManifestParser.java
new file mode 100644
index 0000000..97f57ef
--- /dev/null
+++ b/flex-compiler-oem/src/flex2/compiler/util/ManifestParser.java
@@ -0,0 +1,239 @@
+/*
+ *
+ * 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 flex2.compiler.util;
+
+import flex2.compiler.io.VirtualFile;
+import org.xml.sax.Attributes;
+import org.xml.sax.Locator;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.BufferedInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Parses a manifest into a NameMappings.
+ *
+ */
+public class ManifestParser
+{
+ public synchronized static void parse(String namespaceURI, VirtualFile file, NameMappings mappings)
+ {
+ if (file == null)
+ {
+ return;
+ }
+
+ InputStream in = null;
+
+ try
+ {
+ in = new BufferedInputStream(file.getInputStream());
+ }
+ catch (FileNotFoundException ex)
+ {
+ // manifest is not found.
+ return;
+ }
+ catch (IOException ex)
+ {
+ ThreadLocalToolkit.logError(file.getNameForReporting(), ex.getMessage());
+ return;
+ }
+
+ try
+ {
+ SAXParserFactory factory = SAXParserFactory.newInstance();
+ factory.setNamespaceAware(true);
+ SAXParser parser = factory.newSAXParser();
+ parser.parse(in, new Parser(file.getName(), mappings, namespaceURI));
+ }
+ catch (Exception ex) // ParserConfigurationException, SAXException, IOException
+ {
+ ThreadLocalToolkit.logError(file.getNameForReporting(), ex.getMessage());
+ }
+ finally
+ {
+ if (in != null)
+ {
+ try
+ {
+ in.close();
+ }
+ catch (IOException ex)
+ {
+ }
+ }
+ }
+ }
+
+ private static class Parser extends DefaultHandler
+ {
+ Parser(String fileName, NameMappings mappings, String namespaceURI)
+ {
+ this.fileName = fileName;
+ this.mappings = mappings;
+ this.namespaceURI = namespaceURI;
+ }
+
+ private String fileName;
+ private NameMappings mappings;
+ private String namespaceURI;
+ private Locator locator;
+
+ public void startElement(String uri, String localName, String qName, Attributes attributes)
+ throws SAXException
+ {
+ if (localName.equals("component"))
+ {
+ String id = attributes.getValue("id");
+ String className = attributes.getValue("class");
+ if (className == null)
+ {
+ ThreadLocalToolkit.log(new UndefinedClass(fileName, locator.getLineNumber(), id));
+ return;
+ }
+ else if ("*".equals(className))
+ {
+ ThreadLocalToolkit.log(new InvalidClassName(fileName, locator.getLineNumber(), id));
+ }
+ else
+ {
+ assert className.indexOf(':') == -1 && className.indexOf('/') == -1 : fileName + ": " + className;
+ className = NameFormatter.toColon(className);
+ }
+
+ if (id == null)
+ {
+ id = NameFormatter.retrieveClassName(className);
+ }
+
+ String lookupOnlyStr = attributes.getValue("lookupOnly");
+ boolean lookupOnly = lookupOnlyStr == null ? false : Boolean.valueOf(lookupOnlyStr).booleanValue();
+
+ boolean added = mappings.addClass(namespaceURI, id, className);
+
+ if (! added)
+ {
+ ThreadLocalToolkit.log(new DuplicateComponentDefinition(fileName, locator.getLineNumber(), id));
+ return;
+ }
+
+ if (lookupOnly)
+ {
+ mappings.addLookupOnly(namespaceURI, className);
+ }
+ }
+ }
+
+ public void warning(SAXParseException e)
+ {
+ ThreadLocalToolkit.log(new ManifestError(fileName, e.getLineNumber(), e.getMessage()));
+ }
+
+ public void error(SAXParseException e)
+ {
+ ThreadLocalToolkit.log(new ManifestError(fileName, e.getLineNumber(), e.getMessage()));
+ }
+
+ public void fatalError(SAXParseException e)
+ throws SAXParseException
+ {
+ ThreadLocalToolkit.log(new ManifestError(fileName, e.getLineNumber(), e.getMessage()));
+ throw e;
+ }
+
+ public void setDocumentLocator(Locator locator)
+ {
+ this.locator = locator;
+ }
+ }
+
+ // error messages
+
+ public static class UndefinedClass extends CompilerMessage.CompilerError
+ {
+ private static final long serialVersionUID = 982393613817885400L;
+ public UndefinedClass(String fileName, int line, String tag)
+ {
+ super();
+ this.fileName = fileName;
+ this.line = line;
+ this.tag = tag;
+ }
+
+ public final String fileName;
+ public final int line;
+ public final String tag;
+ }
+
+ public static class InvalidClassName extends CompilerMessage.CompilerError
+ {
+ private static final long serialVersionUID = -1805088670961745449L;
+ public InvalidClassName(String fileName, int line, String tag)
+ {
+ super();
+ this.fileName = fileName;
+ this.line = line;
+ this.tag = tag;
+ }
+
+ public final String fileName;
+ public final int line;
+ public final String tag;
+ }
+
+ public static class DuplicateComponentDefinition extends CompilerMessage.CompilerError
+ {
+ private static final long serialVersionUID = -1072579721984054648L;
+ public DuplicateComponentDefinition(String fileName, int line, String tag)
+ {
+ super();
+ this.fileName = fileName;
+ this.line = line;
+ this.tag = tag;
+ }
+
+ public final String fileName;
+ public final int line;
+ public final String tag;
+ }
+
+ public static class ManifestError extends CompilerMessage.CompilerError
+ {
+ private static final long serialVersionUID = 7519143031979293680L;
+ public ManifestError(String fileName, int line, String message)
+ {
+ super();
+ this.fileName = fileName;
+ this.line = line;
+ this.message = message;
+ }
+
+ public final String fileName;
+ public final int line;
+ public final String message;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/compiler/util/NameMappings.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/compiler/util/NameMappings.java b/flex-compiler-oem/src/flex2/compiler/util/NameMappings.java
new file mode 100644
index 0000000..82669eb
--- /dev/null
+++ b/flex-compiler-oem/src/flex2/compiler/util/NameMappings.java
@@ -0,0 +1,183 @@
+/*
+ *
+ * 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 flex2.compiler.util;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.HashSet;
+
+/**
+ * Stores the mappings of name and uri to classname.
+ *
+ */
+public class NameMappings
+{
+ public NameMappings()
+ {
+ namespaceMap = new HashMap<String, Map<String,String>>();
+ lookupOnly = new HashMap<String, Set<String>>();
+ }
+
+ private Map<String, Map<String,String>> namespaceMap;
+ private Map<String, Set<String>> lookupOnly;
+
+ public NameMappings copy()
+ {
+ NameMappings m = new NameMappings();
+ for (Iterator<String> i = namespaceMap.keySet().iterator(); i.hasNext(); )
+ {
+ String uri = i.next();
+ Map<String, String> classMap = namespaceMap.get(uri);
+ m.namespaceMap.put(uri, new HashMap<String,String>(classMap));
+ }
+ m.lookupOnly.putAll(lookupOnly);
+ return m;
+ }
+
+ public String lookupPackageName(String nsURI, String localPart)
+ {
+ String className = lookupClassName(nsURI, localPart);
+ if (className == null)
+ {
+ return null;
+ }
+ int index = className.indexOf(":");
+ return (index == -1) ? "" : className.substring(0, index);
+ }
+
+ public String lookupClassName(String nsURI, String localPart)
+ {
+ Map<String, String> classMap = namespaceMap.get(nsURI);
+ return classMap == null ? null : classMap.get(localPart);
+ }
+
+ /**
+ * Look up namespace;classname against registered entries, then fault to package-style namespace handling
+ * NOTE: the contract here is that a null return value definitely indicates a missing definition, but a non-null
+ * return value *by no means* ensures that a definition will be available. E.g. an entry in a manifest doesn't mean
+ * that the backing code is correct, defines the specified class or even exists. Also, for package-style namespaces
+ * we simply concatenate the parameters together, since (e.g.) checking the presence or absence of a suitable entry
+ * on the classpath gives a similarly non-definitive answer.
+ */
+ public String resolveClassName(String namespaceURI, String localPart)
+ {
+ String className = lookupClassName(namespaceURI, localPart);
+
+ if (className == null)
+ {
+ // C: if namespaceURI is in the form of p1.p2...pn.*...
+ // HIGHLY recommend handling this as old compiler did. --rg
+ if ("*".equals(namespaceURI))
+ {
+ className = localPart;
+ }
+ else if (namespaceURI.length() > 2 && namespaceURI.endsWith(".*"))
+ {
+ className = namespaceURI.substring(0, namespaceURI.length() - 2) + ':' + localPart;
+ className = className.intern();
+ }
+ }
+
+ return className;
+ }
+
+ public Map<String, String> getNamespace(String nsURI)
+ {
+ return namespaceMap.get(nsURI);
+ }
+
+ public Set<String> getNamespaces()
+ {
+ return namespaceMap.keySet();
+ }
+
+ public void addMappings( NameMappings other )
+ {
+ for (Iterator<Map.Entry<String, Map<String,String>>> nit = other.namespaceMap.entrySet().iterator(); nit.hasNext();)
+ {
+ Map.Entry<String, Map<String,String>> e = nit.next();
+ String namespaceURI = e.getKey();
+ Map<String, String> mappings = e.getValue();
+
+ for (Iterator<Map.Entry<String, String>> it = mappings.entrySet().iterator(); it.hasNext();)
+ {
+ Map.Entry<String, String> lc = it.next();
+ String local = lc.getKey();
+ String className = lc.getValue();
+
+ addClass( namespaceURI, local, className );
+ }
+ }
+ }
+
+ public boolean addClass(String namespaceURI, String localPart, String className)
+ {
+ Map<String, String> classMap = null;
+
+ if (namespaceMap.containsKey(namespaceURI))
+ {
+ classMap = namespaceMap.get(namespaceURI);
+ }
+ else
+ {
+ classMap = new HashMap<String, String>();
+ namespaceMap.put(namespaceURI.intern(), classMap);
+ }
+
+ String current = classMap.get(localPart);
+ if (current == null)
+ {
+ classMap.put(localPart.intern(), className.intern());
+ }
+ else if (! current.equals(className))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ public void addLookupOnly(String namespaceURI, String cls)
+ {
+ Set classes = lookupOnly.get(namespaceURI);
+
+ if (classes == null)
+ {
+ classes = new HashSet<String>();
+ lookupOnly.put(namespaceURI, classes);
+ }
+
+ classes.add(cls);
+ }
+
+ public boolean isLookupOnly(String namespaceURI, String cls)
+ {
+ boolean result = false;
+ Set classes = lookupOnly.get(namespaceURI);
+
+ if (classes != null)
+ {
+ result = classes.contains(cls);
+ }
+
+ return result;
+}
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/compiler/util/ThreadLocalToolkit.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/compiler/util/ThreadLocalToolkit.java b/flex-compiler-oem/src/flex2/compiler/util/ThreadLocalToolkit.java
index e50bb77..5a0a368 100644
--- a/flex-compiler-oem/src/flex2/compiler/util/ThreadLocalToolkit.java
+++ b/flex-compiler-oem/src/flex2/compiler/util/ThreadLocalToolkit.java
@@ -20,6 +20,7 @@
package flex2.compiler.util;
//import flash.localization.LocalizationManager;
+import flash.localization.LocalizationManager;
import flex2.compiler.ILocalizableMessage;
import flex2.compiler.Logger;
import flex2.compiler.Source;
@@ -48,14 +49,13 @@ public final class ThreadLocalToolkit
private static ThreadLocal<PathResolver> resolver = new ThreadLocal<PathResolver>();
private static ThreadLocal<Map<String, VirtualFile>> resolved = new ThreadLocal<Map<String, VirtualFile>>();
private static ThreadLocal<Benchmark> stopWatch = new ThreadLocal<Benchmark>();
- //private static ThreadLocal<LocalizationManager> localization = new ThreadLocal<LocalizationManager>();
+ private static ThreadLocal<LocalizationManager> localization = new ThreadLocal<LocalizationManager>();
private static ThreadLocal<MimeMappings> mimeMappings = new ThreadLocal<MimeMappings>();
private static ThreadLocal<ProgressMeter> progressMeter = new ThreadLocal<ProgressMeter>();
private static ThreadLocal<CompilerControl> compilerControl = new ThreadLocal<CompilerControl>();
private static ThreadLocal<StandardDefs> standardDefs = new ThreadLocal<StandardDefs>();
private static ThreadLocal<Integer> compatibilityVersion = new ThreadLocal<Integer>();
- /*
//----------------------
// LocalizationManager
//----------------------
@@ -69,8 +69,7 @@ public final class ThreadLocalToolkit
{
localization.set( mgr );
}
- */
-
+
//---------------
// PathResolver
//---------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/compiler/util/URLPathResolver.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/compiler/util/URLPathResolver.java b/flex-compiler-oem/src/flex2/compiler/util/URLPathResolver.java
new file mode 100644
index 0000000..c952384
--- /dev/null
+++ b/flex-compiler-oem/src/flex2/compiler/util/URLPathResolver.java
@@ -0,0 +1,75 @@
+/*
+ *
+ * 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 flex2.compiler.util;
+
+import flash.util.Trace;
+import flex2.compiler.common.SinglePathResolver;
+import flex2.compiler.io.NetworkFile;
+import flex2.compiler.io.VirtualFile;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+/**
+ * A resolver with tries to resolve paths using the URL class.
+ */
+public class URLPathResolver implements SinglePathResolver
+{
+ private static final URLPathResolver singleton = new URLPathResolver();
+
+ private URLPathResolver()
+ {
+ }
+
+ public static final URLPathResolver getSingleton()
+ {
+ return singleton;
+ }
+
+ public VirtualFile resolve(String uri)
+ {
+ VirtualFile location = null;
+
+ try
+ {
+ URL url = new URL(uri);
+ if (url != null)
+ {
+ location = new NetworkFile(url);
+ }
+ }
+ catch (SecurityException securityException)
+ {
+ }
+ catch (MalformedURLException malformedURLException)
+ {
+ }
+ catch (IOException ioException)
+ {
+ }
+
+ if ((location != null) && Trace.pathResolver)
+ {
+ Trace.trace("URLPathResolver.resolve: resolved " + uri + " to " + location.getName());
+ }
+
+ return location;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/tools/CompJSC.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/CompJSC.java b/flex-compiler-oem/src/flex2/tools/CompJSC.java
new file mode 100644
index 0000000..d291678
--- /dev/null
+++ b/flex-compiler-oem/src/flex2/tools/CompJSC.java
@@ -0,0 +1,15 @@
+package flex2.tools;
+
+import org.apache.flex.compiler.clients.COMPJSC;
+
+/**
+ * @author: Frederic Thomas
+ * Date: 25/05/2015
+ * Time: 14:05
+ */
+public class CompJSC extends MxmlJSC {
+
+ static {
+ COMPILER = COMPJSC.class;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/tools/Compc.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Compc.java b/flex-compiler-oem/src/flex2/tools/Compc.java
new file mode 100644
index 0000000..a502217
--- /dev/null
+++ b/flex-compiler-oem/src/flex2/tools/Compc.java
@@ -0,0 +1,57 @@
+/*
+ *
+ * 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 flex2.tools;
+
+import org.apache.flex.compiler.clients.COMPC;
+
+import java.lang.reflect.InvocationTargetException;
+
+/**
+ * Entry-point for compc, the command-line tool for compiling components.
+ */
+public class Compc extends Tool {
+
+ public static final String FILE_SPECS = "include-classes";
+
+ static {
+ COMPILER = COMPC.class;
+ JS_COMPILER = CompJSC.class;
+ }
+
+ /**
+ * The entry-point for Mxmlc.
+ * Note that if you change anything in this method, make sure to check Compc, Shell, and
+ * the server's CompileFilter to see if the same change needs to be made there. You
+ * should also inform the Zorn team of the change.
+ *
+ * @param args
+ */
+ public static void main(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
+ System.exit(compcNoExit(args));
+ }
+
+ public static int compcNoExit(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
+ return compile(args);
+ }
+
+ public static void compc(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
+ compile(args);
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
new file mode 100644
index 0000000..f23dc2a
--- /dev/null
+++ b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
@@ -0,0 +1,76 @@
+package flex2.tools;
+
+import org.apache.flex.compiler.clients.problems.ProblemQueryProvider;
+import org.apache.flex.compiler.clients.JSCompilerEntryPoint;
+import org.apache.flex.compiler.clients.MXMLJSC;
+import org.apache.flex.compiler.clients.problems.ProblemQuery;
+import org.apache.flex.compiler.driver.IBackend;
+import org.apache.flex.compiler.internal.driver.as.ASBackend;
+import org.apache.flex.compiler.internal.driver.js.amd.AMDBackend;
+import org.apache.flex.compiler.internal.driver.js.goog.GoogBackend;
+import org.apache.flex.compiler.internal.driver.mxml.flexjs.MXMLFlexJSBackend;
+import org.apache.flex.compiler.internal.driver.mxml.vf2js.MXMLVF2JSBackend;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author: Frederic Thomas
+ * Date: 25/05/2015
+ * Time: 14:05
+ */
+public class MxmlJSC implements ProblemQueryProvider {
+
+ protected static Class<? extends MXMLJSC> COMPILER = MXMLJSC.class;
+
+ protected JSCompilerEntryPoint compiler;
+
+ protected JSCompilerEntryPoint getCompilerInstance(IBackend backend) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
+ if (compiler == null) {
+ compiler = COMPILER.getDeclaredConstructor(IBackend.class).newInstance(backend);
+ }
+ return compiler;
+ }
+
+ public int execute(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
+ IBackend backend = new ASBackend();
+ String jsOutputTypeString = "";
+ for (String s : args) {
+ String[] kvp = s.split("=");
+
+ if (s.contains("-js-output-type")) {
+ jsOutputTypeString = kvp[1];
+ }
+ }
+
+ if (jsOutputTypeString.equals("")) {
+ jsOutputTypeString = MXMLJSC.JSOutputType.FLEXJS.getText();
+ }
+
+ MXMLJSC.JSOutputType jsOutputType = MXMLJSC.JSOutputType.fromString(jsOutputTypeString);
+ switch (jsOutputType) {
+ case AMD:
+ backend = new AMDBackend();
+ break;
+ case FLEXJS:
+ backend = new MXMLFlexJSBackend();
+ break;
+ case GOOG:
+ backend = new GoogBackend();
+ break;
+ case VF2JS:
+ backend = new MXMLVF2JSBackend();
+ break;
+ }
+
+ final Set<ICompilerProblem> problems = new HashSet<ICompilerProblem>();
+ return getCompilerInstance(backend).mainNoExit(args, problems, false);
+ }
+
+ @Override
+ public ProblemQuery getProblemQuery() {
+ return ((ProblemQueryProvider) compiler).getProblemQuery();
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/tools/Mxmlc.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Mxmlc.java b/flex-compiler-oem/src/flex2/tools/Mxmlc.java
new file mode 100644
index 0000000..abed94f
--- /dev/null
+++ b/flex-compiler-oem/src/flex2/tools/Mxmlc.java
@@ -0,0 +1,325 @@
+/*
+ *
+ * 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 flex2.tools;
+
+import flash.localization.LocalizationManager;
+import flex2.compiler.common.Configuration;
+import flex2.compiler.common.ConfigurationPathResolver;
+import flex2.compiler.common.PathResolver;
+import flex2.compiler.config.*;
+import flex2.compiler.io.VirtualFile;
+import flex2.compiler.util.CompilerMessage;
+import flex2.compiler.util.ThreadLocalToolkit;
+import org.apache.flex.compiler.clients.MXMLC;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.util.*;
+import java.util.Map.Entry;
+
+/**
+ * A command line tool for compiling Flex applications. Despite the
+ * name, in addition to .mxml files, this tool can be used to compile
+ * other file formats, like .as and .css.
+ */
+public final class Mxmlc extends Tool {
+ static private String l10nConfigPrefix = "flex2.configuration";
+
+ public static final String FILE_SPECS = "file-specs";
+
+ static {
+ COMPILER = MXMLC.class;
+ JS_COMPILER = MxmlJSC.class;
+ }
+
+ /**
+ * The entry-point for Mxmlc.
+ * Note that if you change anything in this method, make sure to check Compc, Shell, and
+ * the server's CompileFilter to see if the same change needs to be made there. You
+ * should also inform the Zorn team of the change.
+ *
+ * @param args
+ */
+ public static void main(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
+ System.exit(mxmlcNoExit(args));
+ }
+
+ public static int mxmlcNoExit(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
+ return compile(args);
+ }
+
+ public static void mxmlc(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
+ compile(args);
+ }
+
+ public static Configuration processConfiguration(LocalizationManager lmgr, String program, String[] args,
+ ConfigurationBuffer cfgbuf, Class<? extends Configuration> cls, String defaultVar)
+ throws ConfigurationException, IOException {
+ return processConfiguration(lmgr, program, args, cfgbuf, cls, defaultVar, true);
+ }
+
+ public static Configuration processConfiguration(LocalizationManager lmgr, String program, String[] args,
+ ConfigurationBuffer cfgbuf, Class<? extends Configuration> cls, String defaultVar,
+ boolean ignoreUnknownItems)
+ throws IOException {
+ ToolsConfiguration toolsConfiguration = null;
+ try {
+ SystemPropertyConfigurator.load(cfgbuf, "flex");
+
+ // Parse the command line a first time, to peak at stuff like
+ // "flexlib" and "load-config". The first parse is thrown
+ // away after that and we intentionally parse a second time
+ // below. See note below.
+ CommandLineConfigurator.parse(cfgbuf, defaultVar, args);
+
+ String flexlib = cfgbuf.getToken("flexlib");
+ if (flexlib == null) {
+ String appHome = System.getProperty("application.home");
+
+ if (appHome == null) {
+ appHome = ".";
+ } else {
+ appHome += File.separator + "frameworks"; // FIXME - need to eliminate this from the compiler
+ }
+ cfgbuf.setToken("flexlib", appHome);
+ }
+
+ // Framework Type
+ // halo, gumbo, interop...
+ String framework = cfgbuf.getToken("framework");
+ if (framework == null) {
+ cfgbuf.setToken("framework", "halo");
+ }
+
+ String configname = cfgbuf.getToken("configname");
+ if (configname == null) {
+ cfgbuf.setToken("configname", "flex");
+ }
+
+ String buildNumber = cfgbuf.getToken("build.number");
+ if (buildNumber == null) {
+ if ("".equals(VersionInfo.getBuild())) {
+ buildNumber = "workspace";
+ } else {
+ buildNumber = VersionInfo.getBuild();
+ }
+ cfgbuf.setToken("build.number", buildNumber);
+ }
+
+
+ // We need to intercept "help" options because we want to try to correctly
+ // interpret them even when the rest of the configuration is totally screwed up.
+
+ if (cfgbuf.getVar("version") != null) {
+ System.out.println(VersionInfo.buildMessage());
+ System.exit(0);
+ }
+
+ processHelp(cfgbuf, program, defaultVar, lmgr, args);
+
+ // at this point, we should have enough to know both
+ // flexlib and the config file.
+
+ ConfigurationPathResolver configResolver = new ConfigurationPathResolver();
+
+ List<ConfigurationValue> configs = cfgbuf.peekConfigurationVar("load-config");
+
+ if (configs != null) {
+ for (ConfigurationValue cv : configs) {
+ for (String path : cv.getArgs()) {
+ VirtualFile configFile = ConfigurationPathResolver.getVirtualFile(path, configResolver, cv);
+ cfgbuf.calculateChecksum(configFile);
+ InputStream in = configFile.getInputStream();
+ if (in != null) {
+ FileConfigurator.load(cfgbuf, new BufferedInputStream(in), configFile.getName(),
+ configFile.getParent(), "flex-config", ignoreUnknownItems);
+ } else {
+ throw new ConfigurationException.ConfigurationIOError(path, cv.getVar(), cv.getSource(), cv.getLine());
+ }
+ }
+ }
+ }
+
+ PathResolver resolver = ThreadLocalToolkit.getPathResolver();
+ // Load project file, if any...
+ List fileValues = cfgbuf.getVar(FILE_SPECS);
+ if ((fileValues != null) && (fileValues.size() > 0)) {
+ ConfigurationValue cv = (ConfigurationValue) fileValues.get(fileValues.size() - 1);
+ if (cv.getArgs().size() > 0) {
+ String val = cv.getArgs().get(cv.getArgs().size() - 1);
+ int index = val.lastIndexOf('.');
+ if (index != -1) {
+ String project = val.substring(0, index) + "-config.xml";
+ VirtualFile projectFile = resolver.resolve(configResolver, project);
+ if (projectFile != null) {
+ cfgbuf.calculateChecksum(projectFile);
+ InputStream in = projectFile.getInputStream();
+ if (in != null) {
+ FileConfigurator.load(cfgbuf, new BufferedInputStream(in),
+ projectFile.getName(), projectFile.getParent(), "flex-config",
+ ignoreUnknownItems);
+ }
+ }
+ }
+ }
+ }
+
+ // The command line needs to take precedence over all defaults and config files.
+ // This is a bit gross, but by simply re-merging the command line back on top,
+ // we will get the behavior we want.
+ cfgbuf.clearSourceVars(CommandLineConfigurator.source);
+ CommandLineConfigurator.parse(cfgbuf, defaultVar, args);
+
+ toolsConfiguration = null;
+ try {
+ toolsConfiguration = (ToolsConfiguration) cls.newInstance();
+ toolsConfiguration.setConfigPathResolver(configResolver);
+ } catch (Exception e) {
+ LocalizationManager l10n = ThreadLocalToolkit.getLocalizationManager();
+ throw new ConfigurationException(l10n.getLocalizedTextString(new CouldNotInstantiate(toolsConfiguration)));
+ }
+ cfgbuf.commit(toolsConfiguration);
+
+ // enterprise service config file has other config file dependencies. add them here...
+ calculateServicesChecksum(toolsConfiguration, cfgbuf);
+
+ toolsConfiguration.validate(cfgbuf);
+
+ // consolidate license keys...
+ VirtualFile licenseFile = toolsConfiguration.getLicenseFile();
+ if (licenseFile != null) {
+ Map<String, String> fileLicenses = Tool.getLicenseMapFromFile(licenseFile.getName());
+ Map<String, String> cmdLicenses = toolsConfiguration.getLicensesConfiguration().getLicenseMap();
+ if (cmdLicenses == null) {
+ toolsConfiguration.getLicensesConfiguration().setLicenseMap(fileLicenses);
+ } else if (fileLicenses != null) {
+ fileLicenses.putAll(cmdLicenses);
+ toolsConfiguration.getLicensesConfiguration().setLicenseMap(fileLicenses);
+ }
+ }
+ } catch (ConfigurationException e) {
+ e.printStackTrace();
+ }
+
+ return toolsConfiguration;
+ }
+
+ static void processHelp(ConfigurationBuffer cfgbuf, String program, String defaultVar, LocalizationManager lmgr, String[] args) {
+ if (cfgbuf.getVar("help") != null) {
+ Set<String> keywords = new HashSet<String>();
+ List vals = cfgbuf.getVar("help");
+ for (Iterator it = vals.iterator(); it.hasNext(); ) {
+ ConfigurationValue val = (ConfigurationValue) it.next();
+ for (Object element : val.getArgs()) {
+ String keyword = (String) element;
+ while (keyword.startsWith("-"))
+ keyword = keyword.substring(1);
+ keywords.add(keyword);
+ }
+ }
+ if (keywords.size() == 0) {
+ keywords.add("help");
+ }
+
+ ThreadLocalToolkit.logInfo(getStartMessage(program));
+ System.out.println();
+ System.out.println(CommandLineConfigurator.usage(program, defaultVar, cfgbuf, keywords, lmgr, l10nConfigPrefix));
+ System.exit(0);
+ }
+
+ if (args.length == 0 && ("mxmlc".equals(program) || "compc".equals(program))) {
+ ThreadLocalToolkit.logInfo(getStartMessage(program));
+ System.err.println(CommandLineConfigurator.brief(program, defaultVar, lmgr, l10nConfigPrefix));
+ System.exit(1);
+ }
+ }
+
+ private static void calculateServicesChecksum(Configuration config, ConfigurationBuffer cfgbuf) {
+ Map<String, Long> services = null;
+ if (config.getCompilerConfiguration().getServicesDependencies() != null) {
+ services = config.getCompilerConfiguration().getServicesDependencies().getConfigPaths();
+ }
+
+ if (services != null) {
+ for (Entry<String, Long> entry : services.entrySet()) {
+ cfgbuf.calculateChecksum(entry.getKey(), entry.getValue());
+ }
+ }
+ }
+
+ public static void processConfigurationException(ConfigurationException ex, String program) {
+ ThreadLocalToolkit.log(ex);
+
+ if (ex.source == null || ex.source.equals("command line")) {
+ Map<String, String> p = new HashMap<String, String>();
+ p.put("program", program);
+ String help = ThreadLocalToolkit.getLocalizationManager().getLocalizedTextString("flex2.compiler.CommandLineHelp", p);
+ if (help != null) {
+ // "Use '" + program + " -help' for information about using the command line.");
+ System.err.println(help);
+ }
+ }
+ }
+
+ private static String getStartMessage(String program) {
+ LocalizationManager l10n = ThreadLocalToolkit.getLocalizationManager();
+
+ return l10n.getLocalizedTextString(new StartMessage(program, VersionInfo.buildMessage()));
+ }
+
+ public static class CouldNotInstantiate extends CompilerMessage.CompilerInfo {
+ private static final long serialVersionUID = -8970190710117830662L;
+
+ public CouldNotInstantiate(Configuration config) {
+ super();
+ this.config = config;
+ }
+
+ public final Configuration config;
+ }
+
+ public static class StartMessage extends CompilerMessage.CompilerInfo {
+ private static final long serialVersionUID = 4807822711658875257L;
+
+ public StartMessage(String program, String buildMessage) {
+ super();
+ this.program = program;
+ this.buildMessage = buildMessage;
+ }
+
+ public final String program, buildMessage;
+ }
+
+ public static class OutputMessage extends CompilerMessage.CompilerInfo {
+ private static final long serialVersionUID = -4859993585489031839L;
+
+ public String name;
+ public String length;
+
+ public OutputMessage(String name, String length) {
+ this.name = name;
+ this.length = length;
+ }
+ }
+}
+
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6ddfb7b2/flex-compiler-oem/src/flex2/tools/Tool.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Tool.java b/flex-compiler-oem/src/flex2/tools/Tool.java
new file mode 100644
index 0000000..b61fa43
--- /dev/null
+++ b/flex-compiler-oem/src/flex2/tools/Tool.java
@@ -0,0 +1,242 @@
+/*
+ *
+ * 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 flex2.tools;
+
+import flash.localization.LocalizationManager;
+import flex2.compiler.Logger;
+import flex2.compiler.config.ConfigurationException;
+import flex2.compiler.util.CompilerMessage;
+import flex2.compiler.util.CompilerMessage.CompilerError;
+import flex2.compiler.util.ThreadLocalToolkit;
+import flex2.tools.oem.Message;
+import org.apache.flex.compiler.clients.problems.ProblemQueryProvider;
+import org.apache.flex.compiler.clients.MXMLC;
+import org.apache.flex.compiler.clients.problems.ProblemQuery;
+import org.apache.flex.compiler.problems.CompilerProblemSeverity;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.problems.annotations.DefaultSeverity;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Common base class for most flex tools.
+ */
+public class Tool
+{
+ protected static Class<? extends MXMLC> COMPILER;
+ protected static Class<? extends MxmlJSC> JS_COMPILER;
+
+ protected static int compile(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
+ int exitCode;
+
+ if (hasJsOutputType(args)) {
+ MxmlJSC mxmlJSC = JS_COMPILER.newInstance();
+ exitCode = mxmlJSC.execute(args);
+ processProblemReport(mxmlJSC);
+ } else {
+ MXMLC mxmlc = COMPILER.newInstance();
+ exitCode = mxmlc.execute(args);
+ processProblemReport(new CompilerRequestableProblems(mxmlc));
+ }
+
+ return exitCode;
+ }
+
+ protected static boolean hasJsOutputType(String[] args) {
+ boolean found = false;
+
+ for (String s : args) {
+ String[] kvp = s.split("=");
+
+ if (s.contains("-js-output-type")) {
+ found = true;
+ break;
+ }
+ }
+
+ return found;
+ }
+
+ public static Map<String, String> getLicenseMapFromFile(String fileName) throws ConfigurationException
+ {
+ Map<String, String> result = null;
+ FileInputStream in = null;
+
+ try
+ {
+ in = new FileInputStream(fileName);
+ Properties properties = new Properties();
+ properties.load(in);
+ Enumeration enumeration = properties.propertyNames();
+
+ if ( enumeration.hasMoreElements() )
+ {
+ result = new HashMap<String, String>();
+
+ while ( enumeration.hasMoreElements() )
+ {
+ String propertyName = (String) enumeration.nextElement();
+ result.put(propertyName, properties.getProperty(propertyName));
+ }
+ }
+ }
+ catch (IOException ioException)
+ {
+ LocalizationManager l10n = ThreadLocalToolkit.getLocalizationManager();
+ throw new ConfigurationException(l10n.getLocalizedTextString(new FailedToLoadLicenseFile(fileName)));
+ }
+ finally
+ {
+ if (in != null)
+ {
+ try
+ {
+ in.close();
+ }
+ catch (IOException ioe)
+ {
+ }
+ }
+ }
+
+ return result;
+ }
+
+ public static class FailedToLoadLicenseFile extends CompilerError
+ {
+ private static final long serialVersionUID = -2980033917773108328L;
+
+ public String fileName;
+
+ public FailedToLoadLicenseFile(String fileName)
+ {
+ super();
+ this.fileName = fileName;
+ }
+ }
+
+ public static void processProblemReport(ProblemQueryProvider requestableProblems)
+ {
+ for (ICompilerProblem problem : requestableProblems.getProblemQuery().getProblems())
+ {
+ Class aClass = problem.getClass();
+ Annotation[] annotations = aClass.getAnnotations();
+
+ for(Annotation annotation : annotations){
+ if(annotation instanceof DefaultSeverity){
+ DefaultSeverity myAnnotation = (DefaultSeverity) annotation;
+ CompilerProblemSeverity cps = myAnnotation.value();
+ String level;
+ if (cps.equals(CompilerProblemSeverity.ERROR))
+ level = Message.ERROR;
+ else if (cps.equals(CompilerProblemSeverity.WARNING))
+ level = Message.WARNING;
+ else
+ break; // skip if IGNORE?
+ CompilerMessage msg = new CompilerMessage(level,
+ problem.getSourcePath(),
+ problem.getLine() + 1,
+ problem.getColumn());
+ try
+ {
+ String errText = (String) aClass.getField("DESCRIPTION").get(aClass);
+ while (errText.contains("${"))
+ {
+ int start = errText.indexOf("${");
+ int end = errText.indexOf("}", start);
+ String token = errText.substring(start + 2, end);
+ String value = (String) aClass.getField(token).get(problem);
+ token = "${" + token + "}";
+ errText = errText.replace(token, value);
+ }
+
+ msg.setMessage(errText);
+ logMessage(msg);
+ }
+ catch (IllegalArgumentException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (SecurityException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (IllegalAccessException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ catch (NoSuchFieldException e)
+ {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+
+ }
+ }
+
+ private static void logMessage(CompilerMessage msg) {
+
+ final Logger logger = ThreadLocalToolkit.getLogger();
+
+ if (logger != null) {
+ if (msg.getLevel().equals(Message.INFO)) {
+ logger.logInfo(msg.getPath(), msg.getLine(), msg.getColumn(), msg.getMessage());
+ } else if (msg.getLevel().equals(Message.WARNING)) {
+ logger.logWarning(msg.getPath(), msg.getLine(), msg.getColumn(), msg.getMessage());
+ } else if (msg.getLevel().equals(Message.ERROR)) {
+ logger.logError(msg.getPath(), msg.getLine(), msg.getColumn(), msg.getMessage());
+ }
+ }
+ }
+
+ public static class NoUpdateMessage extends CompilerMessage.CompilerInfo {
+ private static final long serialVersionUID = 6943388392279226490L;
+ public String name;
+
+ public NoUpdateMessage(String name) {
+ this.name = name;
+ }
+ }
+
+ static class CompilerRequestableProblems implements ProblemQueryProvider {
+ private MXMLC mxmlc;
+
+ public CompilerRequestableProblems(MXMLC mxmlc) {
+ this.mxmlc = mxmlc;
+ }
+
+ @Override
+ public ProblemQuery getProblemQuery() {
+ return mxmlc.getProblems();
+ }
+ }
+}
[12/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
super calls into emitter. - Refactored binary operators into emitter. -
Refactored identifier into emitter.
Posted by ah...@apache.org.
- Refactored super calls into emitter.
- Refactored binary operators into emitter.
- Refactored identifier into emitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/cca81f42
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/cca81f42
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/cca81f42
Branch: refs/heads/develop
Commit: cca81f421eb9a3f5df3a748c5ab3ecc0f2d3d517
Parents: 62b62ec
Author: Michael Schmalle <ms...@apache.org>
Authored: Sat May 30 19:01:13 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:16 2015 +0100
----------------------------------------------------------------------
.../codegen/js/flexjs/JSFlexJSEmitter.java | 475 +------------------
.../codegen/js/jx/BinaryOperatorEmitter.java | 271 +++++++++++
.../codegen/js/jx/IdentifierEmitter.java | 128 +++++
.../codegen/js/jx/SuperCallEmitter.java | 245 ++++++++++
.../internal/codegen/js/utils/EmitterUtils.java | 125 ++++-
5 files changed, 785 insertions(+), 459 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cca81f42/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 4f5a57e..955e033 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -21,15 +21,9 @@ package org.apache.flex.compiler.internal.codegen.js.flexjs;
import java.io.FilterWriter;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
-import org.apache.flex.compiler.clients.MXMLJSC;
-import org.apache.flex.compiler.clients.MXMLJSC.JSOutputType;
import org.apache.flex.compiler.codegen.IDocEmitter;
import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
import org.apache.flex.compiler.common.ASModifier;
@@ -38,39 +32,29 @@ import org.apache.flex.compiler.common.ModifiersSet;
import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.definitions.IFunctionDefinition;
-import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
-import org.apache.flex.compiler.definitions.INamespaceDefinition;
import org.apache.flex.compiler.definitions.IPackageDefinition;
import org.apache.flex.compiler.definitions.ITypeDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
-import org.apache.flex.compiler.internal.definitions.ClassDefinition;
-import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
-import org.apache.flex.compiler.internal.definitions.ParameterDefinition;
-import org.apache.flex.compiler.internal.definitions.VariableDefinition;
-import org.apache.flex.compiler.internal.projects.CompilerProject;
import org.apache.flex.compiler.internal.projects.FlexJSProject;
import org.apache.flex.compiler.internal.scopes.ASProjectScope;
import org.apache.flex.compiler.internal.scopes.PackageScope;
-import org.apache.flex.compiler.internal.scopes.TypeScope;
-import org.apache.flex.compiler.internal.tree.as.BinaryOperatorAssignmentNode;
import org.apache.flex.compiler.internal.tree.as.ClassNode;
-import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
import org.apache.flex.compiler.internal.tree.as.FunctionNode;
import org.apache.flex.compiler.internal.tree.as.GetterNode;
-import org.apache.flex.compiler.internal.tree.as.ParameterNode;
import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
import org.apache.flex.compiler.internal.tree.as.SetterNode;
import org.apache.flex.compiler.internal.tree.as.UnaryOperatorAtNode;
-import org.apache.flex.compiler.projects.ICompilerProject;
import org.apache.flex.compiler.scopes.IASScope;
import org.apache.flex.compiler.tree.ASTNodeID;
import org.apache.flex.compiler.tree.as.IASNode;
@@ -82,7 +66,6 @@ import org.apache.flex.compiler.tree.as.IExpressionNode;
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.IInterfaceNode;
@@ -114,7 +97,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
private ClassEmitter classEmitter;
private FieldEmitter fieldEmitter;
private FunctionCallEmitter functionCallEmitter;
-
+ private SuperCallEmitter superCallEmitter;
+ private BinaryOperatorEmitter binaryOperatorEmitter;
+ private IdentifierEmitter identifierEmitter;
+
public ClassEmitter getClassEmiter()
{
return classEmitter;
@@ -127,6 +113,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
classEmitter = new ClassEmitter(this);
fieldEmitter = new FieldEmitter(this);
functionCallEmitter = new FunctionCallEmitter(this);
+ superCallEmitter = new SuperCallEmitter(this);
+ binaryOperatorEmitter = new BinaryOperatorEmitter(this);
+ identifierEmitter = new IdentifierEmitter(this);
}
@Override
@@ -244,207 +233,14 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
super.emitSelfReference(node);
}
- private boolean writeThis(IIdentifierNode node)
- {
- IClassNode classNode = (IClassNode) node
- .getAncestorOfType(IClassNode.class);
-
- IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
-
- IASNode parentNode = node.getParent();
- ASTNodeID parentNodeId = parentNode.getNodeID();
-
- IASNode firstChild = parentNode.getChild(0);
-
- final IClassDefinition thisClass = getModel().getCurrentClass();
-
- boolean identifierIsMemberAccess = parentNodeId == ASTNodeID.MemberAccessExpressionID;
-
- if (classNode == null) // script in MXML and AS interface definitions
- {
- if (nodeDef instanceof ParameterDefinition)
- return false;
-
- if (nodeDef instanceof VariableDefinition)
- {
- IDefinition pdef = ((VariableDefinition) nodeDef).getParent();
-
- if (thisClass == null || !isSameClass(pdef, thisClass, project))
- return false;
-
- if (identifierIsMemberAccess)
- return node == firstChild;
-
- return parentNodeId == ASTNodeID.ContainerID
- || !(parentNode instanceof ParameterNode);
- }
- else if (nodeDef instanceof AccessorDefinition)
- {
- IDefinition pdef = ((AccessorDefinition) nodeDef).getParent();
-
- if (thisClass == null || !isSameClass(pdef, thisClass, project))
- return false;
-
- if (identifierIsMemberAccess)
- return node == firstChild;
-
- return true;
- }
- else if (parentNodeId == ASTNodeID.ContainerID
- && nodeDef instanceof FunctionDefinition)
- {
- return ((FunctionDefinition) nodeDef)
- .getFunctionClassification() == FunctionClassification.CLASS_MEMBER; // for 'goog.bind'
- }
- else
- {
- return parentNodeId == ASTNodeID.FunctionCallID
- && !(nodeDef instanceof AccessorDefinition)
- && !identifierIsMemberAccess;
- }
- }
- else
- {
- if (nodeDef != null && !nodeDef.isInternal()
- && isClassMember(nodeDef, classNode))
- {
- if (identifierIsMemberAccess)
- {
- return node == firstChild;
- }
- else
- {
- boolean identifierIsLocalFunction = nodeDef instanceof FunctionDefinition
- && !(nodeDef instanceof AccessorDefinition)
- && ((FunctionDefinition) nodeDef)
- .getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL;
-
- return !identifierIsLocalFunction;
- }
- }
- }
-
- return false;
- }
-
- private boolean isClassMember(IDefinition nodeDef, IClassNode classNode)
- {
- TypeScope cscope = (TypeScope) classNode.getDefinition()
- .getContainedScope();
-
- Set<INamespaceDefinition> nsSet = cscope.getNamespaceSet(project);
- Collection<IDefinition> defs = new HashSet<IDefinition>();
-
- cscope.getAllPropertiesForMemberAccess((CompilerProject) project, defs,
- nsSet);
-
- Iterator<IDefinition> visiblePropertiesIterator = defs.iterator();
- while (visiblePropertiesIterator.hasNext())
- {
- if (nodeDef.getQualifiedName().equals(
- visiblePropertiesIterator.next().getQualifiedName()))
- return true;
- }
-
- return false;
- }
-
- private boolean isSameClass(IDefinition pdef, IDefinition thisClass,
- ICompilerProject project)
- {
- if (pdef == thisClass)
- return true;
-
- IDefinition cdef = ((ClassDefinition) thisClass)
- .resolveBaseClass(project);
- while (cdef != null)
- {
- // needs to be a loop
- if (cdef == pdef)
- return true;
- cdef = ((ClassDefinition) cdef).resolveBaseClass(project);
- }
- return false;
- }
-
@Override
public void emitIdentifier(IIdentifierNode node)
{
- if (project == null)
- project = getWalker().getProject();
-
- IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
-
- IASNode parentNode = node.getParent();
- ASTNodeID parentNodeId = parentNode.getNodeID();
-
- boolean identifierIsAccessorFunction = nodeDef instanceof AccessorDefinition;
- boolean identifierIsPlainFunction = nodeDef instanceof FunctionDefinition
- && !identifierIsAccessorFunction;
-
- boolean emitName = true;
-
- if (nodeDef != null && nodeDef.isStatic())
- {
- String sname = nodeDef.getParent().getQualifiedName();
- if (sname.length() > 0)
- {
- write(formatQualifiedName(sname));
- write(ASEmitterTokens.MEMBER_ACCESS);
- }
- }
- else if (!NativeUtils.isNative(node.getName()))
- {
- // an instance method as a parameter or
- // a local function
- boolean useGoogBind = (parentNodeId == ASTNodeID.ContainerID
- && identifierIsPlainFunction && ((FunctionDefinition) nodeDef)
- .getFunctionClassification() == FunctionClassification.CLASS_MEMBER)
- || (identifierIsPlainFunction && ((FunctionDefinition) nodeDef)
- .getFunctionClassification() == FunctionClassification.LOCAL);
-
- if (useGoogBind)
- {
- write(JSGoogEmitterTokens.GOOG_BIND);
- write(ASEmitterTokens.PAREN_OPEN);
- }
-
- if (writeThis(node))
- {
- IFunctionObjectNode functionObjectNode = (IFunctionObjectNode) node
- .getParent().getAncestorOfType(
- IFunctionObjectNode.class);
-
- if (functionObjectNode != null)
- write(JSGoogEmitterTokens.SELF);
- else
- write(ASEmitterTokens.THIS);
-
- write(ASEmitterTokens.MEMBER_ACCESS);
- }
-
- if (useGoogBind)
- {
- write(node.getName());
-
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.PAREN_CLOSE);
-
- emitName = false;
- }
- }
-
- //IDefinition parentDef = (nodeDef != null) ? nodeDef.getParent() : null;
- //boolean isNative = (parentDef != null)
- // && NativeUtils.isNative(parentDef.getBaseName());
- if (emitName)
- {
- if (nodeDef != null)
- write(formatQualifiedName(nodeDef.getQualifiedName()));
- else
- write(node.getName());
- }
+ // TODO (mschmalle) remove when project field is removed
+ if (project == null)
+ project = getWalker().getProject();
+
+ identifierEmitter.emit(node);
}
//--------------------------------------------------------------------------
@@ -452,250 +248,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitSuperCall(IASNode node, String type)
{
- IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
- : null;
- IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
- : null;
-
- final IClassDefinition thisClass = getModel().getCurrentClass();
-
- if (type == JSSessionModel.SUPER_FUNCTION_CALL)
- {
- if (fnode == null)
- fnode = (IFunctionNode) fcnode
- .getAncestorOfType(IFunctionNode.class);
-
- if (fnode != null && fnode.isConstructor() && !hasSuperClass(fnode))
- return;
-
- IClassNode cnode = (IClassNode) node
- .getAncestorOfType(IClassNode.class);
-
- // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
- if (cnode == null && MXMLJSC.jsOutputType == JSOutputType.VF2JS)
- return;
-
- if (fnode != null
- && (fnode.getNodeID() == ASTNodeID.GetterID || fnode
- .getNodeID() == ASTNodeID.SetterID))
- {
- write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
- write(ASEmitterTokens.MEMBER_ACCESS);
- if (fnode.getNodeID() == ASTNodeID.GetterID)
- write(JSFlexJSEmitterTokens.SUPERGETTER);
- else
- write(JSFlexJSEmitterTokens.SUPERSETTER);
- write(ASEmitterTokens.PAREN_OPEN);
- if (cnode == null && thisClass != null)
- write(formatQualifiedName(thisClass.getQualifiedName()));
- else
- write(formatQualifiedName(cnode.getQualifiedName()));
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.THIS);
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(fnode.getName());
- write(ASEmitterTokens.SINGLE_QUOTE);
-
- IASNode[] anodes = null;
- boolean writeArguments = false;
- if (fcnode != null)
- {
- anodes = fcnode.getArgumentNodes();
-
- writeArguments = anodes.length > 0;
- }
- else if (fnode != null && fnode.isConstructor())
- {
- anodes = fnode.getParameterNodes();
-
- writeArguments = (anodes != null && anodes.length > 0);
- }
- else if (node instanceof IFunctionNode
- && node instanceof BinaryOperatorAssignmentNode)
- {
- BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
-
- IFunctionNode pnode = (IFunctionNode) bnode
- .getAncestorOfType(IFunctionNode.class);
-
- if (pnode.getNodeID() == ASTNodeID.SetterID)
- {
- writeToken(ASEmitterTokens.COMMA);
- getWalker().walk(bnode.getRightOperandNode());
- }
- }
-
- if (writeArguments)
- {
- int len = anodes.length;
- for (int i = 0; i < len; i++)
- {
- writeToken(ASEmitterTokens.COMMA);
-
- getWalker().walk(anodes[i]);
- }
- }
-
- write(ASEmitterTokens.PAREN_CLOSE);
- return;
- }
- }
- super.emitSuperCall(node, type);
+ superCallEmitter.emit(node, type);
}
@Override
public void emitBinaryOperator(IBinaryOperatorNode node)
{
- ASTNodeID id = node.getNodeID();
- /*
- if (id == ASTNodeID.Op_InID
- || id == ASTNodeID.Op_LogicalAndAssignID
- || id == ASTNodeID.Op_LogicalOrAssignID)
- {
- super.emitBinaryOperator(node);
- }
- else */if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
- {
- emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id,
- false);
- }
- else if (id == ASTNodeID.Op_InstanceOfID)
- {
- getWalker().walk(node.getLeftOperandNode());
-
- write(ASEmitterTokens.SPACE);
- writeToken(ASEmitterTokens.INSTANCEOF);
-
- IDefinition dnode = (node.getRightOperandNode()).resolve(project);
- if (dnode != null)
- write(formatQualifiedName(dnode.getQualifiedName()));
- else
- getWalker().walk(node.getRightOperandNode());
- }
- else
- {
- IExpressionNode leftSide = node.getLeftOperandNode();
- if (leftSide.getNodeID() == ASTNodeID.MemberAccessExpressionID)
- {
- IASNode lnode = leftSide.getChild(0);
- IASNode rnode = leftSide.getChild(1);
- IDefinition rnodeDef = ((IIdentifierNode) rnode)
- .resolve(getWalker().getProject());
- if (lnode.getNodeID() == ASTNodeID.SuperID
- && rnodeDef instanceof AccessorDefinition)
- {
- String op = node.getOperator().getOperatorText();
- boolean isAssignment = op.contains("=")
- && !op.contains("==")
- && !(op.startsWith("<") || op.startsWith(">") || op
- .startsWith("!"));
- if (isAssignment)
- {
- write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSFlexJSEmitterTokens.SUPERSETTER);
- write(ASEmitterTokens.PAREN_OPEN);
- IClassNode cnode = (IClassNode) node
- .getAncestorOfType(IClassNode.class);
- write(formatQualifiedName(cnode.getQualifiedName()));
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.THIS);
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(rnodeDef.getBaseName());
- write(ASEmitterTokens.SINGLE_QUOTE);
- writeToken(ASEmitterTokens.COMMA);
-
- if (op.length() > 1) // += and things like that
- {
- write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSFlexJSEmitterTokens.SUPERSETTER);
- write(ASEmitterTokens.PAREN_OPEN);
- write(formatQualifiedName(cnode.getQualifiedName()));
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.THIS);
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(rnodeDef.getBaseName());
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(op.substring(0, 1));
- }
-
- getWalker().walk(node.getRightOperandNode());
- write(ASEmitterTokens.PAREN_CLOSE);
- return;
- }
- }
- }
-
- super.emitBinaryOperator(node);
- /*
- IExpressionNode leftSide = node.getLeftOperandNode();
-
- IExpressionNode property = null;
- int leftSideChildCount = leftSide.getChildCount();
- if (leftSideChildCount > 0)
- {
- IASNode childNode = leftSide.getChild(leftSideChildCount - 1);
- if (childNode instanceof IExpressionNode)
- property = (IExpressionNode) childNode;
- else
- property = leftSide;
- }
- else
- property = leftSide;
-
- IDefinition def = null;
- if (property instanceof IIdentifierNode)
- def = ((IIdentifierNode) property).resolve(getWalker()
- .getProject());
-
- boolean isSuper = false;
- if (leftSide.getNodeID() == ASTNodeID.MemberAccessExpressionID)
- {
- IASNode cnode = leftSide.getChild(0);
- ASTNodeID cId = cnode.getNodeID();
-
- isSuper = cId == ASTNodeID.SuperID;
- }
-
- String op = node.getOperator().getOperatorText();
- boolean isAssignment = op.contains("=") && !op.contains("==") &&
- !(op.startsWith("<") ||
- op.startsWith(">") ||
- op.startsWith("!"));
-
- if (def instanceof AccessorDefinition && isAssignment)
- {
- // this will make the set_foo call
- getWalker().walk(leftSide);
- }
- else if (isSuper)
- {
- emitSuperCall(node, "");
- }
- else
- {
- if (ASNodeUtils.hasParenOpen(node))
- write(ASEmitterTokens.PAREN_OPEN);
-
- getWalker().walk(leftSide);
-
- if (node.getNodeID() != ASTNodeID.Op_CommaID)
- write(ASEmitterTokens.SPACE);
-
- writeToken(node.getOperator().getOperatorText());
-
- getWalker().walk(node.getRightOperandNode());
-
- if (ASNodeUtils.hasParenClose(node))
- write(ASEmitterTokens.PAREN_CLOSE);
- }
- */
- }
+ binaryOperatorEmitter.emit(node);
}
public void emitIsAs(IExpressionNode left, IExpressionNode right,
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cca81f42/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
new file mode 100644
index 0000000..80ea2c5
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -0,0 +1,271 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.utils.ASNodeUtils;
+
+public class BinaryOperatorEmitter extends JSSubEmitter implements
+ ISubEmitter<IBinaryOperatorNode>
+{
+
+ public BinaryOperatorEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IBinaryOperatorNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ ASTNodeID id = node.getNodeID();
+ /*
+ if (id == ASTNodeID.Op_InID
+ || id == ASTNodeID.Op_LogicalAndAssignID
+ || id == ASTNodeID.Op_LogicalOrAssignID)
+ {
+ super.emitBinaryOperator(node);
+ }
+ else */if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
+ {
+ fjs.emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(),
+ id, false);
+ }
+ else if (id == ASTNodeID.Op_InstanceOfID)
+ {
+ getWalker().walk(node.getLeftOperandNode());
+
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.INSTANCEOF);
+
+ IDefinition dnode = (node.getRightOperandNode())
+ .resolve(getProject());
+ if (dnode != null)
+ write(fjs.formatQualifiedName(dnode.getQualifiedName()));
+ else
+ getWalker().walk(node.getRightOperandNode());
+ }
+ else
+ {
+ IExpressionNode leftSide = node.getLeftOperandNode();
+ if (leftSide.getNodeID() == ASTNodeID.MemberAccessExpressionID)
+ {
+ IASNode lnode = leftSide.getChild(0);
+ IASNode rnode = leftSide.getChild(1);
+ IDefinition rnodeDef = ((IIdentifierNode) rnode)
+ .resolve(getWalker().getProject());
+ if (lnode.getNodeID() == ASTNodeID.SuperID
+ && rnodeDef instanceof AccessorDefinition)
+ {
+ String op = node.getOperator().getOperatorText();
+ boolean isAssignment = op.contains("=")
+ && !op.contains("==")
+ && !(op.startsWith("<") || op.startsWith(">") || op
+ .startsWith("!"));
+ if (isAssignment)
+ {
+ write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSFlexJSEmitterTokens.SUPERSETTER);
+ write(ASEmitterTokens.PAREN_OPEN);
+ IClassNode cnode = (IClassNode) node
+ .getAncestorOfType(IClassNode.class);
+ write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.THIS);
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(rnodeDef.getBaseName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ writeToken(ASEmitterTokens.COMMA);
+
+ if (op.length() > 1) // += and things like that
+ {
+ write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSFlexJSEmitterTokens.SUPERSETTER);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(fjs.formatQualifiedName(cnode
+ .getQualifiedName()));
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.THIS);
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(rnodeDef.getBaseName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(op.substring(0, 1));
+ }
+
+ getWalker().walk(node.getRightOperandNode());
+ write(ASEmitterTokens.PAREN_CLOSE);
+ return;
+ }
+ }
+ }
+
+ super_emitBinaryOperator(node);
+ /*
+ IExpressionNode leftSide = node.getLeftOperandNode();
+
+ IExpressionNode property = null;
+ int leftSideChildCount = leftSide.getChildCount();
+ if (leftSideChildCount > 0)
+ {
+ IASNode childNode = leftSide.getChild(leftSideChildCount - 1);
+ if (childNode instanceof IExpressionNode)
+ property = (IExpressionNode) childNode;
+ else
+ property = leftSide;
+ }
+ else
+ property = leftSide;
+
+ IDefinition def = null;
+ if (property instanceof IIdentifierNode)
+ def = ((IIdentifierNode) property).resolve(getWalker()
+ .getProject());
+
+ boolean isSuper = false;
+ if (leftSide.getNodeID() == ASTNodeID.MemberAccessExpressionID)
+ {
+ IASNode cnode = leftSide.getChild(0);
+ ASTNodeID cId = cnode.getNodeID();
+
+ isSuper = cId == ASTNodeID.SuperID;
+ }
+
+ String op = node.getOperator().getOperatorText();
+ boolean isAssignment = op.contains("=") && !op.contains("==") &&
+ !(op.startsWith("<") ||
+ op.startsWith(">") ||
+ op.startsWith("!"));
+
+ if (def instanceof AccessorDefinition && isAssignment)
+ {
+ // this will make the set_foo call
+ getWalker().walk(leftSide);
+ }
+ else if (isSuper)
+ {
+ emitSuperCall(node, "");
+ }
+ else
+ {
+ if (ASNodeUtils.hasParenOpen(node))
+ write(ASEmitterTokens.PAREN_OPEN);
+
+ getWalker().walk(leftSide);
+
+ if (node.getNodeID() != ASTNodeID.Op_CommaID)
+ write(ASEmitterTokens.SPACE);
+
+ writeToken(node.getOperator().getOperatorText());
+
+ getWalker().walk(node.getRightOperandNode());
+
+ if (ASNodeUtils.hasParenClose(node))
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+ */
+ }
+ }
+
+ private void super_emitBinaryOperator(IBinaryOperatorNode node)
+ {
+ if (ASNodeUtils.hasParenOpen(node))
+ write(ASEmitterTokens.PAREN_OPEN);
+
+ ASTNodeID id = node.getNodeID();
+
+ if (id == ASTNodeID.Op_IsID)
+ {
+ write(ASEmitterTokens.IS);
+ write(ASEmitterTokens.PAREN_OPEN);
+ getWalker().walk(node.getLeftOperandNode());
+ writeToken(ASEmitterTokens.COMMA);
+ getWalker().walk(node.getRightOperandNode());
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+ else if (id == ASTNodeID.Op_AsID)
+ {
+ // (is(a, b) ? a : null)
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.IS);
+ write(ASEmitterTokens.PAREN_OPEN);
+ getWalker().walk(node.getLeftOperandNode());
+ writeToken(ASEmitterTokens.COMMA);
+ getWalker().walk(node.getRightOperandNode());
+ writeToken(ASEmitterTokens.PAREN_CLOSE);
+ writeToken(ASEmitterTokens.TERNARY);
+ getWalker().walk(node.getLeftOperandNode());
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.NULL);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+ else
+ {
+ getWalker().walk(node.getLeftOperandNode());
+
+ if (id != ASTNodeID.Op_CommaID)
+ write(ASEmitterTokens.SPACE);
+
+ // (erikdebruin) rewrite 'a &&= b' to 'a = a && b'
+ if (id == ASTNodeID.Op_LogicalAndAssignID
+ || id == ASTNodeID.Op_LogicalOrAssignID)
+ {
+ IIdentifierNode lnode = (IIdentifierNode) node
+ .getLeftOperandNode();
+
+ writeToken(ASEmitterTokens.EQUAL);
+ writeToken(lnode.getName());
+ write((id == ASTNodeID.Op_LogicalAndAssignID) ? ASEmitterTokens.LOGICAL_AND
+ : ASEmitterTokens.LOGICAL_OR);
+ }
+ else
+ {
+ write(node.getOperator().getOperatorText());
+ }
+
+ write(ASEmitterTokens.SPACE);
+
+ getWalker().walk(node.getRightOperandNode());
+ }
+
+ if (ASNodeUtils.hasParenOpen(node))
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cca81f42/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
new file mode 100644
index 0000000..3af251d
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
@@ -0,0 +1,128 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
+import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.utils.NativeUtils;
+
+public class IdentifierEmitter extends JSSubEmitter implements
+ ISubEmitter<IIdentifierNode>
+{
+
+ public IdentifierEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IIdentifierNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ IDefinition nodeDef = ((IIdentifierNode) node).resolve(getProject());
+
+ IASNode parentNode = node.getParent();
+ ASTNodeID parentNodeId = parentNode.getNodeID();
+
+ boolean identifierIsAccessorFunction = nodeDef instanceof AccessorDefinition;
+ boolean identifierIsPlainFunction = nodeDef instanceof FunctionDefinition
+ && !identifierIsAccessorFunction;
+
+ boolean emitName = true;
+
+ if (nodeDef != null && nodeDef.isStatic())
+ {
+ String sname = nodeDef.getParent().getQualifiedName();
+ if (sname.length() > 0)
+ {
+ write(fjs.formatQualifiedName(sname));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ }
+ }
+ else if (!NativeUtils.isNative(node.getName()))
+ {
+ // an instance method as a parameter or
+ // a local function
+ boolean useGoogBind = (parentNodeId == ASTNodeID.ContainerID
+ && identifierIsPlainFunction && ((FunctionDefinition) nodeDef)
+ .getFunctionClassification() == FunctionClassification.CLASS_MEMBER)
+ || (identifierIsPlainFunction && ((FunctionDefinition) nodeDef)
+ .getFunctionClassification() == FunctionClassification.LOCAL);
+
+ if (useGoogBind)
+ {
+ write(JSGoogEmitterTokens.GOOG_BIND);
+ write(ASEmitterTokens.PAREN_OPEN);
+ }
+
+ if (EmitterUtils.writeThis(getProject(), getModel(), node))
+ {
+ IFunctionObjectNode functionObjectNode = (IFunctionObjectNode) node
+ .getParent().getAncestorOfType(
+ IFunctionObjectNode.class);
+
+ if (functionObjectNode != null)
+ write(JSGoogEmitterTokens.SELF);
+ else
+ write(ASEmitterTokens.THIS);
+
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ }
+
+ if (useGoogBind)
+ {
+ write(node.getName());
+
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.PAREN_CLOSE);
+
+ emitName = false;
+ }
+ }
+
+ //IDefinition parentDef = (nodeDef != null) ? nodeDef.getParent() : null;
+ //boolean isNative = (parentDef != null)
+ // && NativeUtils.isNative(parentDef.getBaseName());
+ if (emitName)
+ {
+ if (nodeDef != null)
+ write(fjs.formatQualifiedName(nodeDef.getQualifiedName()));
+ else
+ write(node.getName());
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cca81f42/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
new file mode 100644
index 0000000..90c3bdb
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
@@ -0,0 +1,245 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.clients.MXMLJSC;
+import org.apache.flex.compiler.clients.MXMLJSC.JSOutputType;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.internal.tree.as.BinaryOperatorAssignmentNode;
+import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IFunctionCallNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+
+public class SuperCallEmitter extends JSSubEmitter
+{
+
+ public SuperCallEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ // TODO Auto-generated constructor stub
+ }
+
+ public void emit(IASNode node, String type)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
+ : null;
+ IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
+ : null;
+
+ final IClassDefinition thisClass = getModel().getCurrentClass();
+
+ if (type == JSSessionModel.SUPER_FUNCTION_CALL)
+ {
+ if (fnode == null)
+ fnode = (IFunctionNode) fcnode
+ .getAncestorOfType(IFunctionNode.class);
+
+ if (fnode != null && fnode.isConstructor()
+ && !EmitterUtils.hasSuperClass(getProject(), fnode))
+ return;
+
+ IClassNode cnode = (IClassNode) node
+ .getAncestorOfType(IClassNode.class);
+
+ // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
+ if (cnode == null && MXMLJSC.jsOutputType == JSOutputType.VF2JS)
+ return;
+
+ if (fnode != null
+ && (fnode.getNodeID() == ASTNodeID.GetterID || fnode
+ .getNodeID() == ASTNodeID.SetterID))
+ {
+ write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ if (fnode.getNodeID() == ASTNodeID.GetterID)
+ write(JSFlexJSEmitterTokens.SUPERGETTER);
+ else
+ write(JSFlexJSEmitterTokens.SUPERSETTER);
+ write(ASEmitterTokens.PAREN_OPEN);
+ if (cnode == null && thisClass != null)
+ write(fjs.formatQualifiedName(thisClass.getQualifiedName()));
+ else
+ write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.THIS);
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(fnode.getName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+
+ IASNode[] anodes = null;
+ boolean writeArguments = false;
+ if (fcnode != null)
+ {
+ anodes = fcnode.getArgumentNodes();
+
+ writeArguments = anodes.length > 0;
+ }
+ else if (fnode != null && fnode.isConstructor())
+ {
+ anodes = fnode.getParameterNodes();
+
+ writeArguments = (anodes != null && anodes.length > 0);
+ }
+ else if (node instanceof IFunctionNode
+ && node instanceof BinaryOperatorAssignmentNode)
+ {
+ BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
+
+ IFunctionNode pnode = (IFunctionNode) bnode
+ .getAncestorOfType(IFunctionNode.class);
+
+ if (pnode.getNodeID() == ASTNodeID.SetterID)
+ {
+ writeToken(ASEmitterTokens.COMMA);
+ getWalker().walk(bnode.getRightOperandNode());
+ }
+ }
+
+ if (writeArguments)
+ {
+ int len = anodes.length;
+ for (int i = 0; i < len; i++)
+ {
+ writeToken(ASEmitterTokens.COMMA);
+
+ getWalker().walk(anodes[i]);
+ }
+ }
+
+ write(ASEmitterTokens.PAREN_CLOSE);
+ return;
+ }
+ }
+ super_emitSuperCall(node, type);
+ }
+
+ protected void super_emitSuperCall(IASNode node, String type)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
+ : null;
+ IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
+ : null;
+
+ if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
+ {
+ indentPush();
+ writeNewline();
+ indentPop();
+ }
+ else if (type == JSSessionModel.SUPER_FUNCTION_CALL)
+ {
+ if (fnode == null)
+ fnode = (IFunctionNode) fcnode
+ .getAncestorOfType(IFunctionNode.class);
+ }
+
+ if (fnode.isConstructor()
+ && !EmitterUtils.hasSuperClass(getProject(), fnode))
+ return;
+
+ IClassNode cnode = (IClassNode) node
+ .getAncestorOfType(IClassNode.class);
+
+ if (cnode == null)
+ {
+ IDefinition cdef = getModel().getCurrentClass();
+ write(fjs.formatQualifiedName(cdef.getQualifiedName()));
+ }
+ else
+ write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSGoogEmitterTokens.GOOG_BASE);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.THIS);
+
+ if (fnode.isConstructor())
+ {
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(JSGoogEmitterTokens.GOOG_CONSTRUCTOR);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ }
+
+ if (fnode != null && !fnode.isConstructor())
+ {
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(fnode.getName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ }
+
+ IASNode[] anodes = null;
+ boolean writeArguments = false;
+ if (fcnode != null)
+ {
+ anodes = fcnode.getArgumentNodes();
+
+ writeArguments = anodes.length > 0;
+ }
+ else if (fnode.isConstructor())
+ {
+ anodes = fnode.getParameterNodes();
+
+ writeArguments = (anodes != null && anodes.length > 0);
+ }
+
+ if (writeArguments)
+ {
+ int len = anodes.length;
+ for (int i = 0; i < len; i++)
+ {
+ writeToken(ASEmitterTokens.COMMA);
+
+ getWalker().walk(anodes[i]);
+ }
+ }
+
+ write(ASEmitterTokens.PAREN_CLOSE);
+
+ if (type == JSSessionModel.CONSTRUCTOR_FULL)
+ {
+ write(ASEmitterTokens.SEMICOLON);
+ writeNewline();
+ }
+ else if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
+ {
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cca81f42/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 9f6a99d..69acf2d 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -20,19 +20,35 @@
package org.apache.flex.compiler.internal.codegen.js.utils;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
import java.util.List;
+import java.util.Set;
import org.apache.flex.compiler.constants.IASLanguageConstants;
import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.INamespaceDefinition;
import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
+import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
import org.apache.flex.compiler.internal.definitions.ClassDefinition;
+import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
+import org.apache.flex.compiler.internal.definitions.ParameterDefinition;
+import org.apache.flex.compiler.internal.definitions.VariableDefinition;
+import org.apache.flex.compiler.internal.projects.CompilerProject;
+import org.apache.flex.compiler.internal.scopes.TypeScope;
+import org.apache.flex.compiler.internal.tree.as.ParameterNode;
import org.apache.flex.compiler.projects.ICompilerProject;
import org.apache.flex.compiler.tree.ASTNodeID;
import org.apache.flex.compiler.tree.as.IASNode;
import org.apache.flex.compiler.tree.as.IClassNode;
import org.apache.flex.compiler.tree.as.IDefinitionNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
import org.apache.flex.compiler.tree.as.IScopedNode;
/**
@@ -119,11 +135,118 @@ public class EmitterUtils
}
return list;
}
-
+
public static IClassDefinition getClassDefinition(IDefinitionNode node)
{
IClassNode tnode = (IClassNode) node
.getAncestorOfType(IClassNode.class);
return (tnode != null) ? tnode.getDefinition() : null;
}
+
+ public static boolean writeThis(ICompilerProject project,
+ JSSessionModel model, IIdentifierNode node)
+ {
+ IClassNode classNode = (IClassNode) node
+ .getAncestorOfType(IClassNode.class);
+
+ IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
+
+ IASNode parentNode = node.getParent();
+ ASTNodeID parentNodeId = parentNode.getNodeID();
+
+ IASNode firstChild = parentNode.getChild(0);
+
+ final IClassDefinition thisClass = model.getCurrentClass();
+
+ boolean identifierIsMemberAccess = parentNodeId == ASTNodeID.MemberAccessExpressionID;
+
+ if (classNode == null) // script in MXML and AS interface definitions
+ {
+ if (nodeDef instanceof ParameterDefinition)
+ return false;
+
+ if (nodeDef instanceof VariableDefinition)
+ {
+ IDefinition pdef = ((VariableDefinition) nodeDef).getParent();
+
+ if (thisClass == null || !isSameClass(pdef, thisClass, project))
+ return false;
+
+ if (identifierIsMemberAccess)
+ return node == firstChild;
+
+ return parentNodeId == ASTNodeID.ContainerID
+ || !(parentNode instanceof ParameterNode);
+ }
+ else if (nodeDef instanceof AccessorDefinition)
+ {
+ IDefinition pdef = ((AccessorDefinition) nodeDef).getParent();
+
+ if (thisClass == null || !isSameClass(pdef, thisClass, project))
+ return false;
+
+ if (identifierIsMemberAccess)
+ return node == firstChild;
+
+ return true;
+ }
+ else if (parentNodeId == ASTNodeID.ContainerID
+ && nodeDef instanceof FunctionDefinition)
+ {
+ return ((FunctionDefinition) nodeDef)
+ .getFunctionClassification() == FunctionClassification.CLASS_MEMBER; // for 'goog.bind'
+ }
+ else
+ {
+ return parentNodeId == ASTNodeID.FunctionCallID
+ && !(nodeDef instanceof AccessorDefinition)
+ && !identifierIsMemberAccess;
+ }
+ }
+ else
+ {
+ if (nodeDef != null && !nodeDef.isInternal()
+ && isClassMember(project, nodeDef, classNode))
+ {
+ if (identifierIsMemberAccess)
+ {
+ return node == firstChild;
+ }
+ else
+ {
+ boolean identifierIsLocalFunction = nodeDef instanceof FunctionDefinition
+ && !(nodeDef instanceof AccessorDefinition)
+ && ((FunctionDefinition) nodeDef)
+ .getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL;
+
+ return !identifierIsLocalFunction;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public static boolean isClassMember(ICompilerProject project,
+ IDefinition nodeDef, IClassNode classNode)
+ {
+ TypeScope cscope = (TypeScope) classNode.getDefinition()
+ .getContainedScope();
+
+ Set<INamespaceDefinition> nsSet = cscope.getNamespaceSet(project);
+ Collection<IDefinition> defs = new HashSet<IDefinition>();
+
+ cscope.getAllPropertiesForMemberAccess((CompilerProject) project, defs,
+ nsSet);
+
+ Iterator<IDefinition> visiblePropertiesIterator = defs.iterator();
+ while (visiblePropertiesIterator.hasNext())
+ {
+ if (nodeDef.getQualifiedName().equals(
+ visiblePropertiesIterator.next().getQualifiedName()))
+ return true;
+ }
+
+ return false;
+ }
}
[13/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
member access expression to emitter. - Refactored Package header to emitter.
- Refactored Package footer to emitter.
Posted by ah...@apache.org.
- Refactored member access expression to emitter.
- Refactored Package header to emitter.
- Refactored Package footer to emitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/cea0796c
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/cea0796c
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/cea0796c
Branch: refs/heads/develop
Commit: cea0796cb2a24c07161ce0cfb8284737c97bfcbd
Parents: cca81f4
Author: Michael Schmalle <ms...@apache.org>
Authored: Sat May 30 19:23:46 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:20 2015 +0100
----------------------------------------------------------------------
.../compiler/internal/codegen/as/ASEmitter.java | 2 +-
.../codegen/js/flexjs/JSFlexJSEmitter.java | 567 +++----------------
.../internal/codegen/js/jx/ClassEmitter.java | 1 +
.../internal/codegen/js/jx/GetSetEmitter.java | 95 ++++
.../codegen/js/jx/MemberAccessEmitter.java | 148 +++++
.../codegen/js/jx/PackageFooterEmitter.java | 138 +++++
.../codegen/js/jx/PackageHeaderEmitter.java | 221 ++++++++
.../internal/codegen/js/utils/EmitterUtils.java | 26 +-
8 files changed, 718 insertions(+), 480 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 84d1ac5..26b1100 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -783,7 +783,7 @@ public class ASEmitter implements IASEmitter, IEmitter
// nothing to do in AS
}
- protected void emitMethodScope(IScopedNode node)
+ public void emitMethodScope(IScopedNode node)
{
write(ASEmitterTokens.SPACE);
getWalker().walk(node);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 955e033..7aa4e2a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -20,15 +20,12 @@
package org.apache.flex.compiler.internal.codegen.js.flexjs;
import java.io.FilterWriter;
-import java.util.ArrayList;
-import java.util.HashMap;
import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
import org.apache.flex.compiler.codegen.IDocEmitter;
import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
import org.apache.flex.compiler.common.ASModifier;
import org.apache.flex.compiler.common.IMetaInfo;
-import org.apache.flex.compiler.common.ModifiersSet;
import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.definitions.IFunctionDefinition;
@@ -36,7 +33,6 @@ import org.apache.flex.compiler.definitions.IPackageDefinition;
import org.apache.flex.compiler.definitions.ITypeDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter;
@@ -44,18 +40,13 @@ import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.MemberAccessEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.PackageFooterEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.PackageHeaderEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
-import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
-import org.apache.flex.compiler.internal.projects.FlexJSProject;
-import org.apache.flex.compiler.internal.scopes.ASProjectScope;
-import org.apache.flex.compiler.internal.scopes.PackageScope;
-import org.apache.flex.compiler.internal.tree.as.ClassNode;
import org.apache.flex.compiler.internal.tree.as.FunctionNode;
-import org.apache.flex.compiler.internal.tree.as.GetterNode;
import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
import org.apache.flex.compiler.internal.tree.as.SetterNode;
-import org.apache.flex.compiler.internal.tree.as.UnaryOperatorAtNode;
-import org.apache.flex.compiler.scopes.IASScope;
import org.apache.flex.compiler.tree.ASTNodeID;
import org.apache.flex.compiler.tree.as.IASNode;
import org.apache.flex.compiler.tree.as.IAccessorNode;
@@ -68,20 +59,14 @@ import org.apache.flex.compiler.tree.as.IFunctionCallNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
import org.apache.flex.compiler.tree.as.IGetterNode;
import org.apache.flex.compiler.tree.as.IIdentifierNode;
-import org.apache.flex.compiler.tree.as.IInterfaceNode;
-import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
import org.apache.flex.compiler.tree.as.ILiteralNode;
import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
import org.apache.flex.compiler.tree.as.IParameterNode;
import org.apache.flex.compiler.tree.as.ISetterNode;
-import org.apache.flex.compiler.tree.as.ITypeNode;
import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
import org.apache.flex.compiler.tree.as.IVariableExpressionNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
-import org.apache.flex.compiler.units.ICompilationUnit;
-import org.apache.flex.compiler.utils.ASNodeUtils;
-import org.apache.flex.compiler.utils.NativeUtils;
/**
* Concrete implementation of the 'goog' JavaScript production.
@@ -93,27 +78,45 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
{
private int foreachLoopCounter = 0;
-
+
+ private JSFlexJSDocEmitter docEmitter = null;
+
+ private PackageHeaderEmitter packageHeaderEmitter;
+ private PackageFooterEmitter packageFooterEmitter;
+
private ClassEmitter classEmitter;
private FieldEmitter fieldEmitter;
private FunctionCallEmitter functionCallEmitter;
private SuperCallEmitter superCallEmitter;
+ private MemberAccessEmitter memberAccessEmitter;
private BinaryOperatorEmitter binaryOperatorEmitter;
private IdentifierEmitter identifierEmitter;
-
+
public ClassEmitter getClassEmiter()
{
return classEmitter;
}
+ @Override
+ public IDocEmitter getDocEmitter()
+ {
+ if (docEmitter == null)
+ docEmitter = new JSFlexJSDocEmitter(this);
+ return docEmitter;
+ }
+
public JSFlexJSEmitter(FilterWriter out)
{
super(out);
+ packageHeaderEmitter = new PackageHeaderEmitter(this);
+ packageFooterEmitter = new PackageFooterEmitter(this);
+
classEmitter = new ClassEmitter(this);
fieldEmitter = new FieldEmitter(this);
functionCallEmitter = new FunctionCallEmitter(this);
superCallEmitter = new SuperCallEmitter(this);
+ memberAccessEmitter = new MemberAccessEmitter(this);
binaryOperatorEmitter = new BinaryOperatorEmitter(this);
identifierEmitter = new IdentifierEmitter(this);
}
@@ -237,9 +240,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
public void emitIdentifier(IIdentifierNode node)
{
// TODO (mschmalle) remove when project field is removed
- if (project == null)
- project = getWalker().getProject();
-
+ if (project == null)
+ project = getWalker().getProject();
+
identifierEmitter.emit(node);
}
@@ -329,178 +332,23 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
{
- if (ASNodeUtils.hasParenOpen(node))
- write(ASEmitterTokens.PAREN_OPEN);
-
- IASNode leftNode = node.getLeftOperandNode();
- IASNode rightNode = node.getRightOperandNode();
-
+ // TODO (mschmalle) remove when project field is removed
if (project == null)
project = getWalker().getProject();
- IDefinition def = node.resolve(project);
- boolean isStatic = false;
- if (def != null && def.isStatic())
- isStatic = true;
-
- boolean continueWalk = true;
- if (!isStatic)
- {
- if (!(leftNode instanceof ILanguageIdentifierNode && ((ILanguageIdentifierNode) leftNode)
- .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
- {
- IDefinition rightDef = null;
- if (rightNode instanceof IIdentifierNode)
- rightDef = ((IIdentifierNode) rightNode).resolve(project);
-
- if (rightNode instanceof UnaryOperatorAtNode)
- {
- // ToDo (erikdebruin): properly handle E4X
-
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.MEMBER_ACCESS);
- getWalker().walk(node.getLeftOperandNode());
- write(ASEmitterTokens.SQUARE_OPEN);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write("E4XOperator");
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.SQUARE_CLOSE);
- continueWalk = false;
- }
- else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
- {
- // ToDo (erikdebruin): properly handle E4X
-
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.MEMBER_ACCESS);
- getWalker().walk(node.getLeftOperandNode());
- write(ASEmitterTokens.SQUARE_OPEN);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write("E4XSelector");
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.SQUARE_CLOSE);
- continueWalk = false;
- }
- else if (leftNode.getNodeID() != ASTNodeID.SuperID)
- {
- getWalker().walk(node.getLeftOperandNode());
- write(node.getOperator().getOperatorText());
- }
- else if (leftNode.getNodeID() == ASTNodeID.SuperID
- && (rightNode.getNodeID() == ASTNodeID.GetterID || (rightDef != null && rightDef instanceof AccessorDefinition)))
- {
- // setter is handled in binaryOperator
- write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSFlexJSEmitterTokens.SUPERGETTER);
- write(ASEmitterTokens.PAREN_OPEN);
- IClassNode cnode = (IClassNode) node
- .getAncestorOfType(IClassNode.class);
- write(formatQualifiedName(cnode.getQualifiedName()));
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.THIS);
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SINGLE_QUOTE);
- if (rightDef != null)
- write(rightDef.getBaseName());
- else
- write(((GetterNode) rightNode).getName());
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- continueWalk = false;
- }
- }
- else
- {
- write(ASEmitterTokens.THIS);
- write(node.getOperator().getOperatorText());
- }
-
- }
-
- if (continueWalk)
- getWalker().walk(node.getRightOperandNode());
-
- if (ASNodeUtils.hasParenClose(node))
- write(ASEmitterTokens.PAREN_CLOSE);
+ memberAccessEmitter.emit(node);
}
@Override
public void emitGetAccessor(IGetterNode node)
{
- ModifiersSet modifierSet = node.getDefinition().getModifiers();
- boolean isStatic = (modifierSet != null && modifierSet
- .hasModifier(ASModifier.STATIC));
- HashMap<String, PropertyNodes> map = isStatic ? getModel()
- .getStaticPropertyMap() : getModel().getPropertyMap();
- String name = node.getName();
- PropertyNodes p = map.get(name);
- if (p == null)
- {
- p = new PropertyNodes();
- map.put(name, p);
- }
- p.getter = node;
- FunctionNode fn = (FunctionNode) node;
- fn.parseFunctionBody(getProblems());
+ classEmitter.getGetSetEmitter().emitGet(node);
}
@Override
public void emitSetAccessor(ISetterNode node)
{
- ModifiersSet modifierSet = node.getDefinition().getModifiers();
- boolean isStatic = (modifierSet != null && modifierSet
- .hasModifier(ASModifier.STATIC));
- HashMap<String, PropertyNodes> map = isStatic ? getModel()
- .getStaticPropertyMap() : getModel().getPropertyMap();
- String name = node.getName();
- PropertyNodes p = map.get(name);
- if (p == null)
- {
- p = new PropertyNodes();
- map.put(name, p);
- }
- p.setter = node;
- FunctionNode fn = (FunctionNode) node;
- fn.parseFunctionBody(getProblems());
-
- boolean isBindableSetter = false;
- if (node instanceof SetterNode)
- {
- IMetaInfo[] metaInfos = null;
- metaInfos = node.getMetaInfos();
- for (IMetaInfo metaInfo : metaInfos)
- {
- name = metaInfo.getTagName();
- if (name.equals("Bindable")
- && metaInfo.getAllAttributes().length == 0)
- {
- isBindableSetter = true;
- break;
- }
- }
- }
- if (isBindableSetter)
- {
- IFunctionDefinition definition = node.getDefinition();
- ITypeDefinition type = (ITypeDefinition) definition.getParent();
- getDoc().emitMethodDoc(fn, project);
- write(formatQualifiedName(type.getQualifiedName()));
- if (!node.hasModifier(ASModifier.STATIC))
- {
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.PROTOTYPE);
- }
-
- write(ASEmitterTokens.MEMBER_ACCESS);
- write("__bindingWrappedSetter__");
- writeToken(node.getName());
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.FUNCTION);
- emitParameters(node.getParameterNodes());
- //writeNewline();
- emitMethodScope(node.getScopedNode());
- }
+ classEmitter.getGetSetEmitter().emitSet(node);
}
@Override
@@ -631,260 +479,22 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
super.emitDefinePropertyFunction(node);
}
- private JSFlexJSDocEmitter docEmitter = null;
-
- @Override
- public IDocEmitter getDocEmitter()
- {
- if (docEmitter == null)
- docEmitter = new JSFlexJSDocEmitter(this);
- return docEmitter;
- }
-
@Override
public void emitPackageHeader(IPackageDefinition definition)
{
- IASScope containedScope = definition.getContainedScope();
- ITypeDefinition type = findType(containedScope.getAllLocalDefinitions());
- if (type == null)
- return;
-
- writeNewline("/**");
- writeNewline(" * " + type.getQualifiedName());
- writeNewline(" *");
- writeNewline(" * @fileoverview");
- writeNewline(" *");
- writeNewline(" * @suppress {checkTypes}");
- writeNewline(" */");
- writeNewline();
-
- /* goog.provide('x');\n\n */
- write(JSGoogEmitterTokens.GOOG_PROVIDE);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(formatQualifiedName(type.getQualifiedName()));
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- writeNewline(ASEmitterTokens.SEMICOLON);
- writeNewline();
+ packageHeaderEmitter.emit(definition);
}
@Override
public void emitPackageHeaderContents(IPackageDefinition definition)
{
- PackageScope containedScope = (PackageScope) definition
- .getContainedScope();
-
- ArrayList<String> writtenRequires = new ArrayList<String>();
-
- ITypeDefinition type = findType(containedScope.getAllLocalDefinitions());
- if (type == null)
- return;
-
- ITypeNode typeNode = type.getNode();
- if (typeNode instanceof ClassNode)
- {
- ClassNode classNode = (ClassNode) typeNode;
- if (classNode != null)
- {
- ASDocComment asDoc = (ASDocComment) classNode.getASDocComment();
- if (asDoc != null)
- {
- String asDocString = asDoc.commentNoEnd();
- String ignoreToken = JSFlexJSEmitterTokens.IGNORE_IMPORT
- .getToken();
- int ignoreIndex = asDocString.indexOf(ignoreToken);
- while (ignoreIndex != -1)
- {
- String ignorable = asDocString.substring(ignoreIndex
- + ignoreToken.length());
- int endIndex = ignorable.indexOf("\n");
- ignorable = ignorable.substring(0, endIndex);
- ignorable = ignorable.trim();
- // pretend we've already written the goog.requires for this
- writtenRequires.add(ignorable);
- ignoreIndex = asDocString.indexOf(ignoreToken,
- ignoreIndex + ignoreToken.length());
- }
- }
- }
- }
-
- if (project == null)
- project = getWalker().getProject();
-
- FlexJSProject flexProject = (FlexJSProject) project;
- ASProjectScope projectScope = (ASProjectScope) flexProject.getScope();
- ICompilationUnit cu = projectScope
- .getCompilationUnitForDefinition(type);
- ArrayList<String> requiresList = flexProject.getRequires(cu);
- ArrayList<String> interfacesList = flexProject.getInterfaces(cu);
-
- String cname = type.getQualifiedName();
- writtenRequires.add(cname); // make sure we don't add ourselves
-
- boolean emitsRequires = false;
- if (requiresList != null)
- {
- for (String imp : requiresList)
- {
- if (imp.indexOf(JSGoogEmitterTokens.AS3.getToken()) != -1)
- continue;
-
- if (imp.equals(cname))
- continue;
-
- if (NativeUtils.isNative(imp))
- continue;
-
- if (writtenRequires.indexOf(imp) == -1)
- {
-
- /* goog.require('x');\n */
- write(JSGoogEmitterTokens.GOOG_REQUIRE);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(formatQualifiedName(imp));
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- writeNewline(ASEmitterTokens.SEMICOLON);
-
- writtenRequires.add(imp);
-
- emitsRequires = true;
- }
- }
- }
-
- boolean emitsInterfaces = false;
- if (interfacesList != null)
- {
- for (String imp : interfacesList)
- {
- if (writtenRequires.indexOf(imp) == -1)
- {
- write(JSGoogEmitterTokens.GOOG_REQUIRE);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(formatQualifiedName(imp));
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- writeNewline(ASEmitterTokens.SEMICOLON);
-
- emitsInterfaces = true;
- }
- }
- }
-
- // erikdebruin: Add missing language feature support, with e.g. 'is' and
- // 'as' operators. We don't need to worry about requiring
- // this in every project: ADVANCED_OPTIMISATIONS will NOT
- // include any of the code if it is not used in the project.
- boolean isMainCU = flexProject.mainCU != null
- && cu.getName().equals(flexProject.mainCU.getName());
- if (isMainCU)
- {
- write(JSGoogEmitterTokens.GOOG_REQUIRE);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- writeNewline(ASEmitterTokens.SEMICOLON);
- }
-
- if (emitsRequires || emitsInterfaces || isMainCU)
- {
- writeNewline();
- }
-
- writeNewline();
- writeNewline();
+ packageHeaderEmitter.emitContents(definition);
}
@Override
public void emitPackageFooter(IPackageDefinition definition)
{
- IASScope containedScope = definition.getContainedScope();
- ITypeDefinition type = findType(containedScope.getAllLocalDefinitions());
- if (type == null)
- return;
-
- ITypeNode tnode = findTypeNode(definition.getNode());
- if (tnode != null)
- {
- /*
- * Metadata
- *
- * @type {Object.<string, Array.<Object>>}
- */
- writeNewline();
- writeNewline();
- writeNewline();
- getDoc().begin();
- writeNewline(" * Metadata");
- writeNewline(" *");
- writeNewline(" * @type {Object.<string, Array.<Object>>}");
- getDoc().end();
-
- // a.B.prototype.AFJS_CLASS_INFO = { };
- write(formatQualifiedName(type.getQualifiedName()));
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.PROTOTYPE);
- write(ASEmitterTokens.MEMBER_ACCESS);
- writeToken(JSFlexJSEmitterTokens.FLEXJS_CLASS_INFO);
- writeToken(ASEmitterTokens.EQUAL);
- writeToken(ASEmitterTokens.BLOCK_OPEN);
-
- // names: [{ name: '', qName: '' }]
- write(JSFlexJSEmitterTokens.NAMES);
- writeToken(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SQUARE_OPEN);
- writeToken(ASEmitterTokens.BLOCK_OPEN);
- write(JSFlexJSEmitterTokens.NAME);
- writeToken(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(tnode.getName());
- write(ASEmitterTokens.SINGLE_QUOTE);
- writeToken(ASEmitterTokens.COMMA);
- write(JSFlexJSEmitterTokens.QNAME);
- writeToken(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(formatQualifiedName(tnode.getQualifiedName()));
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.SQUARE_CLOSE);
-
- IExpressionNode[] enodes;
- if (tnode instanceof IClassNode)
- enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
- else
- enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
-
- if (enodes.length > 0)
- {
- writeToken(ASEmitterTokens.COMMA);
-
- // interfaces: [a.IC, a.ID]
- write(JSFlexJSEmitterTokens.INTERFACES);
- writeToken(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SQUARE_OPEN);
- int i = 0;
- for (IExpressionNode enode : enodes)
- {
- write(formatQualifiedName(enode.resolve(project)
- .getQualifiedName()));
- if (i < enodes.length - 1)
- writeToken(ASEmitterTokens.COMMA);
- i++;
- }
- write(ASEmitterTokens.SQUARE_CLOSE);
- }
-
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_CLOSE);
- writeNewline(ASEmitterTokens.SEMICOLON);
- }
+ packageFooterEmitter.emit(definition);
}
@Override
@@ -1075,61 +685,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
}
- /*
- @Override
- public void emitUnaryOperator(IUnaryOperatorNode node)
- {
- if (node.getNodeID() == ASTNodeID.Op_PreIncrID
- || node.getNodeID() == ASTNodeID.Op_PreDecrID
- || node.getNodeID() == ASTNodeID.Op_PostIncrID
- || node.getNodeID() == ASTNodeID.Op_PostDecrID)
- {
- IExpressionNode opNode = node.getOperandNode();
- String getString = stringifyNode(opNode);
- int index = getString.lastIndexOf("get_");
- if (index != -1)
- {
- write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
- write(ASEmitterTokens.MEMBER_ACCESS);
- if (node.getNodeID() == ASTNodeID.Op_PreIncrID)
- write(JSFlexJSEmitterTokens.PREINCREMENT);
- else if (node.getNodeID() == ASTNodeID.Op_PostIncrID)
- write(JSFlexJSEmitterTokens.POSTINCREMENT);
- else if (node.getNodeID() == ASTNodeID.Op_PreDecrID)
- write(JSFlexJSEmitterTokens.PREDECREMENT);
- else
- write(JSFlexJSEmitterTokens.POSTDECREMENT);
- write(ASEmitterTokens.PAREN_OPEN);
- String obj = getString.substring(0, index - 1);
- write(obj);
- write(ASEmitterTokens.COMMA);
- String prop = getString.substring(index + 4);
- int endIndex = prop.indexOf(ASEmitterTokens.PAREN_OPEN.getToken());
- prop = prop.substring(0, endIndex);
- write(ASEmitterTokens.DOUBLE_QUOTE);
- write(prop);
- write(ASEmitterTokens.DOUBLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- return;
- }
- else
- {
- IASNode parentNode = node.getParent();
- if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID &&
- ((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
- {
- // GCC wanted parens around foo++.toString(). As in (foo++).toString();
- write(ASEmitterTokens.PAREN_OPEN);
- super.emitUnaryOperator(node);
- write(ASEmitterTokens.PAREN_CLOSE);
- return;
- }
- }
-
- }
- super.emitUnaryOperator(node);
- }
- */
@Override
public String formatQualifiedName(String name)
@@ -1344,3 +899,59 @@ private void writeGetSetPrefix(boolean isGet)
write("_");
}
*/
+
+/*
+@Override
+public void emitUnaryOperator(IUnaryOperatorNode node)
+{
+ if (node.getNodeID() == ASTNodeID.Op_PreIncrID
+ || node.getNodeID() == ASTNodeID.Op_PreDecrID
+ || node.getNodeID() == ASTNodeID.Op_PostIncrID
+ || node.getNodeID() == ASTNodeID.Op_PostDecrID)
+ {
+ IExpressionNode opNode = node.getOperandNode();
+ String getString = stringifyNode(opNode);
+ int index = getString.lastIndexOf("get_");
+ if (index != -1)
+ {
+ write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ if (node.getNodeID() == ASTNodeID.Op_PreIncrID)
+ write(JSFlexJSEmitterTokens.PREINCREMENT);
+ else if (node.getNodeID() == ASTNodeID.Op_PostIncrID)
+ write(JSFlexJSEmitterTokens.POSTINCREMENT);
+ else if (node.getNodeID() == ASTNodeID.Op_PreDecrID)
+ write(JSFlexJSEmitterTokens.PREDECREMENT);
+ else
+ write(JSFlexJSEmitterTokens.POSTDECREMENT);
+ write(ASEmitterTokens.PAREN_OPEN);
+ String obj = getString.substring(0, index - 1);
+ write(obj);
+ write(ASEmitterTokens.COMMA);
+ String prop = getString.substring(index + 4);
+ int endIndex = prop.indexOf(ASEmitterTokens.PAREN_OPEN.getToken());
+ prop = prop.substring(0, endIndex);
+ write(ASEmitterTokens.DOUBLE_QUOTE);
+ write(prop);
+ write(ASEmitterTokens.DOUBLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ return;
+ }
+ else
+ {
+ IASNode parentNode = node.getParent();
+ if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID &&
+ ((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
+ {
+ // GCC wanted parens around foo++.toString(). As in (foo++).toString();
+ write(ASEmitterTokens.PAREN_OPEN);
+ super.emitUnaryOperator(node);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ return;
+ }
+ }
+
+ }
+ super.emitUnaryOperator(node);
+}
+*/
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
index 1800afa..33f6f26 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -57,6 +57,7 @@ public class ClassEmitter extends JSSubEmitter implements
super(emitter);
bindableEmitter = new BindableEmitter(emitter);
+ // TODO (mschnalle) this is wrong
getSetEmitter = new GetSetEmitter(emitter);
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
index c4db6fa..0f996ce 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
@@ -19,18 +19,29 @@
package org.apache.flex.compiler.internal.codegen.js.jx;
+import java.util.HashMap;
import java.util.Set;
import org.apache.flex.compiler.codegen.ISubEmitter;
import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.common.ASModifier;
+import org.apache.flex.compiler.common.IMetaInfo;
+import org.apache.flex.compiler.common.ModifiersSet;
import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
+import org.apache.flex.compiler.internal.tree.as.SetterNode;
+import org.apache.flex.compiler.tree.as.IGetterNode;
+import org.apache.flex.compiler.tree.as.ISetterNode;
public class GetSetEmitter extends JSSubEmitter implements
ISubEmitter<IClassDefinition>
@@ -192,4 +203,88 @@ public class GetSetEmitter extends JSSubEmitter implements
write(ASEmitterTokens.SEMICOLON);
}
}
+
+
+ public void emitGet(IGetterNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ ModifiersSet modifierSet = node.getDefinition().getModifiers();
+ boolean isStatic = (modifierSet != null && modifierSet
+ .hasModifier(ASModifier.STATIC));
+ HashMap<String, PropertyNodes> map = isStatic ? getModel()
+ .getStaticPropertyMap() : getModel().getPropertyMap();
+ String name = node.getName();
+ PropertyNodes p = map.get(name);
+ if (p == null)
+ {
+ p = new PropertyNodes();
+ map.put(name, p);
+ }
+ p.getter = node;
+ FunctionNode fn = (FunctionNode) node;
+ fn.parseFunctionBody(fjs.getProblems());
+ }
+
+ public void emitSet(ISetterNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+ JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) fjs.getDocEmitter();
+
+ ModifiersSet modifierSet = node.getDefinition().getModifiers();
+ boolean isStatic = (modifierSet != null && modifierSet
+ .hasModifier(ASModifier.STATIC));
+ HashMap<String, PropertyNodes> map = isStatic ? getModel()
+ .getStaticPropertyMap() : getModel().getPropertyMap();
+ String name = node.getName();
+ PropertyNodes p = map.get(name);
+ if (p == null)
+ {
+ p = new PropertyNodes();
+ map.put(name, p);
+ }
+ p.setter = node;
+ FunctionNode fn = (FunctionNode) node;
+ fn.parseFunctionBody(fjs.getProblems());
+
+ boolean isBindableSetter = false;
+ if (node instanceof SetterNode)
+ {
+ IMetaInfo[] metaInfos = null;
+ metaInfos = node.getMetaInfos();
+ for (IMetaInfo metaInfo : metaInfos)
+ {
+ name = metaInfo.getTagName();
+ if (name.equals("Bindable")
+ && metaInfo.getAllAttributes().length == 0)
+ {
+ isBindableSetter = true;
+ break;
+ }
+ }
+ }
+ if (isBindableSetter)
+ {
+ IFunctionDefinition definition = node.getDefinition();
+ ITypeDefinition type = (ITypeDefinition) definition.getParent();
+ doc.emitMethodDoc(fn, getProject());
+ write(fjs.formatQualifiedName(type.getQualifiedName()));
+ if (!node.hasModifier(ASModifier.STATIC))
+ {
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ }
+
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write("__bindingWrappedSetter__");
+ writeToken(node.getName());
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(node.getParameterNodes());
+ //writeNewline();
+ fjs.emitMethodScope(node.getScopedNode());
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
new file mode 100644
index 0000000..b582915
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -0,0 +1,148 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
+import org.apache.flex.compiler.internal.tree.as.GetterNode;
+import org.apache.flex.compiler.internal.tree.as.UnaryOperatorAtNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.tree.as.ILanguageIdentifierNode;
+import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
+import org.apache.flex.compiler.utils.ASNodeUtils;
+
+public class MemberAccessEmitter extends JSSubEmitter implements
+ ISubEmitter<IMemberAccessExpressionNode>
+{
+
+ public MemberAccessEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IMemberAccessExpressionNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ if (ASNodeUtils.hasParenOpen(node))
+ write(ASEmitterTokens.PAREN_OPEN);
+
+ IASNode leftNode = node.getLeftOperandNode();
+ IASNode rightNode = node.getRightOperandNode();
+
+ IDefinition def = node.resolve(getProject());
+ boolean isStatic = false;
+ if (def != null && def.isStatic())
+ isStatic = true;
+
+ boolean continueWalk = true;
+ if (!isStatic)
+ {
+ if (!(leftNode instanceof ILanguageIdentifierNode && ((ILanguageIdentifierNode) leftNode)
+ .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
+ {
+ IDefinition rightDef = null;
+ if (rightNode instanceof IIdentifierNode)
+ rightDef = ((IIdentifierNode) rightNode)
+ .resolve(getProject());
+
+ if (rightNode instanceof UnaryOperatorAtNode)
+ {
+ // ToDo (erikdebruin): properly handle E4X
+
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ getWalker().walk(node.getLeftOperandNode());
+ write(ASEmitterTokens.SQUARE_OPEN);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write("E4XOperator");
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.SQUARE_CLOSE);
+ continueWalk = false;
+ }
+ else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
+ {
+ // ToDo (erikdebruin): properly handle E4X
+
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ getWalker().walk(node.getLeftOperandNode());
+ write(ASEmitterTokens.SQUARE_OPEN);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write("E4XSelector");
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.SQUARE_CLOSE);
+ continueWalk = false;
+ }
+ else if (leftNode.getNodeID() != ASTNodeID.SuperID)
+ {
+ getWalker().walk(node.getLeftOperandNode());
+ write(node.getOperator().getOperatorText());
+ }
+ else if (leftNode.getNodeID() == ASTNodeID.SuperID
+ && (rightNode.getNodeID() == ASTNodeID.GetterID || (rightDef != null && rightDef instanceof AccessorDefinition)))
+ {
+ // setter is handled in binaryOperator
+ write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSFlexJSEmitterTokens.SUPERGETTER);
+ write(ASEmitterTokens.PAREN_OPEN);
+ IClassNode cnode = (IClassNode) node
+ .getAncestorOfType(IClassNode.class);
+ write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.THIS);
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ if (rightDef != null)
+ write(rightDef.getBaseName());
+ else
+ write(((GetterNode) rightNode).getName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ continueWalk = false;
+ }
+ }
+ else
+ {
+ write(ASEmitterTokens.THIS);
+ write(node.getOperator().getOperatorText());
+ }
+ }
+
+ if (continueWalk)
+ getWalker().walk(node.getRightOperandNode());
+
+ if (ASNodeUtils.hasParenClose(node))
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
new file mode 100644
index 0000000..86ac18d
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.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.internal.codegen.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IPackageDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.scopes.IASScope;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IInterfaceNode;
+import org.apache.flex.compiler.tree.as.ITypeNode;
+
+public class PackageFooterEmitter extends JSSubEmitter implements
+ ISubEmitter<IPackageDefinition>
+{
+
+ public PackageFooterEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IPackageDefinition definition)
+ {
+ IASScope containedScope = definition.getContainedScope();
+ ITypeDefinition type = EmitterUtils.findType(containedScope
+ .getAllLocalDefinitions());
+ if (type == null)
+ return;
+
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+ JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) fjs.getDocEmitter();
+
+ ITypeNode tnode = EmitterUtils.findTypeNode(definition.getNode());
+ if (tnode != null)
+ {
+ /*
+ * Metadata
+ *
+ * @type {Object.<string, Array.<Object>>}
+ */
+ writeNewline();
+ writeNewline();
+ writeNewline();
+ doc.begin();
+ writeNewline(" * Metadata");
+ writeNewline(" *");
+ writeNewline(" * @type {Object.<string, Array.<Object>>}");
+ doc.end();
+
+ // a.B.prototype.AFJS_CLASS_INFO = { };
+ write(fjs.formatQualifiedName(type.getQualifiedName()));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ writeToken(JSFlexJSEmitterTokens.FLEXJS_CLASS_INFO);
+ writeToken(ASEmitterTokens.EQUAL);
+ writeToken(ASEmitterTokens.BLOCK_OPEN);
+
+ // names: [{ name: '', qName: '' }]
+ write(JSFlexJSEmitterTokens.NAMES);
+ writeToken(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SQUARE_OPEN);
+ writeToken(ASEmitterTokens.BLOCK_OPEN);
+ write(JSFlexJSEmitterTokens.NAME);
+ writeToken(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(tnode.getName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ writeToken(ASEmitterTokens.COMMA);
+ write(JSFlexJSEmitterTokens.QNAME);
+ writeToken(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(fjs.formatQualifiedName(tnode.getQualifiedName()));
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SQUARE_CLOSE);
+
+ IExpressionNode[] enodes;
+ if (tnode instanceof IClassNode)
+ enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
+ else
+ enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
+
+ if (enodes.length > 0)
+ {
+ writeToken(ASEmitterTokens.COMMA);
+
+ // interfaces: [a.IC, a.ID]
+ write(JSFlexJSEmitterTokens.INTERFACES);
+ writeToken(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SQUARE_OPEN);
+ int i = 0;
+ for (IExpressionNode enode : enodes)
+ {
+ write(fjs.formatQualifiedName(enode.resolve(getProject())
+ .getQualifiedName()));
+ if (i < enodes.length - 1)
+ writeToken(ASEmitterTokens.COMMA);
+ i++;
+ }
+ write(ASEmitterTokens.SQUARE_CLOSE);
+ }
+
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
new file mode 100644
index 0000000..cd82cf2
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
@@ -0,0 +1,221 @@
+/*
+ *
+ * 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.js.jx;
+
+import java.util.ArrayList;
+
+import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IPackageDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.internal.projects.FlexJSProject;
+import org.apache.flex.compiler.internal.scopes.ASProjectScope;
+import org.apache.flex.compiler.internal.scopes.PackageScope;
+import org.apache.flex.compiler.internal.tree.as.ClassNode;
+import org.apache.flex.compiler.scopes.IASScope;
+import org.apache.flex.compiler.tree.as.ITypeNode;
+import org.apache.flex.compiler.units.ICompilationUnit;
+import org.apache.flex.compiler.utils.NativeUtils;
+
+public class PackageHeaderEmitter extends JSSubEmitter implements
+ ISubEmitter<IPackageDefinition>
+{
+
+ public PackageHeaderEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IPackageDefinition definition)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ IASScope containedScope = definition.getContainedScope();
+ ITypeDefinition type = EmitterUtils.findType(containedScope
+ .getAllLocalDefinitions());
+ if (type == null)
+ return;
+
+ writeNewline("/**");
+ writeNewline(" * " + type.getQualifiedName());
+ writeNewline(" *");
+ writeNewline(" * @fileoverview");
+ writeNewline(" *");
+ writeNewline(" * @suppress {checkTypes}");
+ writeNewline(" */");
+ writeNewline();
+
+ /* goog.provide('x');\n\n */
+ write(JSGoogEmitterTokens.GOOG_PROVIDE);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(fjs.formatQualifiedName(type.getQualifiedName()));
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ writeNewline();
+ }
+
+ public void emitContents(IPackageDefinition definition)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ PackageScope containedScope = (PackageScope) definition
+ .getContainedScope();
+
+ ArrayList<String> writtenRequires = new ArrayList<String>();
+
+ ITypeDefinition type = EmitterUtils.findType(containedScope
+ .getAllLocalDefinitions());
+ if (type == null)
+ return;
+
+ ITypeNode typeNode = type.getNode();
+ if (typeNode instanceof ClassNode)
+ {
+ ClassNode classNode = (ClassNode) typeNode;
+ if (classNode != null)
+ {
+ ASDocComment asDoc = (ASDocComment) classNode.getASDocComment();
+ if (asDoc != null)
+ {
+ String asDocString = asDoc.commentNoEnd();
+ String ignoreToken = JSFlexJSEmitterTokens.IGNORE_IMPORT
+ .getToken();
+ int ignoreIndex = asDocString.indexOf(ignoreToken);
+ while (ignoreIndex != -1)
+ {
+ String ignorable = asDocString.substring(ignoreIndex
+ + ignoreToken.length());
+ int endIndex = ignorable.indexOf("\n");
+ ignorable = ignorable.substring(0, endIndex);
+ ignorable = ignorable.trim();
+ // pretend we've already written the goog.requires for this
+ writtenRequires.add(ignorable);
+ ignoreIndex = asDocString.indexOf(ignoreToken,
+ ignoreIndex + ignoreToken.length());
+ }
+ }
+ }
+ }
+
+ // if (project == null)
+ // project = getWalker().getProject();
+
+ FlexJSProject flexProject = (FlexJSProject) getProject();
+ ASProjectScope projectScope = (ASProjectScope) flexProject.getScope();
+ ICompilationUnit cu = projectScope
+ .getCompilationUnitForDefinition(type);
+ ArrayList<String> requiresList = flexProject.getRequires(cu);
+ ArrayList<String> interfacesList = flexProject.getInterfaces(cu);
+
+ String cname = type.getQualifiedName();
+ writtenRequires.add(cname); // make sure we don't add ourselves
+
+ boolean emitsRequires = false;
+ if (requiresList != null)
+ {
+ for (String imp : requiresList)
+ {
+ if (imp.indexOf(JSGoogEmitterTokens.AS3.getToken()) != -1)
+ continue;
+
+ if (imp.equals(cname))
+ continue;
+
+ if (NativeUtils.isNative(imp))
+ continue;
+
+ if (writtenRequires.indexOf(imp) == -1)
+ {
+
+ /* goog.require('x');\n */
+ write(JSGoogEmitterTokens.GOOG_REQUIRE);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(fjs.formatQualifiedName(imp));
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+
+ writtenRequires.add(imp);
+
+ emitsRequires = true;
+ }
+ }
+ }
+
+ boolean emitsInterfaces = false;
+ if (interfacesList != null)
+ {
+ for (String imp : interfacesList)
+ {
+ if (writtenRequires.indexOf(imp) == -1)
+ {
+ write(JSGoogEmitterTokens.GOOG_REQUIRE);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(fjs.formatQualifiedName(imp));
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+
+ emitsInterfaces = true;
+ }
+ }
+ }
+
+ // erikdebruin: Add missing language feature support, with e.g. 'is' and
+ // 'as' operators. We don't need to worry about requiring
+ // this in every project: ADVANCED_OPTIMISATIONS will NOT
+ // include any of the code if it is not used in the project.
+ boolean isMainCU = flexProject.mainCU != null
+ && cu.getName().equals(flexProject.mainCU.getName());
+ if (isMainCU)
+ {
+ write(JSGoogEmitterTokens.GOOG_REQUIRE);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ }
+
+ if (emitsRequires || emitsInterfaces || isMainCU)
+ {
+ writeNewline();
+ }
+
+ writeNewline();
+ writeNewline();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cea0796c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 69acf2d..07da145 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -30,9 +30,9 @@ import org.apache.flex.compiler.constants.IASLanguageConstants;
import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
import org.apache.flex.compiler.definitions.INamespaceDefinition;
import org.apache.flex.compiler.definitions.ITypeDefinition;
-import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
import org.apache.flex.compiler.internal.definitions.ClassDefinition;
@@ -49,13 +49,37 @@ import org.apache.flex.compiler.tree.as.IClassNode;
import org.apache.flex.compiler.tree.as.IDefinitionNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.tree.as.IPackageNode;
import org.apache.flex.compiler.tree.as.IScopedNode;
+import org.apache.flex.compiler.tree.as.ITypeNode;
/**
* Various static methods used in shared emitter logic.
*/
public class EmitterUtils
{
+ public static ITypeNode findTypeNode(IPackageNode node)
+ {
+ IScopedNode scope = node.getScopedNode();
+ for (int i = 0; i < scope.getChildCount(); i++)
+ {
+ IASNode child = scope.getChild(i);
+ if (child instanceof ITypeNode)
+ return (ITypeNode) child;
+ }
+ return null;
+ }
+
+ public static ITypeDefinition findType(Collection<IDefinition> definitions)
+ {
+ for (IDefinition definition : definitions)
+ {
+ if (definition instanceof ITypeDefinition)
+ return (ITypeDefinition) definition;
+ }
+ return null;
+ }
+
public static boolean isSameClass(IDefinition pdef, IDefinition thisClass,
ICompilerProject project)
{
[16/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
as and is to emitter. - Fixed the call placements/name of the
AccessorEmitter.
Posted by ah...@apache.org.
- Refactored as and is to emitter.
- Fixed the call placements/name of the AccessorEmitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/13a2313b
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/13a2313b
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/13a2313b
Branch: refs/heads/develop
Commit: 13a2313befc8b2651705df845da22e770c1b553b
Parents: ad488d8
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 12:32:26 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:30 2015 +0100
----------------------------------------------------------------------
.../codegen/js/flexjs/JSFlexJSEmitter.java | 101 ++-----
.../internal/codegen/js/jx/AccessorEmitter.java | 303 +++++++++++++++++++
.../internal/codegen/js/jx/AsIsEmitter.java | 118 ++++++++
.../internal/codegen/js/jx/ClassEmitter.java | 23 +-
.../internal/codegen/js/jx/GetSetEmitter.java | 290 ------------------
.../codegen/mxml/flexjs/MXMLFlexJSEmitter.java | 12 +-
6 files changed, 456 insertions(+), 391 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index f86ca5a..2460d3f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -21,12 +21,10 @@ package org.apache.flex.compiler.internal.codegen.js.flexjs;
import java.io.FilterWriter;
-import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
import org.apache.flex.compiler.codegen.IDocEmitter;
import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
import org.apache.flex.compiler.common.ASModifier;
import org.apache.flex.compiler.common.IMetaInfo;
-import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.definitions.IFunctionDefinition;
import org.apache.flex.compiler.definitions.IPackageDefinition;
import org.apache.flex.compiler.definitions.ITypeDefinition;
@@ -34,7 +32,10 @@ import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.jx.AccessorEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.AsIsEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.BindableEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.ForEachEmitter;
@@ -81,20 +82,34 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
private PackageHeaderEmitter packageHeaderEmitter;
private PackageFooterEmitter packageFooterEmitter;
+ private BindableEmitter bindableEmitter;
+
private ClassEmitter classEmitter;
private FieldEmitter fieldEmitter;
+ private AccessorEmitter accessorEmitter;
private FunctionCallEmitter functionCallEmitter;
private SuperCallEmitter superCallEmitter;
private ForEachEmitter forEachEmitter;
private MemberAccessEmitter memberAccessEmitter;
+ private AsIsEmitter asIsEmitter;
private BinaryOperatorEmitter binaryOperatorEmitter;
private IdentifierEmitter identifierEmitter;
+ public BindableEmitter getBindableEmitter()
+ {
+ return bindableEmitter;
+ }
+
public ClassEmitter getClassEmiter()
{
return classEmitter;
}
+ public AccessorEmitter getAccessorEmitter()
+ {
+ return accessorEmitter;
+ }
+
@Override
public IDocEmitter getDocEmitter()
{
@@ -110,12 +125,16 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
packageHeaderEmitter = new PackageHeaderEmitter(this);
packageFooterEmitter = new PackageFooterEmitter(this);
+ bindableEmitter = new BindableEmitter(this);
+
classEmitter = new ClassEmitter(this);
fieldEmitter = new FieldEmitter(this);
+ accessorEmitter = new AccessorEmitter(this);
functionCallEmitter = new FunctionCallEmitter(this);
superCallEmitter = new SuperCallEmitter(this);
forEachEmitter = new ForEachEmitter(this);
memberAccessEmitter = new MemberAccessEmitter(this);
+ asIsEmitter = new AsIsEmitter(this);
binaryOperatorEmitter = new BinaryOperatorEmitter(this);
identifierEmitter = new IdentifierEmitter(this);
}
@@ -156,14 +175,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitAccessors(IAccessorNode node)
{
- if (node.getNodeID() == ASTNodeID.GetterID)
- {
- emitGetAccessor((IGetterNode) node);
- }
- else if (node.getNodeID() == ASTNodeID.SetterID)
- {
- emitSetAccessor((ISetterNode) node);
- }
+ accessorEmitter.emit(node);
}
@Override
@@ -210,70 +222,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
public void emitIsAs(IExpressionNode left, IExpressionNode right,
ASTNodeID id, boolean coercion)
{
- // project is null in unit tests
- IDefinition dnode = project != null ? (right).resolve(project) : null;
- if (id != ASTNodeID.Op_IsID && dnode != null)
- {
- // find the function node
- IFunctionNode functionNode = (IFunctionNode) left
- .getAncestorOfType(IFunctionNode.class);
- if (functionNode != null) // can be null in synthesized binding code
- {
- ASDocComment asDoc = (ASDocComment) functionNode
- .getASDocComment();
- if (asDoc != null)
- {
- String asDocString = asDoc.commentNoEnd();
- String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION
- .getToken();
- boolean ignore = false;
- int ignoreIndex = asDocString.indexOf(ignoreToken);
- while (ignoreIndex != -1)
- {
- String ignorable = asDocString.substring(ignoreIndex
- + ignoreToken.length());
- int endIndex = ignorable.indexOf("\n");
- ignorable = ignorable.substring(0, endIndex);
- ignorable = ignorable.trim();
- String rightSide = dnode.getQualifiedName();
- if (ignorable.equals(rightSide))
- {
- ignore = true;
- break;
- }
- ignoreIndex = asDocString.indexOf(ignoreToken,
- ignoreIndex + ignoreToken.length());
- }
- if (ignore)
- {
- getWalker().walk(left);
- return;
- }
- }
- }
- }
- write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
- write(ASEmitterTokens.MEMBER_ACCESS);
- if (id == ASTNodeID.Op_IsID)
- write(ASEmitterTokens.IS);
- else
- write(ASEmitterTokens.AS);
- write(ASEmitterTokens.PAREN_OPEN);
- getWalker().walk(left);
- writeToken(ASEmitterTokens.COMMA);
-
- if (dnode != null)
- write(formatQualifiedName(dnode.getQualifiedName()));
- else
- getWalker().walk(right);
-
- if (coercion)
- {
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.TRUE);
- }
-
- write(ASEmitterTokens.PAREN_CLOSE);
+ asIsEmitter.emitIsAs(left, right, id, coercion);
}
@Override
@@ -289,13 +238,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitGetAccessor(IGetterNode node)
{
- classEmitter.getGetSetEmitter().emitGet(node);
+ accessorEmitter.emitGet(node);
}
@Override
public void emitSetAccessor(ISetterNode node)
{
- classEmitter.getGetSetEmitter().emitSet(node);
+ accessorEmitter.emitSet(node);
}
@Override
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
new file mode 100644
index 0000000..0d0bd66
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
@@ -0,0 +1,303 @@
+/*
+ *
+ * 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.js.jx;
+
+import java.util.HashMap;
+import java.util.Set;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.common.ASModifier;
+import org.apache.flex.compiler.common.IMetaInfo;
+import org.apache.flex.compiler.common.ModifiersSet;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
+import org.apache.flex.compiler.internal.tree.as.SetterNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
+import org.apache.flex.compiler.tree.as.IGetterNode;
+import org.apache.flex.compiler.tree.as.ISetterNode;
+
+public class AccessorEmitter extends JSSubEmitter implements
+ ISubEmitter<IAccessorNode>
+{
+
+ public AccessorEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IAccessorNode node)
+ {
+ if (node.getNodeID() == ASTNodeID.GetterID)
+ {
+ emitGet((IGetterNode) node);
+ }
+ else if (node.getNodeID() == ASTNodeID.SetterID)
+ {
+ emitSet((ISetterNode) node);
+ }
+ }
+
+ public void emit(IClassDefinition definition)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ if (!getModel().getPropertyMap().isEmpty())
+ {
+ writeNewline();
+ writeNewline();
+ writeNewline();
+ write(JSGoogEmitterTokens.OBJECT);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.DEFINE_PROPERTIES);
+ write(ASEmitterTokens.PAREN_OPEN);
+ String qname = definition.getQualifiedName();
+ write(fjs.formatQualifiedName(qname));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ write(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SPACE);
+ write("/** @lends {" + fjs.formatQualifiedName(qname)
+ + ".prototype} */ ");
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+ Set<String> propertyNames = getModel().getPropertyMap().keySet();
+ boolean firstTime = true;
+ for (String propName : propertyNames)
+ {
+ if (firstTime)
+ firstTime = false;
+ else
+ writeNewline(ASEmitterTokens.COMMA);
+
+ PropertyNodes p = getModel().getPropertyMap().get(propName);
+ writeNewline("/** @expose */");
+ write(propName);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+ if (p.getter != null)
+ {
+ write(ASEmitterTokens.GET);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ write(JSDocEmitterTokens.JSDOC_OPEN);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.ATSIGN);
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ write(fjs.formatQualifiedName(qname));
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(JSDocEmitterTokens.JSDOC_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(p.getter.getParameterNodes());
+
+ fjs.emitDefinePropertyFunction(p.getter);
+ }
+ if (p.setter != null)
+ {
+ if (p.getter != null)
+ writeNewline(ASEmitterTokens.COMMA);
+
+ write(ASEmitterTokens.SET);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ write(JSDocEmitterTokens.JSDOC_OPEN);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.ATSIGN);
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ write(fjs.formatQualifiedName(qname));
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(JSDocEmitterTokens.JSDOC_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(p.setter.getParameterNodes());
+
+ fjs.emitDefinePropertyFunction(p.setter);
+ }
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ }
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ if (!getModel().getStaticPropertyMap().isEmpty())
+ {
+ write(JSGoogEmitterTokens.OBJECT);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.DEFINE_PROPERTIES);
+ write(ASEmitterTokens.PAREN_OPEN);
+ String qname = definition.getQualifiedName();
+ write(fjs.formatQualifiedName(qname));
+ write(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SPACE);
+ write("/** @lends {" + fjs.formatQualifiedName(qname) + "} */ ");
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+ Set<String> propertyNames = getModel().getStaticPropertyMap()
+ .keySet();
+ boolean firstTime = true;
+ for (String propName : propertyNames)
+ {
+ if (firstTime)
+ firstTime = false;
+ else
+ writeNewline(ASEmitterTokens.COMMA);
+
+ PropertyNodes p = getModel().getStaticPropertyMap().get(
+ propName);
+ writeNewline("/** @expose */");
+ write(propName);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+ if (p.getter != null)
+ {
+ write(ASEmitterTokens.GET);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(p.getter.getParameterNodes());
+
+ fjs.emitDefinePropertyFunction(p.getter);
+ }
+ if (p.setter != null)
+ {
+ if (p.getter != null)
+ writeNewline(ASEmitterTokens.COMMA);
+
+ write(ASEmitterTokens.SET);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(p.setter.getParameterNodes());
+
+ fjs.emitDefinePropertyFunction(p.setter);
+ }
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ }
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ }
+
+ public void emitGet(IGetterNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ ModifiersSet modifierSet = node.getDefinition().getModifiers();
+ boolean isStatic = (modifierSet != null && modifierSet
+ .hasModifier(ASModifier.STATIC));
+ HashMap<String, PropertyNodes> map = isStatic ? getModel()
+ .getStaticPropertyMap() : getModel().getPropertyMap();
+ String name = node.getName();
+ PropertyNodes p = map.get(name);
+ if (p == null)
+ {
+ p = new PropertyNodes();
+ map.put(name, p);
+ }
+ p.getter = node;
+ FunctionNode fn = (FunctionNode) node;
+ fn.parseFunctionBody(fjs.getProblems());
+ }
+
+ public void emitSet(ISetterNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+ JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) fjs.getDocEmitter();
+
+ ModifiersSet modifierSet = node.getDefinition().getModifiers();
+ boolean isStatic = (modifierSet != null && modifierSet
+ .hasModifier(ASModifier.STATIC));
+ HashMap<String, PropertyNodes> map = isStatic ? getModel()
+ .getStaticPropertyMap() : getModel().getPropertyMap();
+ String name = node.getName();
+ PropertyNodes p = map.get(name);
+ if (p == null)
+ {
+ p = new PropertyNodes();
+ map.put(name, p);
+ }
+ p.setter = node;
+ FunctionNode fn = (FunctionNode) node;
+ fn.parseFunctionBody(fjs.getProblems());
+
+ boolean isBindableSetter = false;
+ if (node instanceof SetterNode)
+ {
+ IMetaInfo[] metaInfos = null;
+ metaInfos = node.getMetaInfos();
+ for (IMetaInfo metaInfo : metaInfos)
+ {
+ name = metaInfo.getTagName();
+ if (name.equals("Bindable")
+ && metaInfo.getAllAttributes().length == 0)
+ {
+ isBindableSetter = true;
+ break;
+ }
+ }
+ }
+ if (isBindableSetter)
+ {
+ IFunctionDefinition definition = node.getDefinition();
+ ITypeDefinition type = (ITypeDefinition) definition.getParent();
+ doc.emitMethodDoc(fn, getProject());
+ write(fjs.formatQualifiedName(type.getQualifiedName()));
+ if (!node.hasModifier(ASModifier.STATIC))
+ {
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ }
+
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write("__bindingWrappedSetter__");
+ writeToken(node.getName());
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(node.getParameterNodes());
+ //writeNewline();
+ fjs.emitMethodScope(node.getScopedNode());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
new file mode 100644
index 0000000..5d243c7
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
@@ -0,0 +1,118 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+
+public class AsIsEmitter extends JSSubEmitter
+{
+
+ public AsIsEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ public void emitIsAs(IExpressionNode left, IExpressionNode right,
+ ASTNodeID id, boolean coercion)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ // project is null in unit tests
+ //IDefinition dnode = project != null ? (right).resolve(project) : null;
+ IDefinition dnode = getProject() != null ? (right)
+ .resolve(getProject()) : null;
+ if (id != ASTNodeID.Op_IsID && dnode != null)
+ {
+ // find the function node
+ IFunctionNode functionNode = (IFunctionNode) left
+ .getAncestorOfType(IFunctionNode.class);
+ if (functionNode != null) // can be null in synthesized binding code
+ {
+ ASDocComment asDoc = (ASDocComment) functionNode
+ .getASDocComment();
+ if (asDoc != null)
+ {
+ String asDocString = asDoc.commentNoEnd();
+ String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION
+ .getToken();
+ boolean ignore = false;
+ int ignoreIndex = asDocString.indexOf(ignoreToken);
+ while (ignoreIndex != -1)
+ {
+ String ignorable = asDocString.substring(ignoreIndex
+ + ignoreToken.length());
+ int endIndex = ignorable.indexOf("\n");
+ ignorable = ignorable.substring(0, endIndex);
+ ignorable = ignorable.trim();
+ String rightSide = dnode.getQualifiedName();
+ if (ignorable.equals(rightSide))
+ {
+ ignore = true;
+ break;
+ }
+ ignoreIndex = asDocString.indexOf(ignoreToken,
+ ignoreIndex + ignoreToken.length());
+ }
+ if (ignore)
+ {
+ getWalker().walk(left);
+ return;
+ }
+ }
+ }
+ }
+
+ write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+
+ if (id == ASTNodeID.Op_IsID)
+ write(ASEmitterTokens.IS);
+ else
+ write(ASEmitterTokens.AS);
+
+ write(ASEmitterTokens.PAREN_OPEN);
+ getWalker().walk(left);
+ writeToken(ASEmitterTokens.COMMA);
+
+ if (dnode != null)
+ write(fjs.formatQualifiedName(dnode.getQualifiedName()));
+ else
+ getWalker().walk(right);
+
+ if (coercion)
+ {
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.TRUE);
+ }
+
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
index 33f6f26..516bd98 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -39,26 +39,10 @@ import org.apache.flex.compiler.tree.as.IVariableNode;
public class ClassEmitter extends JSSubEmitter implements
ISubEmitter<IClassNode>
{
- private BindableEmitter bindableEmitter;
- private GetSetEmitter getSetEmitter;
-
- public BindableEmitter getBindableEmitter()
- {
- return bindableEmitter;
- }
-
- public GetSetEmitter getGetSetEmitter()
- {
- return getSetEmitter;
- }
-
+
public ClassEmitter(IJSEmitter emitter)
{
super(emitter);
-
- bindableEmitter = new BindableEmitter(emitter);
- // TODO (mschnalle) this is wrong
- getSetEmitter = new GetSetEmitter(emitter);
}
@Override
@@ -150,8 +134,7 @@ public class ClassEmitter extends JSSubEmitter implements
}
}
- bindableEmitter.emit(definition);
-
- getSetEmitter.emit(definition);
+ fjs.getBindableEmitter().emit(definition);
+ fjs.getAccessorEmitter().emit(definition);
}
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
deleted file mode 100644
index 0f996ce..0000000
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- *
- * 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.js.jx;
-
-import java.util.HashMap;
-import java.util.Set;
-
-import org.apache.flex.compiler.codegen.ISubEmitter;
-import org.apache.flex.compiler.codegen.js.IJSEmitter;
-import org.apache.flex.compiler.common.ASModifier;
-import org.apache.flex.compiler.common.IMetaInfo;
-import org.apache.flex.compiler.common.ModifiersSet;
-import org.apache.flex.compiler.definitions.IClassDefinition;
-import org.apache.flex.compiler.definitions.IFunctionDefinition;
-import org.apache.flex.compiler.definitions.ITypeDefinition;
-import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
-import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
-import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
-import org.apache.flex.compiler.internal.tree.as.FunctionNode;
-import org.apache.flex.compiler.internal.tree.as.SetterNode;
-import org.apache.flex.compiler.tree.as.IGetterNode;
-import org.apache.flex.compiler.tree.as.ISetterNode;
-
-public class GetSetEmitter extends JSSubEmitter implements
- ISubEmitter<IClassDefinition>
-{
-
- public GetSetEmitter(IJSEmitter emitter)
- {
- super(emitter);
- }
-
- @Override
- public void emit(IClassDefinition definition)
- {
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
- if (!getModel().getPropertyMap().isEmpty())
- {
- writeNewline();
- writeNewline();
- writeNewline();
- write(JSGoogEmitterTokens.OBJECT);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.DEFINE_PROPERTIES);
- write(ASEmitterTokens.PAREN_OPEN);
- String qname = definition.getQualifiedName();
- write(fjs.formatQualifiedName(qname));
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.PROTOTYPE);
- write(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SPACE);
- write("/** @lends {" + fjs.formatQualifiedName(qname)
- + ".prototype} */ ");
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
- Set<String> propertyNames = getModel().getPropertyMap().keySet();
- boolean firstTime = true;
- for (String propName : propertyNames)
- {
- if (firstTime)
- firstTime = false;
- else
- writeNewline(ASEmitterTokens.COMMA);
-
- PropertyNodes p = getModel().getPropertyMap().get(propName);
- writeNewline("/** @expose */");
- write(propName);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
- if (p.getter != null)
- {
- write(ASEmitterTokens.GET);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- write(JSDocEmitterTokens.JSDOC_OPEN);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.ATSIGN);
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- write(fjs.formatQualifiedName(qname));
- write(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(JSDocEmitterTokens.JSDOC_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.FUNCTION);
- fjs.emitParameters(p.getter.getParameterNodes());
-
- fjs.emitDefinePropertyFunction(p.getter);
- }
- if (p.setter != null)
- {
- if (p.getter != null)
- writeNewline(ASEmitterTokens.COMMA);
-
- write(ASEmitterTokens.SET);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- write(JSDocEmitterTokens.JSDOC_OPEN);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.ATSIGN);
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- write(fjs.formatQualifiedName(qname));
- write(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(JSDocEmitterTokens.JSDOC_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.FUNCTION);
- fjs.emitParameters(p.setter.getParameterNodes());
-
- fjs.emitDefinePropertyFunction(p.setter);
- }
- write(ASEmitterTokens.BLOCK_CLOSE);
- }
- writeNewline(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- }
- if (!getModel().getStaticPropertyMap().isEmpty())
- {
- write(JSGoogEmitterTokens.OBJECT);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.DEFINE_PROPERTIES);
- write(ASEmitterTokens.PAREN_OPEN);
- String qname = definition.getQualifiedName();
- write(fjs.formatQualifiedName(qname));
- write(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SPACE);
- write("/** @lends {" + fjs.formatQualifiedName(qname) + "} */ ");
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
- Set<String> propertyNames = getModel().getStaticPropertyMap()
- .keySet();
- boolean firstTime = true;
- for (String propName : propertyNames)
- {
- if (firstTime)
- firstTime = false;
- else
- writeNewline(ASEmitterTokens.COMMA);
-
- PropertyNodes p = getModel().getStaticPropertyMap().get(
- propName);
- writeNewline("/** @expose */");
- write(propName);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
- if (p.getter != null)
- {
- write(ASEmitterTokens.GET);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.FUNCTION);
- fjs.emitParameters(p.getter.getParameterNodes());
-
- fjs.emitDefinePropertyFunction(p.getter);
- }
- if (p.setter != null)
- {
- if (p.getter != null)
- writeNewline(ASEmitterTokens.COMMA);
-
- write(ASEmitterTokens.SET);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.FUNCTION);
- fjs.emitParameters(p.setter.getParameterNodes());
-
- fjs.emitDefinePropertyFunction(p.setter);
- }
- write(ASEmitterTokens.BLOCK_CLOSE);
- }
- writeNewline(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- }
- }
-
-
- public void emitGet(IGetterNode node)
- {
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
- ModifiersSet modifierSet = node.getDefinition().getModifiers();
- boolean isStatic = (modifierSet != null && modifierSet
- .hasModifier(ASModifier.STATIC));
- HashMap<String, PropertyNodes> map = isStatic ? getModel()
- .getStaticPropertyMap() : getModel().getPropertyMap();
- String name = node.getName();
- PropertyNodes p = map.get(name);
- if (p == null)
- {
- p = new PropertyNodes();
- map.put(name, p);
- }
- p.getter = node;
- FunctionNode fn = (FunctionNode) node;
- fn.parseFunctionBody(fjs.getProblems());
- }
-
- public void emitSet(ISetterNode node)
- {
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
- JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) fjs.getDocEmitter();
-
- ModifiersSet modifierSet = node.getDefinition().getModifiers();
- boolean isStatic = (modifierSet != null && modifierSet
- .hasModifier(ASModifier.STATIC));
- HashMap<String, PropertyNodes> map = isStatic ? getModel()
- .getStaticPropertyMap() : getModel().getPropertyMap();
- String name = node.getName();
- PropertyNodes p = map.get(name);
- if (p == null)
- {
- p = new PropertyNodes();
- map.put(name, p);
- }
- p.setter = node;
- FunctionNode fn = (FunctionNode) node;
- fn.parseFunctionBody(fjs.getProblems());
-
- boolean isBindableSetter = false;
- if (node instanceof SetterNode)
- {
- IMetaInfo[] metaInfos = null;
- metaInfos = node.getMetaInfos();
- for (IMetaInfo metaInfo : metaInfos)
- {
- name = metaInfo.getTagName();
- if (name.equals("Bindable")
- && metaInfo.getAllAttributes().length == 0)
- {
- isBindableSetter = true;
- break;
- }
- }
- }
- if (isBindableSetter)
- {
- IFunctionDefinition definition = node.getDefinition();
- ITypeDefinition type = (ITypeDefinition) definition.getParent();
- doc.emitMethodDoc(fn, getProject());
- write(fjs.formatQualifiedName(type.getQualifiedName()));
- if (!node.hasModifier(ASModifier.STATIC))
- {
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.PROTOTYPE);
- }
-
- write(ASEmitterTokens.MEMBER_ACCESS);
- write("__bindingWrappedSetter__");
- writeToken(node.getName());
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.FUNCTION);
- fjs.emitParameters(node.getParameterNodes());
- //writeNewline();
- fjs.emitMethodScope(node.getScopedNode());
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/13a2313b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
index 4efa7a6..41fd718 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
@@ -182,9 +182,12 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
// visit MXML
IClassDefinition cdef = node.getClassDefinition();
classDefinition = cdef;
- IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
+
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) ((IMXMLBlockWalker) getMXMLWalker())
.getASEmitter();
- ((JSFlexJSEmitter) asEmitter).getModel().setCurrentClass(cdef);
+
+ fjs.getModel().setCurrentClass(cdef);
// visit tags
final int len = node.getChildCount();
@@ -210,8 +213,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
emitScripts();
- ((JSFlexJSEmitter)asEmitter).getClassEmiter().getBindableEmitter().emit(cdef);
- ((JSFlexJSEmitter)asEmitter).getClassEmiter().getGetSetEmitter().emit(cdef);
+ fjs.getBindableEmitter().emit(cdef);
+ fjs.getAccessorEmitter().emit(cdef);
emitEvents(cname);
@@ -220,7 +223,6 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
emitMXMLDescriptorFuncs(cname);
emitBindingData(cname, cdef);
-
}
public void emitSubDocument(IMXMLComponentNode node)
[22/42] git commit: [flex-falcon] [refs/heads/develop] - Quick commit
to keep get everything in the repo before Mike goes wild
Posted by ah...@apache.org.
Quick commit to keep get everything in the repo before Mike goes wild
Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/36722ba5
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/36722ba5
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/36722ba5
Branch: refs/heads/develop
Commit: 36722ba5824183c8830b2aa81e4afa349f8b22f3
Parents: e5ac5e1
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:39:40 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:50 2015 +0100
----------------------------------------------------------------------
.../internal/codegen/js/vf2js/TestVF2JSStatements.java | 4 ++--
.../org/apache/flex/compiler/internal/test/TestBase.java | 2 +-
.../projects/simpleMXML/src/SimpleMXML_Project_result.js | 2 +-
compiler.jx.tests/test-files/vf2js/projects/super/Base.as | 2 ++
.../compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java | 9 ++++-----
5 files changed, 10 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36722ba5/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
index 3385b47..8327fcf 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
@@ -346,7 +346,7 @@ public class TestVF2JSStatements extends TestGoogStatements
IIfNode node = (IIfNode) getNode(
"if (numChildren == 0) { if (!typeDescription.@dynamic) { trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + typeDescription.@name + \"'\"); } }", IIfNode.class);
asBlockWalker.visitIf(node);
- assertOut("if (numChildren == 0) {\n if (!this.typeDescription['E4XOperator']) {\n org_apache_flex_utils_Language.trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + this.typeDescription['E4XOperator'] + \"'\");\n }\n}");
+ assertOut("if (numChildren == 0) {\n if (!typeDescription['E4XOperator']) {\n org_apache_flex_utils_Language.trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + typeDescription['E4XOperator'] + \"'\");\n }\n}");
}
@Test
@@ -355,7 +355,7 @@ public class TestVF2JSStatements extends TestGoogStatements
IIfNode node = (IIfNode) getNode(
"if (options.includeReadOnly) { properties = classInfo..accessor.(@access != \"writeonly\") + classInfo..variable; }", IIfNode.class);
asBlockWalker.visitIf(node);
- assertOut("if (options.includeReadOnly) {\n properties = 'E4XFilter' + this.classInfo['E4XSelector'];\n}");
+ assertOut("if (options.includeReadOnly) {\n properties = 'E4XFilter' + classInfo['E4XSelector'];\n}");
}
@Test
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36722ba5/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
index 2a2e90b..3b4f464 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
@@ -261,7 +261,7 @@ public class TestBase implements ITestBase
walker.visitCompilationUnit(cu);
- //System.out.println(writer.toString());
+ System.out.println(writer.toString());
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(outputClassFile));
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36722ba5/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js b/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
index e34f12d..d493d28 100644
--- a/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
+++ b/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
@@ -23,7 +23,7 @@ goog.provide('SimpleMXML_Project');
goog.require('spark.components.Application');
goog.require('example.Component');
-goog.require('org_apache_flex_utils_Language');
+goog.require('org.apache.flex.utils.Language');
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36722ba5/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/vf2js/projects/super/Base.as b/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
index ee69d65..7c2330c 100644
--- a/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
+++ b/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
@@ -52,6 +52,8 @@ public class Base extends Super
public function getNumber():void
{
alert(super.doStuff());
+
+ alert(Math.max(0, super.x - 1));
var x:Number = super.x;
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/36722ba5/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index b11193b..68d0cb6 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -990,7 +990,10 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (pfnode == null)
return false;
- return pfnode.getName().equals(node.getName());
+ String parentName = pfnode.getName();
+ String currentName = node.getName();
+
+ return parentName.equals(currentName);
}
//--------------------------------------------------------------------------
@@ -1359,8 +1362,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
// ToDo (erikdebruin): properly handle E4X
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.MEMBER_ACCESS);
getWalker().walk(node.getLeftOperandNode());
write(ASEmitterTokens.SQUARE_OPEN);
write(ASEmitterTokens.SINGLE_QUOTE);
@@ -1373,8 +1374,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
// ToDo (erikdebruin): properly handle E4X
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.MEMBER_ACCESS);
getWalker().walk(node.getLeftOperandNode());
write(ASEmitterTokens.SQUARE_OPEN);
write(ASEmitterTokens.SINGLE_QUOTE);
[35/42] git commit: [flex-falcon] [refs/heads/develop] - Add
ProblemQuery to getListOfFiles
Posted by ah...@apache.org.
Add ProblemQuery to getListOfFiles
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/7127eee5
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/7127eee5
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/7127eee5
Branch: refs/heads/develop
Commit: 7127eee5e3e04861ea02bf35ff314fcddcd59da7
Parents: f2b74b6
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Mon Jun 1 19:18:52 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:35 2015 +0100
----------------------------------------------------------------------
.../internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java | 2 +-
.../apache/flex/compiler/internal/graph/GoogDepsWriter.java | 9 ++++++---
2 files changed, 7 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7127eee5/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
index 5b1e436..53a6181 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
@@ -271,7 +271,7 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements
StringBuilder depsFileData = new StringBuilder();
try
{
- ArrayList<String> fileList = gdw.getListOfFiles();
+ ArrayList<String> fileList = gdw.getListOfFiles(problems);
for (String file : fileList)
{
compilerWrapper.addJSSourceFile(file);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7127eee5/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
index 7dd7065..f3d77fe 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
@@ -46,7 +46,7 @@ import com.google.common.io.Files;
public class GoogDepsWriter {
- public GoogDepsWriter(File outputFolder, String mainClassName, JSGoogConfiguration config, List<ISWC> swcs)
+ public GoogDepsWriter(File outputFolder, String mainClassName, JSGoogConfiguration config, List<ISWC> swcs)
{
this.outputFolderPath = outputFolder.getAbsolutePath();
this.mainName = mainClassName;
@@ -69,8 +69,11 @@ public class GoogDepsWriter {
private HashMap<String,GoogDep> depMap = new HashMap<String,GoogDep>();
- public ArrayList<String> getListOfFiles() throws InterruptedException
+ public ArrayList<String> getListOfFiles(ProblemQuery problems) throws InterruptedException
{
+ problemsFound = false;
+ this.problems = problems;
+
if (dps == null)
{
buildDB();
@@ -436,7 +439,7 @@ public class GoogDepsWriter {
return fn;
}
}
-
+
String fwdClassPath = className.replace("_", "/");
String bckClassPath = className.replace("_", "\\");
for (ISWC swc : swcs)
[06/42] git commit: [flex-falcon] [refs/heads/develop] - Update
README to make it more consistent when referring to repo/directory names
Posted by ah...@apache.org.
Update README to make it more consistent when referring to repo/directory names
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/dca1ad1f
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/dca1ad1f
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/dca1ad1f
Branch: refs/heads/develop
Commit: dca1ad1f0826e7c9aca5dfde5178d2bce475b3b0
Parents: 85e25c1
Author: Om Muppirala <om...@machinezone.com>
Authored: Wed May 27 12:59:27 2015 -0700
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:03 2015 +0100
----------------------------------------------------------------------
README | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/dca1ad1f/README
----------------------------------------------------------------------
diff --git a/README b/README
index 4958d43..dd520e8 100644
--- a/README
+++ b/README
@@ -28,23 +28,23 @@ Getting the latest sources via git
You can always checkout the latest source via git using the following
command:
- git clone https://git-wip-us.apache.org/repos/asf/flex-falcon.git falcon
- cd falcon
+ git clone https://git-wip-us.apache.org/repos/asf/flex-falcon.git flex-falcon
+ cd flex-falcon
git checkout develop
The Apache Flex Compiler also requires code from other Apache Flex git
repositories or an Apache Flex SDK. To get the latest source via git
for the Apache Flex SDK use the following command:
- git clone https://git-wip-us.apache.org/repos/asf/flex-sdk.git sdk
- cd sdk
+ git clone https://git-wip-us.apache.org/repos/asf/flex-sdk.git flex-sdk
+ cd flex-sdk
git checkout develop
The Apache Flex SDK requires the Text Layout Framework repository which
you can get as follows:
- git clone https://git-wip-us.apache.org/repos/asf/flex-tlf.git tlf
- cd tlf
+ git clone https://git-wip-us.apache.org/repos/asf/flex-tlf.git flex-tlf
+ cd flex-tlf
git checkout develop
To use an Apache Flex SDK, install an Apache Flex SDK on your computer and
[10/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
filed emittion into FieldEmitter.
Posted by ah...@apache.org.
- Refactored filed emittion into FieldEmitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/1b864027
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/1b864027
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/1b864027
Branch: refs/heads/develop
Commit: 1b8640271d67be12f0fff5b846e017fc69482a3a
Parents: ab1c421
Author: Michael Schmalle <ms...@apache.org>
Authored: Sat May 30 17:51:56 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:09 2015 +0100
----------------------------------------------------------------------
.../codegen/js/flexjs/JSFlexJSEmitter.java | 62 +---------
.../internal/codegen/js/goog/JSGoogEmitter.java | 10 +-
.../internal/codegen/js/jx/FieldEmitter.java | 112 +++++++++++++++++++
.../internal/codegen/js/utils/EmitterUtils.java | 8 ++
.../codegen/js/vf2js/JSVF2JSEmitter.java | 3 +-
5 files changed, 128 insertions(+), 67 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b864027/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index c6ba8d8..ec5c2db 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -49,6 +49,7 @@ import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
import org.apache.flex.compiler.internal.definitions.ClassDefinition;
import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
@@ -61,7 +62,6 @@ import org.apache.flex.compiler.internal.scopes.ASProjectScope;
import org.apache.flex.compiler.internal.scopes.PackageScope;
import org.apache.flex.compiler.internal.scopes.TypeScope;
import org.apache.flex.compiler.internal.tree.as.BinaryOperatorAssignmentNode;
-import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
import org.apache.flex.compiler.internal.tree.as.ClassNode;
import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
import org.apache.flex.compiler.internal.tree.as.FunctionNode;
@@ -112,6 +112,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
private int foreachLoopCounter = 0;
private ClassEmitter classEmitter;
+ private FieldEmitter fieldEmitter;
public ClassEmitter getClassEmiter()
{
@@ -123,6 +124,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
super(out);
classEmitter = new ClassEmitter(this);
+ fieldEmitter = new FieldEmitter(this);
}
@Override
@@ -155,63 +157,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitField(IVariableNode node)
{
- IDefinition definition = getClassDefinition(node);
-
- IDefinition def = null;
- IExpressionNode enode = node.getVariableTypeNode();//getAssignedValueNode();
- if (enode != null)
- {
- if (project == null)
- project = getWalker().getProject();
-
- def = enode.resolveType(project);
- }
-
- getDoc().emitFieldDoc(node, def);
-
- IDefinition ndef = node.getDefinition();
-
- ModifiersSet modifierSet = ndef.getModifiers();
- String root = "";
- if (modifierSet != null && !modifierSet.hasModifier(ASModifier.STATIC))
- {
- root = JSEmitterTokens.PROTOTYPE.getToken();
- root += ASEmitterTokens.MEMBER_ACCESS.getToken();
- }
-
- if (definition == null)
- definition = ndef.getContainingScope().getDefinition();
-
- write(formatQualifiedName(definition.getQualifiedName())
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
- + node.getName());
-
- IExpressionNode vnode = node.getAssignedValueNode();
- if (vnode != null)
- {
- write(ASEmitterTokens.SPACE);
- writeToken(ASEmitterTokens.EQUAL);
- getWalker().walk(vnode);
- }
-
- if (!(node instanceof ChainedVariableNode))
- {
- int len = node.getChildCount();
- for (int i = 0; i < len; i++)
- {
- IASNode child = node.getChild(i);
- if (child instanceof ChainedVariableNode)
- {
- writeNewline(ASEmitterTokens.SEMICOLON);
- writeNewline();
- emitField((IVariableNode) child);
- }
- }
- }
- if (node.getNodeID() == ASTNodeID.BindableVariableID)
- {
- getModel().getBindableVars().add(node.getName());
- }
+ fieldEmitter.emit(node);
}
public void emitBindableVarDefineProperty(String name, IClassDefinition cdef)
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b864027/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index d9ca745..db88672 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -40,6 +40,7 @@ import org.apache.flex.compiler.definitions.ITypeDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitter;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
import org.apache.flex.compiler.internal.definitions.ClassDefinition;
import org.apache.flex.compiler.internal.scopes.PackageScope;
import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
@@ -323,7 +324,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
@Override
public void emitField(IVariableNode node)
{
- IClassDefinition definition = getClassDefinition(node);
+ IClassDefinition definition = EmitterUtils.getClassDefinition(node);
IDefinition def = null;
IExpressionNode enode = node.getVariableTypeNode();//getAssignedValueNode();
@@ -939,13 +940,6 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
return (ITypeDefinition) tnode.getDefinition();
}
- protected static IClassDefinition getClassDefinition(IDefinitionNode node)
- {
- IClassNode tnode = (IClassNode) node
- .getAncestorOfType(IClassNode.class);
- return (tnode != null) ? tnode.getDefinition() : null;
- }
-
private static IClassDefinition getSuperClassDefinition(
IDefinitionNode node, ICompilerProject project)
{
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b864027/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
new file mode 100644
index 0000000..d63ffde
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -0,0 +1,112 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
+import org.apache.flex.compiler.common.ASModifier;
+import org.apache.flex.compiler.common.ModifiersSet;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+
+public class FieldEmitter extends JSSubEmitter implements
+ ISubEmitter<IVariableNode>
+{
+ public FieldEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IVariableNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ IDefinition definition = EmitterUtils.getClassDefinition(node);
+
+ IDefinition def = null;
+ IExpressionNode enode = node.getVariableTypeNode();//getAssignedValueNode();
+ if (enode != null)
+ {
+ def = enode.resolveType(getProject());
+ }
+
+ // TODO (mschmalle)
+ if (fjs.getDocEmitter() instanceof IJSGoogDocEmitter)
+ {
+ ((IJSGoogDocEmitter) fjs.getDocEmitter()).emitFieldDoc(node, def);
+ }
+
+ IDefinition ndef = node.getDefinition();
+
+ ModifiersSet modifierSet = ndef.getModifiers();
+ String root = "";
+ if (modifierSet != null && !modifierSet.hasModifier(ASModifier.STATIC))
+ {
+ root = JSEmitterTokens.PROTOTYPE.getToken();
+ root += ASEmitterTokens.MEMBER_ACCESS.getToken();
+ }
+
+ if (definition == null)
+ definition = ndef.getContainingScope().getDefinition();
+
+ write(fjs.formatQualifiedName(definition.getQualifiedName())
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
+ + node.getName());
+
+ IExpressionNode vnode = node.getAssignedValueNode();
+ if (vnode != null)
+ {
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ fjs.getWalker().walk(vnode);
+ }
+
+ if (!(node instanceof ChainedVariableNode))
+ {
+ int len = node.getChildCount();
+ for (int i = 0; i < len; i++)
+ {
+ IASNode child = node.getChild(i);
+ if (child instanceof ChainedVariableNode)
+ {
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ writeNewline();
+ fjs.emitField((IVariableNode) child);
+ }
+ }
+ }
+ if (node.getNodeID() == ASTNodeID.BindableVariableID)
+ {
+ getModel().getBindableVars().add(node.getName());
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b864027/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 94a2120..9f6a99d 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -30,6 +30,7 @@ import org.apache.flex.compiler.internal.definitions.ClassDefinition;
import org.apache.flex.compiler.projects.ICompilerProject;
import org.apache.flex.compiler.tree.ASTNodeID;
import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
import org.apache.flex.compiler.tree.as.IDefinitionNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
import org.apache.flex.compiler.tree.as.IScopedNode;
@@ -118,4 +119,11 @@ public class EmitterUtils
}
return list;
}
+
+ public static IClassDefinition getClassDefinition(IDefinitionNode node)
+ {
+ IClassNode tnode = (IClassNode) node
+ .getAncestorOfType(IClassNode.class);
+ return (tnode != null) ? tnode.getDefinition() : null;
+ }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1b864027/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index ea68760..033215a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -47,6 +47,7 @@ import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
import org.apache.flex.compiler.internal.definitions.ClassDefinition;
import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
@@ -384,7 +385,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
@Override
public void emitField(IVariableNode node)
{
- IDefinition definition = getClassDefinition(node);
+ IDefinition definition = EmitterUtils.getClassDefinition(node);
IDefinition def = null;
IExpressionNode enode = node.getVariableTypeNode();//getAssignedValueNode();
[25/42] git commit: [flex-falcon] [refs/heads/develop] - Revert "Add
null check"
Posted by ah...@apache.org.
Revert "Add null check"
This reverts commit 06cbaf4a4b6a953c34f253fedcb97f64fc7f23ee.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/f67b246a
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/f67b246a
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/f67b246a
Branch: refs/heads/develop
Commit: f67b246aa31523d93ab969797f4c4b02e1eadd4a
Parents: da5a714
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:47:38 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:00 2015 +0100
----------------------------------------------------------------------
.../internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f67b246a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
index e56a654..5c2aae0 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
@@ -1391,13 +1391,10 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
public void emitComponent(IMXMLComponentNode node)
{
MXMLVF2JSDescriptorSpecifier ps = getCurrentDescriptor("ps");
- if (ps != null)
- {
- ps.value = "new mx.core.ClassFactory(";
+ ps.value = "new mx.core.ClassFactory(";
- ps.value += node.getName();
- ps.value += ")";
- }
+ ps.value += node.getName();
+ ps.value += ")";
setBufferWrite(true);
emitSubDocument(node);
[29/42] git commit: [flex-falcon] [refs/heads/develop] - Removed
getDoc() with getDocEmitter(), override with interface.
Posted by ah...@apache.org.
Removed getDoc() with getDocEmitter(), override with interface.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/26deda9b
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/26deda9b
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/26deda9b
Branch: refs/heads/develop
Commit: 26deda9b18b9045a41fd9f1efd50576ce6832df1
Parents: 8393290
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 14:20:04 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:14 2015 +0100
----------------------------------------------------------------------
.../codegen/js/flexjs/JSFlexJSEmitter.java | 7 +-
.../internal/codegen/js/goog/JSGoogEmitter.java | 23 +-
.../codegen/js/vf2js/JSVF2JSEmitter.java | 449 ++++++++++---------
3 files changed, 251 insertions(+), 228 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/26deda9b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 5b8b1fe..d9b1c4e 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -21,8 +21,8 @@ package org.apache.flex.compiler.internal.codegen.js.flexjs;
import java.io.FilterWriter;
-import org.apache.flex.compiler.codegen.IDocEmitter;
import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
+import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
import org.apache.flex.compiler.common.ASModifier;
import org.apache.flex.compiler.common.IMetaInfo;
import org.apache.flex.compiler.definitions.IFunctionDefinition;
@@ -110,8 +110,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
return accessorEmitter;
}
+ // TODO (mschmalle) Fix; this is not using the backend doc strategy for replacement
@Override
- public IDocEmitter getDocEmitter()
+ public IJSGoogDocEmitter getDocEmitter()
{
if (docEmitter == null)
docEmitter = new JSFlexJSDocEmitter(this);
@@ -283,7 +284,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
if (isBindableSetter)
{
- getDoc().emitMethodDoc(fn, getWalker().getProject());
+ getDocEmitter().emitMethodDoc(fn, getWalker().getProject());
write(formatQualifiedName(type.getQualifiedName()));
if (!node.hasModifier(ASModifier.STATIC))
{
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/26deda9b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index b685fe0..c431553 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -26,7 +26,6 @@ import java.util.List;
import java.util.Map;
import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants.BuiltinType;
-import org.apache.flex.compiler.codegen.IDocEmitter;
import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
import org.apache.flex.compiler.codegen.js.goog.IJSGoogEmitter;
import org.apache.flex.compiler.common.ASModifier;
@@ -88,15 +87,15 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
// TODO (mschmalle) Remove this (not used in JSFlexJSEmitter and JSGoogEmitter anymore)
public ICompilerProject project;
- protected IJSGoogDocEmitter getDoc()
- {
- return (IJSGoogDocEmitter) getDocEmitter();
- }
+ private JSGoogDocEmitter docEmitter;
+ // TODO (mschmalle) Fix; this is not using the backend doc strategy for replacement
@Override
- public IDocEmitter getDocEmitter()
+ public IJSGoogDocEmitter getDocEmitter()
{
- return new JSGoogDocEmitter(this);
+ if (docEmitter == null)
+ docEmitter = new JSGoogDocEmitter(this);
+ return docEmitter;
}
protected void writeIndent()
@@ -267,7 +266,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
{
ICompilerProject project = getWalker().getProject();
- getDoc().emitInterfaceDoc(node, project);
+ getDocEmitter().emitInterfaceDoc(node, project);
String qname = node.getQualifiedName();
if (qname != null && !qname.equals(""))
@@ -334,7 +333,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
if (enode != null)
def = enode.resolveType(getWalker().getProject());
- getDoc().emitFieldDoc(node, def);
+ getDocEmitter().emitFieldDoc(node, def);
/* x.prototype.y = z */
@@ -388,11 +387,11 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
String opcode = avnode.getNodeID().getParaphrase();
if (opcode != "AnonymousFunction")
- getDoc().emitVarDoc(node, def);
+ getDocEmitter().emitVarDoc(node, def);
}
else
{
- getDoc().emitVarDoc(node, null);
+ getDocEmitter().emitVarDoc(node, null);
}
emitDeclarationName(node);
@@ -458,7 +457,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
ICompilerProject project = getWalker().getProject();
- getDoc().emitMethodDoc(node, project);
+ getDocEmitter().emitMethodDoc(node, project);
boolean isConstructor = node.isConstructor();
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/26deda9b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index b11193b..dab4472 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -29,7 +29,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants;
-import org.apache.flex.compiler.codegen.IDocEmitter;
+import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
import org.apache.flex.compiler.codegen.js.vf2js.IJSVF2JSEmitter;
import org.apache.flex.compiler.common.ASModifier;
import org.apache.flex.compiler.common.ModifiersSet;
@@ -207,7 +207,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
ICompilerProject project = getWalker().getProject();
- getDoc().emitInterfaceDoc(node, project);
+ getDocEmitter().emitInterfaceDoc(node, project);
String qname = parseQualifiedName(node);
if (qname != null && !qname.equals(""))
@@ -225,7 +225,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SEMICOLON);
}
-
final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
for (IDefinitionNode mnode : members)
{
@@ -236,8 +235,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
writeNewline();
writeNewline();
- getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
-
+ getDocEmitter().emitInterfaceMemberDoc(mnode, project);
+
write(qname);
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSEmitterTokens.PROTOTYPE);
@@ -277,11 +276,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (node.isConstructor())
{
- emitVarNonLiteralAssignments();
+ emitVarNonLiteralAssignments();
}
-
- if (node.isConstructor()
- && hasSuperClass(node) && !hasSuperCall(node.getScopedNode()))
+
+ if (node.isConstructor() && hasSuperClass(node)
+ && !hasSuperCall(node.getScopedNode()))
emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
}
@@ -290,50 +289,49 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
// (erikdebruin): If the initial value of a variable is set using
// a method, JS needs this initialization to be done
// in the constructor
- IClassNode cdnode = (IClassNode) getModel().getCurrentClass().getNode();
+ IClassNode cdnode = (IClassNode) getModel().getCurrentClass().getNode();
IDefinitionNode[] dnodes = cdnode.getAllMemberNodes();
for (IDefinitionNode dnode : dnodes)
{
if (dnode.getNodeID() == ASTNodeID.VariableID)
{
- IVariableNode vnode = (IVariableNode) dnode;
- IExpressionNode avnode = vnode.getAssignedValueNode();
- if (avnode != null &&
- !(avnode instanceof ILiteralNode) &&
- !(avnode instanceof IEmbedNode))
+ IVariableNode vnode = (IVariableNode) dnode;
+ IExpressionNode avnode = vnode.getAssignedValueNode();
+ if (avnode != null && !(avnode instanceof ILiteralNode)
+ && !(avnode instanceof IEmbedNode))
{
- writeNewline("", true);
- if (vnode.hasModifier(ASModifier.STATIC))
- {
- write(parseQualifiedName(cdnode));
- }
- else
- {
- write(ASEmitterTokens.THIS);
- }
- write(ASEmitterTokens.MEMBER_ACCESS);
- writeToken(vnode.getName());
- writeToken(ASEmitterTokens.EQUAL);
- getWalker().walk(avnode);
- indentPop();
- writeNewline(ASEmitterTokens.SEMICOLON);
+ writeNewline("", true);
+ if (vnode.hasModifier(ASModifier.STATIC))
+ {
+ write(parseQualifiedName(cdnode));
+ }
+ else
+ {
+ write(ASEmitterTokens.THIS);
+ }
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ writeToken(vnode.getName());
+ writeToken(ASEmitterTokens.EQUAL);
+ getWalker().walk(avnode);
+ indentPop();
+ writeNewline(ASEmitterTokens.SEMICOLON);
}
}
}
}
-
+
@Override
public void emitVarDeclaration(IVariableNode node)
{
if (!(node instanceof ChainedVariableNode))
{
- // (erikdebruin): check for 'var i:int = 0, j:int = 0' containers
- IASNode pnode = node.getParent();
- if (!(pnode instanceof IVariableExpressionNode) ||
- node.getChild(0) instanceof IKeywordNode)
- {
- emitMemberKeyword(node);
- }
+ // (erikdebruin): check for 'var i:int = 0, j:int = 0' containers
+ IASNode pnode = node.getParent();
+ if (!(pnode instanceof IVariableExpressionNode)
+ || node.getChild(0) instanceof IKeywordNode)
+ {
+ emitMemberKeyword(node);
+ }
}
IExpressionNode avnode = node.getAssignedValueNode();
@@ -343,16 +341,16 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
String opcode = avnode.getNodeID().getParaphrase();
if (opcode != "AnonymousFunction")
- getDoc().emitVarDoc(node, def);
+ getDocEmitter().emitVarDoc(node, def);
}
else
{
- getDoc().emitVarDoc(node, null);
+ getDocEmitter().emitVarDoc(node, null);
}
emitDeclarationName(node);
if (!(avnode instanceof IEmbedNode))
- emitAssignedValue(avnode);
+ emitAssignedValue(avnode);
if (!(node instanceof ChainedVariableNode))
{
@@ -398,7 +396,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
def = enode.resolveType(project);
}
- getDoc().emitFieldDoc(node, def);
+ getDocEmitter().emitFieldDoc(node, def);
IDefinition ndef = node.getDefinition();
@@ -448,40 +446,52 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
writeNewline("@expose");
writeNewline(" */");
writeNewline(parseQualifiedName(definition)
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
- + "get_" + node.getName()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.EQUAL.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.FUNCTION.getToken()
- + ASEmitterTokens.PAREN_OPEN.getToken() + ASEmitterTokens.PAREN_CLOSE.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.BLOCK_OPEN.getToken());
- writeNewline(ASEmitterTokens.RETURN.getToken() + ASEmitterTokens.SPACE.getToken()
- + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
- + node.getName() + ASEmitterTokens.SEMICOLON.getToken());
- writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken() + ASEmitterTokens.SEMICOLON.getToken());
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + root + "get_"
+ + node.getName() + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.EQUAL.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.FUNCTION.getToken()
+ + ASEmitterTokens.PAREN_OPEN.getToken()
+ + ASEmitterTokens.PAREN_CLOSE.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.BLOCK_OPEN.getToken());
+ writeNewline(ASEmitterTokens.RETURN.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+ + ASEmitterTokens.SEMICOLON.getToken());
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken()
+ + ASEmitterTokens.SEMICOLON.getToken());
writeNewline();
writeNewline("/**");
writeNewline("@expose");
writeNewline(" */");
writeNewline(parseQualifiedName(definition)
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + root
- + "set_" + node.getName()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.EQUAL.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.FUNCTION.getToken()
- + ASEmitterTokens.PAREN_OPEN.getToken() + "value" + ASEmitterTokens.PAREN_CLOSE.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.BLOCK_OPEN.getToken());
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + root + "set_"
+ + node.getName() + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.EQUAL.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.FUNCTION.getToken()
+ + ASEmitterTokens.PAREN_OPEN.getToken() + "value"
+ + ASEmitterTokens.PAREN_CLOSE.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.BLOCK_OPEN.getToken());
writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName() + ") {");
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+ + ") {");
writeNewline(" var oldValue = "
- + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
- + node.getName() + ASEmitterTokens.SEMICOLON.getToken());
- writeNewline(" " + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
- + node.getName() + " = value;");
+ + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+ + ASEmitterTokens.SEMICOLON.getToken());
+ writeNewline(" " + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + node.getName()
+ + " = value;");
writeNewline(" this.dispatchEvent(org.apache.flex.events.ValueChangeEvent.createUpdateEvent(");
- writeNewline(" this, \"" + node.getName() + "\", oldValue, value));");
+ writeNewline(" this, \"" + node.getName()
+ + "\", oldValue, value));");
writeNewline("}");
write(ASEmitterTokens.BLOCK_CLOSE.getToken());
-
-
+
}
}
@@ -506,7 +516,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
ICompilerProject project = getWalker().getProject();
- getDoc().emitMethodDoc(node, project);
+ getDocEmitter().emitMethodDoc(node, project);
boolean isConstructor = node.isConstructor();
@@ -559,39 +569,43 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.PAREN_OPEN);
write(qname);
writeToken(ASEmitterTokens.COMMA);
- String sname = parseQualifiedName(getSuperClassDefinition(node, project));
+ String sname = parseQualifiedName(getSuperClassDefinition(node,
+ project));
if (sname.equals(IASLanguageConstants.Object))
- sname = IASLanguageConstants.Class;
+ sname = IASLanguageConstants.Class;
write(sname);
write(ASEmitterTokens.PAREN_CLOSE);
}
}
-
+
@Override
protected boolean hasSuperClass(IDefinitionNode node)
{
ICompilerProject project = getWalker().getProject();
IClassDefinition superClassDefinition = getSuperClassDefinition(node,
project);
-
+
if (superClassDefinition == null)
return false;
-
+
String qname = parseQualifiedName(superClassDefinition);
// ToDo (erikdebruin): need this to get the JS version of the SDK in
// shape?
- boolean useClassAsSuperClass = !qname.equals(IASLanguageConstants.Object);
+ boolean useClassAsSuperClass = !qname
+ .equals(IASLanguageConstants.Object);
if (!useClassAsSuperClass)
{
- if (parseQualifiedName(node).equals("mx.core.EmbeddedFontRegistry") ||
- parseQualifiedName(node).equals("mx.managers.HistoryManagerImpl") ||
- parseQualifiedName(node).equals("mx.core.TextFieldFactory"))
- {
- useClassAsSuperClass = true;
- }
+ if (parseQualifiedName(node).equals("mx.core.EmbeddedFontRegistry")
+ || parseQualifiedName(node).equals(
+ "mx.managers.HistoryManagerImpl")
+ || parseQualifiedName(node).equals(
+ "mx.core.TextFieldFactory"))
+ {
+ useClassAsSuperClass = true;
+ }
}
-
+
return superClassDefinition != null && useClassAsSuperClass;
}
@@ -622,9 +636,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
def = node.getNameNode().resolve(project);
- isClassCast = (def instanceof ClassDefinition ||
- def instanceof InterfaceDefinition) &&
- !(NativeUtils.isJSNative(def.getBaseName()));
+ isClassCast = (def instanceof ClassDefinition || def instanceof InterfaceDefinition)
+ && !(NativeUtils.isJSNative(def.getBaseName()));
}
if (node.isNewExpression())
@@ -647,15 +660,18 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
if (def != null)
{
- boolean isInt = def.getBaseName().equals(IASGlobalFunctionConstants._int);
- if (isInt ||
- def.getBaseName().equals(IASGlobalFunctionConstants.trace) ||
- def.getBaseName().equals(IASGlobalFunctionConstants.uint))
+ boolean isInt = def.getBaseName().equals(
+ IASGlobalFunctionConstants._int);
+ if (isInt
+ || def.getBaseName().equals(
+ IASGlobalFunctionConstants.trace)
+ || def.getBaseName().equals(
+ IASGlobalFunctionConstants.uint))
{
write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
write(ASEmitterTokens.MEMBER_ACCESS);
if (isInt)
- write(JSFlexJSEmitterTokens.UNDERSCORE);
+ write(JSFlexJSEmitterTokens.UNDERSCORE);
}
}
getWalker().walk(node.getNameNode());
@@ -665,7 +681,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
else
{
- emitIsAs(node.getArgumentNodes()[0], node.getNameNode(), ASTNodeID.Op_AsID, true);
+ emitIsAs(node.getArgumentNodes()[0], node.getNameNode(),
+ ASTNodeID.Op_AsID, true);
}
}
else
@@ -686,11 +703,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
if (node instanceof NonResolvingIdentifierNode)
return false;
-
+
IClassNode classNode = (IClassNode) node
.getAncestorOfType(IClassNode.class);
- IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
+ IDefinition nodeDef = node.resolve(project);
IASNode parentNode = node.getParent();
ASTNodeID parentNodeId = parentNode.getNodeID();
@@ -704,7 +721,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
if (nodeDef instanceof ParameterDefinition)
return false;
-
+
if (nodeDef instanceof VariableDefinition)
{
IDefinition pdef = ((VariableDefinition) nodeDef).getParent();
@@ -745,19 +762,18 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
else
{
- if (nodeDef != null
- && !nodeDef.isInternal()
+ if (nodeDef != null && !nodeDef.isInternal()
&& isClassMember(nodeDef, classNode))
{
if (identifierIsMemberAccess)
{
- if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID
+ if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID
&& parentNode.getChild(0).getNodeID() == ASTNodeID.SuperID
&& !isSuperCallForOverride(node))
- {
- return true;
- }
-
+ {
+ return true;
+ }
+
return node == firstChild;
}
else
@@ -768,8 +784,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
.getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL;
if (nodeDef instanceof IParameterDefinition)
- return false;
-
+ return false;
+
return !identifierIsLocalFunction;
}
}
@@ -793,7 +809,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
while (visiblePropertiesIterator.hasNext())
{
if (parseQualifiedName(nodeDef).equals(
- parseQualifiedName(visiblePropertiesIterator.next())))
+ parseQualifiedName(visiblePropertiesIterator.next())))
return true;
}
@@ -806,7 +822,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (pdef == thisClass)
return true;
- IDefinition cdef = ((ClassDefinition) thisClass).resolveBaseClass(project);
+ IDefinition cdef = ((ClassDefinition) thisClass)
+ .resolveBaseClass(project);
while (cdef != null)
{
// needs to be a loop
@@ -823,7 +840,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (project == null)
project = getWalker().getProject();
- IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
+ IDefinition nodeDef = node.resolve(project);
IASNode parentNode = node.getParent();
ASTNodeID parentNodeId = parentNode.getNodeID();
@@ -834,8 +851,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
boolean emitName = true;
- if (nodeDef != null
- && nodeDef.isStatic() && nodeDef.getParent() != null)
+ if (nodeDef != null && nodeDef.isStatic()
+ && nodeDef.getParent() != null)
{
String sname = parseQualifiedName(nodeDef.getParent());
if (sname.length() > 0)
@@ -937,7 +954,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
// ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
if (cnode == null)
return;
-
+
write(parseQualifiedName(cnode));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSGoogEmitterTokens.GOOG_BASE);
@@ -966,16 +983,17 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (anode != null && isAssignment)
{
- getWalker().walk(((BinaryOperatorAssignmentNode) anode)
- .getRightOperandNode());
+ getWalker().walk(
+ ((BinaryOperatorAssignmentNode) anode)
+ .getRightOperandNode());
}
if (!(node instanceof NonResolvingIdentifierNode))
- write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.PAREN_CLOSE);
}
else if (emitName)
{
- if (nodeDef != null)
+ if (nodeDef != null)
write(parseQualifiedName(nodeDef));
else
write(node.getName());
@@ -984,15 +1002,15 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
private boolean isSuperCallForOverride(IIdentifierNode node)
{
- IFunctionNode pfnode = (IFunctionNode) node.
- getAncestorOfType(FunctionNode.class);
+ IFunctionNode pfnode = (IFunctionNode) node
+ .getAncestorOfType(FunctionNode.class);
- if (pfnode == null)
- return false;
-
- return pfnode.getName().equals(node.getName());
+ if (pfnode == null)
+ return false;
+
+ return pfnode.getName().equals(node.getName());
}
-
+
//--------------------------------------------------------------------------
@Override
@@ -1024,7 +1042,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (cnode == null)
return;
-
+
// (erikdebruin): Catch when a 'super' call does NOT match the enclosing
// function call. The GCC only allows '.base()' calls
// to matching super methods, so we need to use
@@ -1032,20 +1050,23 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
boolean isCallToOtherSuperMethod = false;
try
{
- IExpressionNode d = fcnode.getNameNode();
- if (d != null && d instanceof IMemberAccessExpressionNode)
- {
- IIdentifierNode b = (IIdentifierNode) ((IMemberAccessExpressionNode) d).getRightOperandNode();
-
- isCallToOtherSuperMethod =
- b != null && !b.getName().equals(fnode.getName());
- }
+ IExpressionNode d = fcnode.getNameNode();
+ if (d != null && d instanceof IMemberAccessExpressionNode)
+ {
+ IIdentifierNode b = (IIdentifierNode) ((IMemberAccessExpressionNode) d)
+ .getRightOperandNode();
+
+ isCallToOtherSuperMethod = b != null
+ && !b.getName().equals(fnode.getName());
+ }
}
- catch (Exception e) { /* Eat it! */ }
-
+ catch (Exception e)
+ { /* Eat it! */
+ }
+
if (isCallToOtherSuperMethod)
{
- write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSGoogEmitterTokens.SUPERCLASS);
write(ASEmitterTokens.MEMBER_ACCESS);
@@ -1071,22 +1092,22 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
if (!isCallToOtherSuperMethod)
{
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SINGLE_QUOTE);
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
}
-
+
if (fnode.getNodeID() == ASTNodeID.GetterID
|| fnode.getNodeID() == ASTNodeID.SetterID)
writeGetSetPrefix(fnode.getNodeID() == ASTNodeID.GetterID);
-
+
// (erikdebruin): write(fnode.getName());
- IMemberAccessExpressionNode aenode =
- (IMemberAccessExpressionNode) fcnode.getNameNode();
+ IMemberAccessExpressionNode aenode = (IMemberAccessExpressionNode) fcnode
+ .getNameNode();
write(((IIdentifierNode) aenode.getRightOperandNode()).getName());
-
+
if (!isCallToOtherSuperMethod)
{
- write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.SINGLE_QUOTE);
}
else
{
@@ -1114,9 +1135,10 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
else if (fnode == null && node instanceof BinaryOperatorAssignmentNode)
{
BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
-
- IFunctionNode pnode = (IFunctionNode) bnode.getAncestorOfType(IFunctionNode.class);
-
+
+ IFunctionNode pnode = (IFunctionNode) bnode
+ .getAncestorOfType(IFunctionNode.class);
+
if (pnode.getNodeID() == ASTNodeID.SetterID)
{
writeToken(ASEmitterTokens.COMMA);
@@ -1222,15 +1244,15 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
public void emitBinaryOperator(IBinaryOperatorNode node)
{
ASTNodeID id = node.getNodeID();
- if (id == ASTNodeID.Op_InID
- || id == ASTNodeID.Op_LogicalAndAssignID
+ if (id == ASTNodeID.Op_InID || id == ASTNodeID.Op_LogicalAndAssignID
|| id == ASTNodeID.Op_LogicalOrAssignID)
{
super.emitBinaryOperator(node);
}
else if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
{
- emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id, false);
+ emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id,
+ false);
}
else if (id == ASTNodeID.Op_InstanceOfID)
{
@@ -1238,7 +1260,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SPACE);
writeToken(ASEmitterTokens.INSTANCEOF);
-
+
IDefinition dnode = (node.getRightOperandNode()).resolve(project);
if (dnode != null)
write(parseQualifiedName(dnode));
@@ -1283,7 +1305,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
getWalker().walk(leftSide);
}
- else if (isSuper)
+ else if (isSuper)
{
emitSuperCall(node, "");
}
@@ -1307,7 +1329,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
}
- private void emitIsAs(IExpressionNode left, IExpressionNode right,
+ private void emitIsAs(IExpressionNode left, IExpressionNode right,
ASTNodeID id, boolean coercion)
{
write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
@@ -1325,16 +1347,16 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(parseQualifiedName(dnode));
else
getWalker().walk(right);
-
- if (coercion)
+
+ if (coercion)
{
writeToken(ASEmitterTokens.COMMA);
write(ASEmitterTokens.TRUE);
}
-
+
write(ASEmitterTokens.PAREN_CLOSE);
}
-
+
@Override
public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
{
@@ -1353,12 +1375,12 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (!isStatic)
{
if (!(leftNode instanceof ILanguageIdentifierNode && ((ILanguageIdentifierNode) leftNode)
- .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
+ .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
{
- if (rightNode instanceof UnaryOperatorAtNode)
+ if (rightNode instanceof UnaryOperatorAtNode)
{
- // ToDo (erikdebruin): properly handle E4X
-
+ // ToDo (erikdebruin): properly handle E4X
+
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
getWalker().walk(node.getLeftOperandNode());
@@ -1369,10 +1391,10 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SQUARE_CLOSE);
continueWalk = false;
}
- else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
- {
- // ToDo (erikdebruin): properly handle E4X
-
+ else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
+ {
+ // ToDo (erikdebruin): properly handle E4X
+
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
getWalker().walk(node.getLeftOperandNode());
@@ -1382,8 +1404,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.SQUARE_CLOSE);
continueWalk = false;
- }
- else if (leftNode.getNodeID() != ASTNodeID.SuperID)
+ }
+ else if (leftNode.getNodeID() != ASTNodeID.SuperID)
{
getWalker().walk(node.getLeftOperandNode());
write(node.getOperator().getOperatorText());
@@ -1394,11 +1416,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.THIS);
write(node.getOperator().getOperatorText());
}
-
+
}
-
+
if (continueWalk)
- getWalker().walk(node.getRightOperandNode());
+ getWalker().walk(node.getRightOperandNode());
}
private static ITypeDefinition getTypeDefinition(IDefinitionNode node)
@@ -1428,11 +1450,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
// ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
if (type == null)
return;
-
+
if (project == null)
project = getWalker().getProject();
- getDoc().emitMethodDoc(fn, project);
+ getDocEmitter().emitMethodDoc(fn, project);
write(parseQualifiedName(type));
if (!node.hasModifier(ASModifier.STATIC))
{
@@ -1460,7 +1482,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
@Override
- public IDocEmitter getDocEmitter()
+ public IJSGoogDocEmitter getDocEmitter()
{
return new JSVF2JSDocEmitter(this);
}
@@ -1481,7 +1503,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
writeNewline(" * @suppress {checkTypes}");
writeNewline(" */");
writeNewline();
-
+
/* goog.provide('x');\n\n */
write(JSGoogEmitterTokens.GOOG_PROVIDE);
write(ASEmitterTokens.PAREN_OPEN);
@@ -1507,7 +1529,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
project = getWalker().getProject();
FlexJSProject flexProject = (FlexJSProject) project;
- ASProjectScope projectScope = (ASProjectScope) flexProject.getScope();
+ ASProjectScope projectScope = flexProject.getScope();
ICompilationUnit cu = projectScope
.getCompilationUnitForDefinition(type);
ArrayList<String> requiresList = flexProject.getRequires(cu);
@@ -1542,14 +1564,14 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
-
+
writtenInstances.add(imp);
-
+
emitsRequires = true;
}
}
}
-
+
boolean emitsInterfaces = false;
if (interfacesList != null)
{
@@ -1562,17 +1584,17 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
-
+
emitsInterfaces = true;
}
}
-
+
// erikdebruin: Add missing language feature support, with e.g. 'is' and
// 'as' operators. We don't need to worry about requiring
// this in every project: ADVANCED_OPTIMISATIONS will NOT
// include any of the code if it is not used in the project.
- boolean isMainCU = flexProject.mainCU != null &&
- cu.getName().equals(flexProject.mainCU.getName());
+ boolean isMainCU = flexProject.mainCU != null
+ && cu.getName().equals(flexProject.mainCU.getName());
if (isMainCU)
{
write(JSGoogEmitterTokens.GOOG_REQUIRE);
@@ -1612,11 +1634,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
writeNewline();
writeNewline();
writeNewline();
- getDoc().begin();
+ getDocEmitter().begin();
writeNewline(" * Metadata");
writeNewline(" *");
writeNewline(" * @type {Object.<string, Array.<Object>>}");
- getDoc().end();
+ getDocEmitter().end();
// a.B.prototype.AFJS_CLASS_INFO = { };
write(parseQualifiedName(type));
@@ -1626,7 +1648,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
writeToken(JSFlexJSEmitterTokens.FLEXJS_CLASS_INFO);
writeToken(ASEmitterTokens.EQUAL);
writeToken(ASEmitterTokens.BLOCK_OPEN);
-
+
// names: [{ name: '', qName: '' }]
write(JSFlexJSEmitterTokens.NAMES);
writeToken(ASEmitterTokens.COLON);
@@ -1651,7 +1673,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
else
enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
-
+
if (enodes.length > 0)
{
writeToken(ASEmitterTokens.COMMA);
@@ -1662,7 +1684,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.SQUARE_OPEN);
int i = 0;
for (IExpressionNode enode : enodes)
- {
+ {
write(parseQualifiedName(enode.resolve(project)));
if (i < enodes.length - 1)
writeToken(ASEmitterTokens.COMMA);
@@ -1823,16 +1845,16 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
public void emitLiteral(ILiteralNode node)
{
boolean isWritten = false;
-
+
String s = node.getValue(true);
if (!(node instanceof RegExpLiteralNode))
{
if (node.getLiteralType() == LiteralType.XML)
{
// ToDo (erikdebruin): VF2JS -> handle XML output properly...
-
+
write("'" + s + "'");
-
+
isWritten = true;
}
s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
@@ -1850,33 +1872,34 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
-
+
Character c = s.charAt(0);
if (c.equals('"'))
{
- s = s.substring(1, s.length() - 1);
- s = s.replaceAll("\"", "\\\\\"");
- s = "\"" + s + "\"";
+ s = s.substring(1, s.length() - 1);
+ s = s.replaceAll("\"", "\\\\\"");
+ s = "\"" + s + "\"";
}
if (s.length() == 3)
{
- c = s.charAt(1);
- if (c.equals('\\')) {
- s = "\"\\\\\"";
- }
+ c = s.charAt(1);
+ if (c.equals('\\'))
+ {
+ s = "\"\\\\\"";
+ }
}
}
-
+
if (!isWritten)
{
write(s);
}
}
-
+
@Override
public void emitE4XFilter(IMemberAccessExpressionNode node)
{
- // ToDo (erikdebruin): implement E4X replacement !?!
+ // ToDo (erikdebruin): implement E4X replacement !?!
write(ASEmitterTokens.SINGLE_QUOTE);
write("E4XFilter");
write(ASEmitterTokens.SINGLE_QUOTE);
@@ -1889,36 +1912,36 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
for (int i = 0; i < nodeCount; i++)
{
getWalker().walk(node.getChild(i));
-
+
if (i < nodeCount - 1)
- writeToken(ASEmitterTokens.COMMA);
+ writeToken(ASEmitterTokens.COMMA);
}
}
-
+
private String parseQualifiedName(IDefinitionNode def)
{
- return parseQualifiedNameString(def.getQualifiedName());
+ return parseQualifiedNameString(def.getQualifiedName());
}
-
+
private String parseQualifiedName(IDefinition def)
{
- return parseQualifiedNameString(def.getQualifiedName());
+ return parseQualifiedNameString(def.getQualifiedName());
}
private String parseQualifiedNameString(String qNameString)
{
- // ToDo (erikdebruin): Ugly hacks for VF2JS ...
- if (qNameString.equals(IASLanguageConstants._int))
- {
- qNameString = qNameString.toUpperCase();
- }
-
- if (qNameString.equals("byte"))
- {
- qNameString = "$" + qNameString;
- }
-
- return qNameString;
+ // ToDo (erikdebruin): Ugly hacks for VF2JS ...
+ if (qNameString.equals(IASLanguageConstants._int))
+ {
+ qNameString = qNameString.toUpperCase();
+ }
+
+ if (qNameString.equals("byte"))
+ {
+ qNameString = "$" + qNameString;
+ }
+
+ return qNameString;
}
}
[17/42] git commit: [flex-falcon] [refs/heads/develop] - - Fixed a
bug in JSGoogDocEmitter where the project was not resolved and thus the test
was faulty not showing it's qualified name. * The bug was responsible for 2
tests failing, when there is no
Posted by ah...@apache.org.
- Fixed a bug in JSGoogDocEmitter where the project was not resolved
and thus the test was faulty not showing it's qualified name.
* The bug was responsible for 2 tests failing, when there is no type
the visitor test failt, just put an if() in to fix it.
- Removed the project reference from JSFlexJSEmitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/7308a81a
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/7308a81a
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/7308a81a
Branch: refs/heads/develop
Commit: 7308a81aeb83c1addeb390414cb3eeb04f1945a8
Parents: 13a2313
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 13:06:43 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:33 2015 +0100
----------------------------------------------------------------------
.../flexjs/files/wildcard_import_result.js | 2 +-
.../codegen/js/flexjs/JSFlexJSEmitter.java | 8 +---
.../codegen/js/goog/JSGoogDocEmitter.java | 39 +++++++++++---------
.../internal/codegen/js/goog/JSGoogEmitter.java | 3 +-
4 files changed, 26 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7308a81a/compiler.jx.tests/test-files/flexjs/files/wildcard_import_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/flexjs/files/wildcard_import_result.js b/compiler.jx.tests/test-files/flexjs/files/wildcard_import_result.js
index 72981e3..1ee8469 100644
--- a/compiler.jx.tests/test-files/flexjs/files/wildcard_import_result.js
+++ b/compiler.jx.tests/test-files/flexjs/files/wildcard_import_result.js
@@ -61,7 +61,7 @@ wildcard_import.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'wildcard_import
* @private
*/
wildcard_import.prototype.tmp = function() {
- var /** @type {Button} */ myButton;
+ var /** @type {org_apache_flex_html_Button} */ myButton;
myButton = new org_apache_flex_html_Button();
};
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7308a81a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 2460d3f..ec1f3db 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -199,9 +199,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
public void emitIdentifier(IIdentifierNode node)
{
// TODO (mschmalle) remove when project field is removed
- if (project == null)
- project = getWalker().getProject();
-
identifierEmitter.emit(node);
}
@@ -229,9 +226,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
{
// TODO (mschmalle) remove when project field is removed
- if (project == null)
- project = getWalker().getProject();
-
memberAccessEmitter.emit(node);
}
@@ -280,7 +274,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
if (isBindableSetter)
{
- getDoc().emitMethodDoc(fn, project);
+ getDoc().emitMethodDoc(fn, getWalker().getProject());
write(formatQualifiedName(type.getQualifiedName()));
if (!node.hasModifier(ASModifier.STATIC))
{
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7308a81a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
index 0f8f960..e402ac9 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
@@ -74,7 +74,8 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
IDefinition dnode = inode.resolve(project);
if (dnode != null)
{
- emitJSDocLine(ASEmitterTokens.EXTENDS, formatQualifiedName(dnode.getQualifiedName()));
+ emitJSDocLine(ASEmitterTokens.EXTENDS,
+ formatQualifiedName(dnode.getQualifiedName()));
}
else
{
@@ -82,7 +83,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
break;
}
}
-
+
if (!hasQualifiedNames)
{
String[] inames = node.getExtendedInterfaces();
@@ -95,7 +96,8 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
end();
}
- public void emitInterfaceMemberDoc(IDefinitionNode node, ICompilerProject project)
+ public void emitInterfaceMemberDoc(IDefinitionNode node,
+ ICompilerProject project)
{
// (erikdebruin) placeholder method, so we don't have to further complicate
// the interface structure
@@ -172,7 +174,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
begin();
emitMethodAccess(node);
hasDoc = true;
-
+
emitThis(classDefinition, classDefinition.getPackageName());
}
}
@@ -231,9 +233,9 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
public void emitMethodAccess(IFunctionNode node)
{
- // do nothing
+ // do nothing
}
-
+
@Override
public void emitVarDoc(IVariableNode node, IDefinition def)
{
@@ -246,14 +248,15 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
IDefinition ndef = node.getDefinition();
if (emitter != null && emitter instanceof JSFlexJSEmitter)
{
- ICompilerProject project = ((JSFlexJSEmitter)emitter).project;
- if (project != null)
+ ICompilerProject project = ((JSFlexJSEmitter) emitter)
+ .getWalker().getProject();
+ ITypeDefinition type = ndef.resolveType(project);
+ if (type != null)
{
- packageName = ((ITypeDefinition)ndef.resolveType(project))
- .getPackageName();
+ packageName = ((ITypeDefinition) type).getPackageName();
}
}
-
+
emitTypeShort(node, packageName);
}
else
@@ -282,7 +285,8 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
@Override
public void emitImplements(ITypeDefinition definition, String packageName)
{
- emitJSDocLine(ASEmitterTokens.IMPLEMENTS, formatQualifiedName(definition.getQualifiedName()));
+ emitJSDocLine(ASEmitterTokens.IMPLEMENTS,
+ formatQualifiedName(definition.getQualifiedName()));
}
@Override
@@ -485,7 +489,8 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
if (result == "")
result = (pname != "" && !isBuiltinFunction && name.indexOf(".") < 0) ? pname
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + name : name;
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + name
+ : name;
result = result.replace(IASLanguageConstants.String,
IASLanguageConstants.String.toLowerCase());
@@ -501,17 +506,17 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
IClassNode cnode = (IClassNode) node
.getAncestorOfType(IClassNode.class);
-
+
// ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
if (cnode == null)
return null;
-
+
return cnode.getDefinition();
}
-
+
protected String formatQualifiedName(String name)
{
- return name;
+ return name;
}
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7308a81a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 530a381..77c9094 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -84,7 +84,8 @@ import org.apache.flex.compiler.utils.ASNodeUtils;
public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
{
protected List<String> propertyNames = new ArrayList<String>();
-
+
+ // TODO (mschmalle) Remove this (not used in JSFlexJSEmitter and JSGoogEmitter anymore)
public ICompilerProject project;
protected IJSGoogDocEmitter getDoc()
[23/42] git commit: [flex-falcon] [refs/heads/develop] - Revert
"Raise visibility to allow sub class to call from @override method"
Posted by ah...@apache.org.
Revert "Raise visibility to allow sub class to call from @override method"
This reverts commit 33961df15ff123b4af57883069b6124f3acbb02d.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/11fe07b8
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/11fe07b8
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/11fe07b8
Branch: refs/heads/develop
Commit: 11fe07b8d3c8b0c406b0ffd961cb10031ddcfe6d
Parents: 36722ba
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:47:38 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:54 2015 +0100
----------------------------------------------------------------------
.../flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/11fe07b8/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
index b8e513d..e402ac9 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
@@ -398,7 +398,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
emitJSDocLine(name.getToken(), "");
}
- protected void emitJSDocLine(String name)
+ private void emitJSDocLine(String name)
{
emitJSDocLine(name, "");
}
[05/42] git commit: [flex-falcon] [refs/heads/develop] -
Removed/Fixed all warnings in falcon compiler projects (18).
Posted by ah...@apache.org.
Removed/Fixed all warnings in falcon compiler projects (18).
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/85e25c15
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/85e25c15
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/85e25c15
Branch: refs/heads/develop
Commit: 85e25c1567aeae731ee799b82a6f6c34f0061a3c
Parents: a1dae47
Author: Michael Schmalle <ms...@apache.org>
Authored: Tue May 26 17:52:36 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:39:59 2015 +0100
----------------------------------------------------------------------
.../codegen/js/flexjs/TestFlexJSAccessorMembers.java | 2 --
.../apache/flex/compiler/clients/VF2JSToolGroup.java | 1 -
.../internal/codegen/js/flexjs/JSFlexJSEmitter.java | 5 +++--
.../internal/codegen/js/goog/JSGoogPublisher.java | 8 ++++++--
.../codegen/mxml/flexjs/MXMLFlexJSPublisher.java | 14 +++++++-------
.../internal/parsing/as/FlexJSASDocDelegate.java | 3 ++-
.../org/apache/flex/compiler/utils/ASNodeUtils.java | 1 -
.../compiler/utils/VF2JSClosureCompilerWrapper.java | 1 -
.../internal/codegen/databinding/WatcherAnalyzer.java | 1 -
.../internal/parsing/mxml/MXMLScopeBuilder.java | 10 ++++------
.../compiler/internal/tree/mxml/MXMLInstanceNode.java | 13 ++++++++++---
11 files changed, 32 insertions(+), 27 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
index 4d31db8..d1d35a5 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSAccessorMembers.java
@@ -23,8 +23,6 @@ import org.apache.flex.compiler.driver.IBackend;
import org.apache.flex.compiler.internal.codegen.js.goog.TestGoogAccessorMembers;
import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
import org.apache.flex.compiler.tree.as.IClassNode;
-import org.apache.flex.compiler.tree.as.IGetterNode;
-import org.apache.flex.compiler.tree.as.ISetterNode;
import org.junit.Test;
/**
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/clients/VF2JSToolGroup.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/VF2JSToolGroup.java b/compiler.jx/src/org/apache/flex/compiler/clients/VF2JSToolGroup.java
index 3c72962..07cb796 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/VF2JSToolGroup.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/VF2JSToolGroup.java
@@ -19,7 +19,6 @@
package org.apache.flex.compiler.clients;
-import org.apache.flex.compiler.internal.driver.mxml.vf2js.MXMLVF2JSBackend;
import org.apache.flex.tools.AbstractFlexToolGroup;
/**
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index d709929..ff44ab3 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -969,7 +969,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
//--------------------------------------------------------------------------
- @Override
+
+ @Override
protected void emitSuperCall(IASNode node, String type)
{
IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
@@ -1028,7 +1029,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
writeArguments = (anodes != null && anodes.length > 0);
}
- else if (fnode == null && node instanceof BinaryOperatorAssignmentNode)
+ else if (node instanceof IFunctionNode && node instanceof BinaryOperatorAssignmentNode)
{
BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogPublisher.java
index a37974e..bceda53 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogPublisher.java
@@ -266,8 +266,10 @@ public class JSGoogPublisher extends JSPublisher implements IJSPublisher
}
- protected void dumpJar(File jarFile, File outputDir) throws IOException {
- JarFile jar = new JarFile(jarFile);
+ protected void dumpJar(File jarFile, File outputDir) throws IOException {
+ // TODO (mschmalle) for some reason ide thinks this has not been closed
+ @SuppressWarnings("resource")
+ JarFile jar = new JarFile(jarFile);
for (Enumeration<JarEntry> jarEntries = jar.entries(); jarEntries.hasMoreElements();) {
JarEntry jarEntry = jarEntries.nextElement();
@@ -292,6 +294,8 @@ public class JSGoogPublisher extends JSPublisher implements IJSPublisher
is.close();
}
}
+
+ jar.close();
}
public class JSGoogErrorManager implements ErrorManager
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
index af11b15..5b1e436 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSPublisher.java
@@ -26,11 +26,8 @@ import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Collections;
import java.util.Comparator;
-import java.util.HashMap;
import java.util.List;
-import java.util.Scanner;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
@@ -136,8 +133,9 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements
@Override
public boolean publish(ProblemQuery problems) throws IOException
{
- boolean ok;
- boolean subsetGoog = true;
+ @SuppressWarnings("unused")
+ boolean ok;
+ //boolean subsetGoog = true;
final String intermediateDirPath = outputFolder.getPath();
final File intermediateDir = new File(intermediateDirPath);
@@ -208,7 +206,8 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements
}
// Dump FlexJS to the target directory.
- String flexJsLibDirPath;
+ @SuppressWarnings("unused")
+ String flexJsLibDirPath;
// Check if the "FlexJS/src/createjs_externals.js" is available in the classpath.
URL resource = Thread.currentThread().getContextClassLoader().getResource("FlexJS/src/createjs_externals.js");
if(resource != null) {
@@ -247,7 +246,8 @@ public class MXMLFlexJSPublisher extends JSGoogPublisher implements
+ "/library/closure/goog";
//final String depsSrcFilePath = intermediateDirPath
// + "/library/closure/goog/deps.js";
- final String depsTgtFilePath = intermediateDirPath + "/deps.js";
+ @SuppressWarnings("unused")
+ final String depsTgtFilePath = intermediateDirPath + "/deps.js";
final String projectIntermediateJSFilePath = intermediateDirPath
+ File.separator + outputFileName;
final String projectReleaseJSFilePath = releaseDirPath
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java b/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
index 58185f6..868e5d7 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/parsing/as/FlexJSASDocDelegate.java
@@ -75,7 +75,8 @@ public final class FlexJSASDocDelegate implements IASDocDelegate
private static final class ASDelegate implements IASParserASDocDelegate
{
- static final ASDelegate INSTANCE = new ASDelegate();
+ @SuppressWarnings("unused")
+ static final ASDelegate INSTANCE = new ASDelegate();
@Override
public void beforeVariable()
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/utils/ASNodeUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/utils/ASNodeUtils.java b/compiler.jx/src/org/apache/flex/compiler/utils/ASNodeUtils.java
index eb46626..b7c524e 100644
--- a/compiler.jx/src/org/apache/flex/compiler/utils/ASNodeUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/utils/ASNodeUtils.java
@@ -23,7 +23,6 @@ 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.IBinaryOperatorNode;
import org.apache.flex.compiler.tree.as.IBlockNode;
import org.apache.flex.compiler.tree.as.IConditionalNode;
import org.apache.flex.compiler.tree.as.IExpressionNode;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java b/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
index 9b188b9..9e66b9c 100644
--- a/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
+++ b/compiler.jx/src/org/apache/flex/compiler/utils/VF2JSClosureCompilerWrapper.java
@@ -31,7 +31,6 @@ 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.DiagnosticGroups;
import com.google.javascript.jscomp.SourceFile;
import com.google.javascript.jscomp.SourceMap;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler/src/org/apache/flex/compiler/internal/codegen/databinding/WatcherAnalyzer.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/codegen/databinding/WatcherAnalyzer.java b/compiler/src/org/apache/flex/compiler/internal/codegen/databinding/WatcherAnalyzer.java
index 35471f2..8dcdf8e 100644
--- a/compiler/src/org/apache/flex/compiler/internal/codegen/databinding/WatcherAnalyzer.java
+++ b/compiler/src/org/apache/flex/compiler/internal/codegen/databinding/WatcherAnalyzer.java
@@ -24,7 +24,6 @@ import java.util.Collections;
import java.util.List;
import org.apache.flex.compiler.constants.IASKeywordConstants;
-import org.apache.flex.compiler.constants.IASLanguageConstants;
import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.definitions.IConstantDefinition;
import org.apache.flex.compiler.definitions.IDefinition;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler/src/org/apache/flex/compiler/internal/parsing/mxml/MXMLScopeBuilder.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/parsing/mxml/MXMLScopeBuilder.java b/compiler/src/org/apache/flex/compiler/internal/parsing/mxml/MXMLScopeBuilder.java
index 1ed54dd..79e59c2 100644
--- a/compiler/src/org/apache/flex/compiler/internal/parsing/mxml/MXMLScopeBuilder.java
+++ b/compiler/src/org/apache/flex/compiler/internal/parsing/mxml/MXMLScopeBuilder.java
@@ -19,6 +19,8 @@
package org.apache.flex.compiler.internal.parsing.mxml;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_NAME;
+
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Reader;
@@ -29,7 +31,6 @@ import java.util.LinkedList;
import java.util.List;
import org.apache.commons.io.IOUtils;
-
import org.apache.flex.compiler.common.IFileSpecificationGetter;
import org.apache.flex.compiler.common.Multiname;
import org.apache.flex.compiler.definitions.IDefinition;
@@ -57,13 +58,12 @@ import org.apache.flex.compiler.internal.tree.mxml.MXMLNodeBase;
import org.apache.flex.compiler.internal.units.MXMLCompilationUnit;
import org.apache.flex.compiler.internal.workspaces.Workspace;
import org.apache.flex.compiler.mxml.IMXMLData;
-import org.apache.flex.compiler.mxml.IMXMLTagAttributeData;
import org.apache.flex.compiler.mxml.IMXMLLanguageConstants;
+import org.apache.flex.compiler.mxml.IMXMLNamespaceAttributeData;
+import org.apache.flex.compiler.mxml.IMXMLTagAttributeData;
import org.apache.flex.compiler.mxml.IMXMLTagData;
import org.apache.flex.compiler.mxml.IMXMLTextData;
import org.apache.flex.compiler.mxml.IMXMLTextData.TextType;
-import org.apache.flex.compiler.mxml.IMXMLTypeConstants;
-import org.apache.flex.compiler.mxml.IMXMLNamespaceAttributeData;
import org.apache.flex.compiler.mxml.IMXMLUnitData;
import org.apache.flex.compiler.problems.ICompilerProblem;
import org.apache.flex.compiler.problems.MXMLLibraryTagNotTheFirstChildProblem;
@@ -72,8 +72,6 @@ import org.apache.flex.compiler.problems.MXMLUnresolvedTagProblem;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
-import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.*;
-
/**
* This class analyzes the tags and attributes of an MXML file, as represented
* in an MXMLData object, and builds an ASFileScope which is the
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/85e25c15/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLInstanceNode.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLInstanceNode.java b/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLInstanceNode.java
index 203fdad..4d5072b 100644
--- a/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLInstanceNode.java
+++ b/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLInstanceNode.java
@@ -19,6 +19,16 @@
package org.apache.flex.compiler.internal.tree.mxml;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_EXCLUDE_FROM;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_ID;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_INCLUDE_IN;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_ITEM_CREATION_POLICY;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ATTRIBUTE_ITEM_DESTRUCTION_POLICY;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ITEM_CREATION_POLICY_DEFERRED;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ITEM_CREATION_POLICY_IMMEDIATE;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ITEM_DESTRUCTION_POLICY_AUTO;
+import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.ITEM_DESTRUCTION_POLICY_NEVER;
+
import org.apache.flex.compiler.common.DependencyType;
import org.apache.flex.compiler.constants.IASLanguageConstants;
import org.apache.flex.compiler.definitions.IClassDefinition;
@@ -30,7 +40,6 @@ import org.apache.flex.compiler.internal.scopes.ASScope;
import org.apache.flex.compiler.internal.tree.as.NodeBase;
import org.apache.flex.compiler.mxml.IMXMLTagAttributeData;
import org.apache.flex.compiler.mxml.IMXMLTagData;
-import org.apache.flex.compiler.mxml.IMXMLTypeConstants;
import org.apache.flex.compiler.problems.ICompilerProblem;
import org.apache.flex.compiler.problems.MXMLAttributeVersionProblem;
import org.apache.flex.compiler.problems.MXMLDuplicateIDProblem;
@@ -44,8 +53,6 @@ import org.apache.flex.compiler.tree.as.IASNode;
import org.apache.flex.compiler.tree.mxml.IMXMLClassReferenceNode;
import org.apache.flex.compiler.tree.mxml.IMXMLInstanceNode;
-import static org.apache.flex.compiler.mxml.IMXMLLanguageConstants.*;
-
class MXMLInstanceNode extends MXMLClassReferenceNodeBase implements IMXMLInstanceNode
{
protected static MXMLInstanceNode createInstanceNode(MXMLTreeBuilder builder,
[38/42] git commit: [flex-falcon] [refs/heads/develop] - Chain the
compilation in case -js-output-type=FLEXJS_DUAL on the command line. Note: At
the moment, -output needs to be passed to the command line too.
Posted by ah...@apache.org.
Chain the compilation in case -js-output-type=FLEXJS_DUAL on the command line.
Note: At the moment, -output needs to be passed to the command line too.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/55443ff9
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/55443ff9
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/55443ff9
Branch: refs/heads/develop
Commit: 55443ff9b6488f8f7a5e0293f49b97e753389ac4
Parents: 6675bd0
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Tue Jun 2 13:32:33 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:45 2015 +0100
----------------------------------------------------------------------
.../apache/flex/compiler/clients/MXMLJSC.java | 4 +-
.../apache/flex/compiler/clients/COMPJSC.java | 1 +
.../apache/flex/compiler/clients/MXMLJSC.java | 7 +-
.../src/org/apache/flex/utils/ArgumentUtil.java | 122 ++++++++++++++
.../apache/flex/utils/ConfigurationUtil.java | 42 -----
flex-compiler-oem/src/flex2/tools/Compc.java | 3 -
flex-compiler-oem/src/flex2/tools/MxmlJSC.java | 1 +
flex-compiler-oem/src/flex2/tools/Tool.java | 168 +++++++++++--------
8 files changed, 226 insertions(+), 122 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
----------------------------------------------------------------------
diff --git a/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
index b4f5718..1f8f070 100644
--- a/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -75,7 +75,7 @@ import org.apache.flex.swc.ISWC;
import org.apache.flex.swf.ISWF;
import org.apache.flex.swf.io.ISWFWriter;
import org.apache.flex.swf.types.Rect;
-import org.apache.flex.utils.ConfigurationUtil;
+import org.apache.flex.utils.ArgumentUtil;
import org.apache.flex.utils.FilenameNormalization;
import java.io.*;
@@ -145,7 +145,7 @@ public class MXMLJSC
int exitCode = -1;
try
{
- exitCode = _mainNoExit(ConfigurationUtil.fixArgs(args), problems);
+ exitCode = _mainNoExit(ArgumentUtil.fixArgs(args), problems);
}
catch (Exception e)
{
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
index 7c205a8..c288f33 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
@@ -115,6 +115,7 @@ public class COMPJSC extends MXMLJSC
break;
case FLEXJS:
+ case FLEXJS_DUAL:
backend = new MXMLFlexJSSWCBackend();
break;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
index 759da96..ae9e76a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -66,7 +66,7 @@ import org.apache.flex.compiler.targets.ITarget.TargetType;
import org.apache.flex.compiler.targets.ITargetSettings;
import org.apache.flex.compiler.units.ICompilationUnit;
import org.apache.flex.tools.FlexTool;
-import org.apache.flex.utils.ConfigurationUtil;
+import org.apache.flex.utils.ArgumentUtil;
import org.apache.flex.utils.FilenameNormalization;
import java.io.*;
@@ -87,7 +87,7 @@ public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider, Flex
*/
public enum JSOutputType
{
- AMD("amd"), FLEXJS("flexjs"), GOOG("goog"), VF2JS("vf2js");
+ AMD("amd"), FLEXJS("flexjs"), GOOG("goog"), VF2JS("vf2js"), FLEXJS_DUAL("flexjs_dual");
private String text;
@@ -191,6 +191,7 @@ public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider, Flex
backend = new AMDBackend();
break;
case FLEXJS:
+ case FLEXJS_DUAL:
backend = new MXMLFlexJSBackend();
break;
case GOOG:
@@ -243,7 +244,7 @@ public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider, Flex
int exitCode = -1;
try
{
- exitCode = _mainNoExit(ConfigurationUtil.fixArgs(args), problems);
+ exitCode = _mainNoExit(ArgumentUtil.fixArgs(args), problems);
}
catch (Exception e)
{
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/compiler/src/org/apache/flex/utils/ArgumentUtil.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/utils/ArgumentUtil.java b/compiler/src/org/apache/flex/utils/ArgumentUtil.java
new file mode 100644
index 0000000..8b5fe7a
--- /dev/null
+++ b/compiler/src/org/apache/flex/utils/ArgumentUtil.java
@@ -0,0 +1,122 @@
+/*
+ *
+ * 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.utils;
+
+import java.io.File;
+import java.lang.reflect.Array;
+
+public class ArgumentUtil {
+
+ // workaround for Falcon bug.
+ // Input files with relative paths confuse the algorithm that extracts the root class name.
+ public static String[] fixArgs(final String[] args) {
+ String[] newArgs = args;
+ if (args.length > 1) {
+ String targetPath = args[args.length - 1];
+ if (targetPath.startsWith(".")) {
+ targetPath = FileUtils.getTheRealPathBecauseCanonicalizeDoesNotFixCase(new File(targetPath));
+ newArgs = new String[args.length];
+ System.arraycopy(args, 0, newArgs, 0, args.length - 1);
+ newArgs[args.length - 1] = targetPath;
+ }
+ }
+ return newArgs;
+ }
+
+ public static String[] removeElement(String[] args, String element) {
+
+ int length = Array.getLength(args);
+ int index = -1;
+
+ for (int i = 0; i < length; i++) {
+ final String[] kvp = args[i].split("=");
+ if (element.equals(kvp[0])) {
+ index = i;
+ break;
+ }
+ }
+
+ if (index < 0 || index >= length) {
+ throw new IndexOutOfBoundsException("Index: " + index + ", Length: " + length);
+ }
+
+ String[] newArgs = new String[args.length - 1];
+ System.arraycopy(args, 0, newArgs, 0, index);
+ if (index < length - 1) {
+ System.arraycopy(args, index + 1, newArgs, index, length - index - 1);
+ }
+
+ return newArgs;
+ }
+
+ public static String getValue(String[] args, String element) {
+
+ boolean found = false;
+ String[] kvp = new String[0];
+
+ for (String s : args) {
+ kvp = s.split("=");
+
+ if (kvp[0].equals(element)) {
+ found = true;
+ break;
+ }
+ }
+
+ return found ? kvp[1] : null;
+ }
+
+ public static void setValue(String[] args, String element, String value) {
+ String[] kvp;
+
+ for (int i = 0, argsLength = args.length; i < argsLength; i++) {
+ kvp = args[i].split("=");
+
+ if (kvp[0].equals(element)) {
+ args[i] = kvp[0] + "=" + value;
+ break;
+ }
+ }
+ }
+
+ public static String[] addValueAt(String[] args, String elemrnt, String value, int index) {
+
+ int length = Array.getLength(args);
+
+ if (index < 0 || index >= length) {
+ throw new IndexOutOfBoundsException("Index: " + index + ", Length: " + length);
+ }
+
+ String[] newArgs = new String[args.length + 1];
+
+ for (int i = 0; i < newArgs.length; i++) {
+ if (i < index) {
+ newArgs[i] = args[i];
+ } else if (i == index) {
+ newArgs[i] = elemrnt + "=" + value;
+ } else {
+ newArgs[i] = args[i - 1];
+ }
+
+ }
+
+ return newArgs;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/utils/ConfigurationUtil.java b/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
deleted file mode 100644
index ea1bc10..0000000
--- a/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *
- * 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.utils;
-
-import java.io.File;
-
-public class ConfigurationUtil {
-
- // workaround for Falcon bug.
- // Input files with relative paths confuse the algorithm that extracts the root class name.
- public static String[] fixArgs(final String[] args) {
- String[] newArgs = args;
- if (args.length > 1) {
- String targetPath = args[args.length - 1];
- if (targetPath.startsWith(".")) {
- targetPath = FileUtils.getTheRealPathBecauseCanonicalizeDoesNotFixCase(new File(targetPath));
- newArgs = new String[args.length];
- for (int i = 0; i < args.length - 1; ++i)
- newArgs[i] = args[i];
- newArgs[args.length - 1] = targetPath;
- }
- }
- return newArgs;
- }
-}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/flex-compiler-oem/src/flex2/tools/Compc.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Compc.java b/flex-compiler-oem/src/flex2/tools/Compc.java
index 38848fa..6580e9a 100644
--- a/flex-compiler-oem/src/flex2/tools/Compc.java
+++ b/flex-compiler-oem/src/flex2/tools/Compc.java
@@ -27,9 +27,6 @@ import java.lang.reflect.InvocationTargetException;
* Entry-point for compc, the command-line tool for compiling components.
*/
public class Compc extends Tool {
-
- public static final String FILE_SPECS = "include-classes";
-
/**
* The entry-point for Mxmlc.
* Note that if you change anything in this method, make sure to check Compc, Shell, and
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
index f71633a..9ff8381 100644
--- a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
+++ b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
@@ -70,6 +70,7 @@ public class MxmlJSC implements ProblemQueryProvider {
backend = new AMDBackend();
break;
case FLEXJS:
+ case FLEXJS_DUAL:
backend = new MXMLFlexJSBackend();
break;
case GOOG:
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55443ff9/flex-compiler-oem/src/flex2/tools/Tool.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Tool.java b/flex-compiler-oem/src/flex2/tools/Tool.java
index b61fa43..a41c1f4 100644
--- a/flex-compiler-oem/src/flex2/tools/Tool.java
+++ b/flex-compiler-oem/src/flex2/tools/Tool.java
@@ -26,13 +26,17 @@ import flex2.compiler.util.CompilerMessage;
import flex2.compiler.util.CompilerMessage.CompilerError;
import flex2.compiler.util.ThreadLocalToolkit;
import flex2.tools.oem.Message;
-import org.apache.flex.compiler.clients.problems.ProblemQueryProvider;
+import org.apache.flex.compiler.clients.COMPC;
import org.apache.flex.compiler.clients.MXMLC;
+import org.apache.flex.compiler.clients.MXMLJSC.JSOutputType;
import org.apache.flex.compiler.clients.problems.ProblemQuery;
+import org.apache.flex.compiler.clients.problems.ProblemQueryProvider;
import org.apache.flex.compiler.problems.CompilerProblemSeverity;
import org.apache.flex.compiler.problems.ICompilerProblem;
import org.apache.flex.compiler.problems.annotations.DefaultSeverity;
+import org.apache.flex.utils.ArgumentUtil;
+import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.lang.annotation.Annotation;
@@ -42,83 +46,117 @@ import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
+import static org.apache.flex.compiler.clients.MXMLJSC.JSOutputType.FLEXJS_DUAL;
+
/**
* Common base class for most flex tools.
*/
-public class Tool
-{
+public class Tool {
protected static Class<? extends MXMLC> COMPILER;
protected static Class<? extends MxmlJSC> JS_COMPILER;
protected static int compile(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
int exitCode;
- if (hasJsOutputType(args)) {
+ final JSOutputType jsOutputType = JSOutputType.fromString(ArgumentUtil.getValue(args, "-js-output-type"));
+
+ if (jsOutputType != null) {
+ ArgumentBag bag = preparePhase1(new ArgumentBag(args));
+
MxmlJSC mxmlJSC = JS_COMPILER.newInstance();
- exitCode = mxmlJSC.execute(args);
- processProblemReport(mxmlJSC);
+ exitCode = mxmlJSC.execute(bag.args);
+
+ if (!mxmlJSC.getProblemQuery().hasErrors()) {
+ if (jsOutputType.equals(FLEXJS_DUAL)) {
+ preparePhase2(bag);
+ exitCode = flexCompile(bag.args);
+ }
+ } else {
+ processProblemReport(mxmlJSC);
+ }
} else {
- MXMLC mxmlc = COMPILER.newInstance();
- exitCode = mxmlc.execute(args);
- processProblemReport(new CompilerRequestableProblems(mxmlc));
+ exitCode = flexCompile(args);
}
return exitCode;
}
- protected static boolean hasJsOutputType(String[] args) {
- boolean found = false;
+ protected static class ArgumentBag {
+ public String[] args;
- for (String s : args) {
- String[] kvp = s.split("=");
+ public String oldOutputPath;
+ public String newOutputPath;
- if (s.contains("-js-output-type")) {
- found = true;
- break;
+ public ArgumentBag(String[] args) {
+ this.args = args;
+ }
+ }
+
+ protected static ArgumentBag preparePhase1(ArgumentBag bag) {
+ bag.oldOutputPath = ArgumentUtil.getValue(bag.args, "-output");
+
+ if (bag.oldOutputPath != null) {
+ final int lastIndexOf = Math.max(bag.oldOutputPath.lastIndexOf("/"), bag.oldOutputPath.lastIndexOf("\\"));
+
+ if (lastIndexOf > -1) {
+ bag.newOutputPath = bag.oldOutputPath.substring(0, lastIndexOf) + File.separator + "js" + File.separator + "out";
+ ArgumentUtil.setValue(bag.args, "-output", bag.newOutputPath);
}
}
- return found;
+ return bag;
}
- public static Map<String, String> getLicenseMapFromFile(String fileName) throws ConfigurationException
- {
+ protected static ArgumentBag preparePhase2(ArgumentBag bag) {
+ bag.args = ArgumentUtil.removeElement(bag.args, "-js-output-type");
+
+ if (bag.oldOutputPath != null) {
+ ArgumentUtil.setValue(bag.args, "-output", bag.oldOutputPath);
+ }
+
+ if (COMPILER.getName().equals(COMPC.class.getName())) {
+ bag.args = ArgumentUtil.addValueAt(bag.args, "-include-file", "js" + File.separator + "out" + File.separator + "*," + bag.newOutputPath, bag.args.length - 1);
+ }
+
+ return bag;
+ }
+
+ protected static int flexCompile(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
+ int exitCode;
+
+ MXMLC mxmlc = COMPILER.newInstance();
+ exitCode = mxmlc.execute(args);
+ processProblemReport(new CompilerRequestableProblems(mxmlc));
+
+ return exitCode;
+ }
+
+ public static Map<String, String> getLicenseMapFromFile(String fileName) throws ConfigurationException {
Map<String, String> result = null;
FileInputStream in = null;
- try
- {
+ try {
in = new FileInputStream(fileName);
Properties properties = new Properties();
properties.load(in);
Enumeration enumeration = properties.propertyNames();
- if ( enumeration.hasMoreElements() )
- {
+ if (enumeration.hasMoreElements()) {
result = new HashMap<String, String>();
- while ( enumeration.hasMoreElements() )
- {
+ while (enumeration.hasMoreElements()) {
String propertyName = (String) enumeration.nextElement();
result.put(propertyName, properties.getProperty(propertyName));
}
}
- }
- catch (IOException ioException)
- {
- LocalizationManager l10n = ThreadLocalToolkit.getLocalizationManager();
+ } catch (IOException ioException) {
+ LocalizationManager l10n = ThreadLocalToolkit.getLocalizationManager();
throw new ConfigurationException(l10n.getLocalizedTextString(new FailedToLoadLicenseFile(fileName)));
- }
- finally
- {
- if (in != null)
- {
- try
- {
+ } finally {
+ if (in != null) {
+ try {
in.close();
- }
- catch (IOException ioe)
- {
+ } catch (IOException ioe) {
}
}
}
@@ -126,28 +164,24 @@ public class Tool
return result;
}
- public static class FailedToLoadLicenseFile extends CompilerError
- {
- private static final long serialVersionUID = -2980033917773108328L;
-
+ public static class FailedToLoadLicenseFile extends CompilerError {
+ private static final long serialVersionUID = -2980033917773108328L;
+
public String fileName;
- public FailedToLoadLicenseFile(String fileName)
- {
- super();
- this.fileName = fileName;
- }
- }
-
- public static void processProblemReport(ProblemQueryProvider requestableProblems)
- {
- for (ICompilerProblem problem : requestableProblems.getProblemQuery().getProblems())
- {
+ public FailedToLoadLicenseFile(String fileName) {
+ super();
+ this.fileName = fileName;
+ }
+ }
+
+ public static void processProblemReport(ProblemQueryProvider requestableProblems) {
+ for (ICompilerProblem problem : requestableProblems.getProblemQuery().getProblems()) {
Class aClass = problem.getClass();
Annotation[] annotations = aClass.getAnnotations();
- for(Annotation annotation : annotations){
- if(annotation instanceof DefaultSeverity){
+ for (Annotation annotation : annotations) {
+ if (annotation instanceof DefaultSeverity) {
DefaultSeverity myAnnotation = (DefaultSeverity) annotation;
CompilerProblemSeverity cps = myAnnotation.value();
String level;
@@ -161,11 +195,9 @@ public class Tool
problem.getSourcePath(),
problem.getLine() + 1,
problem.getColumn());
- try
- {
+ try {
String errText = (String) aClass.getField("DESCRIPTION").get(aClass);
- while (errText.contains("${"))
- {
+ while (errText.contains("${")) {
int start = errText.indexOf("${");
int end = errText.indexOf("}", start);
String token = errText.substring(start + 2, end);
@@ -176,24 +208,16 @@ public class Tool
msg.setMessage(errText);
logMessage(msg);
- }
- catch (IllegalArgumentException e)
- {
+ } catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
- }
- catch (SecurityException e)
- {
+ } catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
- }
- catch (IllegalAccessException e)
- {
+ } catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
- }
- catch (NoSuchFieldException e)
- {
+ } catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
[15/42] git commit: [flex-falcon] [refs/heads/develop] - - Moved
emitBindableVarDefineProperty() to Bindable emitter. - Refactored foreach
into emitter.
Posted by ah...@apache.org.
- Moved emitBindableVarDefineProperty() to Bindable emitter.
- Refactored foreach into emitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/ad488d8a
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/ad488d8a
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/ad488d8a
Branch: refs/heads/develop
Commit: ad488d8a75ebc426b66527d37185b746c521c8fa
Parents: 32e1dbf
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 12:00:44 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:26 2015 +0100
----------------------------------------------------------------------
.../internal/codegen/js/JSSessionModel.java | 12 +++
.../codegen/js/flexjs/JSFlexJSEmitter.java | 105 +------------------
.../internal/codegen/js/jx/BindableEmitter.java | 58 +++++++++-
.../internal/codegen/js/jx/ForEachEmitter.java | 88 ++++++++++++++++
4 files changed, 162 insertions(+), 101 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad488d8a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
index ba8df11..48079fa 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -50,6 +50,8 @@ public class JSSessionModel
private ArrayList<String> bindableVars = new ArrayList<String>();
+ private int foreachLoopCount = 0;
+
public IClassDefinition getCurrentClass()
{
return currentClass;
@@ -80,4 +82,14 @@ public class JSSessionModel
return bindableVars;
}
+ public final void incForeachLoopCount()
+ {
+ foreachLoopCount++;
+ }
+
+ public String getCurrentForeachName()
+ {
+ return "foreachiter" + Integer.toString(foreachLoopCount);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad488d8a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 5562e31..f86ca5a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -26,7 +26,6 @@ import org.apache.flex.compiler.codegen.IDocEmitter;
import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
import org.apache.flex.compiler.common.ASModifier;
import org.apache.flex.compiler.common.IMetaInfo;
-import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.definitions.IFunctionDefinition;
import org.apache.flex.compiler.definitions.IPackageDefinition;
@@ -38,6 +37,7 @@ import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.ForEachEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.MemberAccessEmitter;
@@ -65,11 +65,10 @@ import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
import org.apache.flex.compiler.tree.as.IParameterNode;
import org.apache.flex.compiler.tree.as.ISetterNode;
import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
-import org.apache.flex.compiler.tree.as.IVariableExpressionNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
/**
- * Concrete implementation of the 'goog' JavaScript production.
+ * Concrete implementation of the 'FlexJS' JavaScript production.
*
* @author Michael Schmalle
* @author Erik de Bruin
@@ -77,8 +76,6 @@ import org.apache.flex.compiler.tree.as.IVariableNode;
public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
{
- private int foreachLoopCounter = 0;
-
private JSFlexJSDocEmitter docEmitter = null;
private PackageHeaderEmitter packageHeaderEmitter;
@@ -88,6 +85,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
private FieldEmitter fieldEmitter;
private FunctionCallEmitter functionCallEmitter;
private SuperCallEmitter superCallEmitter;
+ private ForEachEmitter forEachEmitter;
private MemberAccessEmitter memberAccessEmitter;
private BinaryOperatorEmitter binaryOperatorEmitter;
private IdentifierEmitter identifierEmitter;
@@ -116,6 +114,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
fieldEmitter = new FieldEmitter(this);
functionCallEmitter = new FunctionCallEmitter(this);
superCallEmitter = new SuperCallEmitter(this);
+ forEachEmitter = new ForEachEmitter(this);
memberAccessEmitter = new MemberAccessEmitter(this);
binaryOperatorEmitter = new BinaryOperatorEmitter(this);
identifierEmitter = new IdentifierEmitter(this);
@@ -154,58 +153,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
fieldEmitter.emit(node);
}
- public void emitBindableVarDefineProperty(String name, IClassDefinition cdef)
- {
- // 'PropName': {
- writeNewline("/** @expose */");
- writeNewline(name + ASEmitterTokens.COLON.getToken()
- + ASEmitterTokens.SPACE.getToken()
- + ASEmitterTokens.BLOCK_OPEN.getToken());
- indentPush();
- writeNewline("/** @this {"
- + formatQualifiedName(cdef.getQualifiedName()) + "} */");
- writeNewline(ASEmitterTokens.GET.getToken()
- + ASEmitterTokens.COLON.getToken()
- + ASEmitterTokens.SPACE.getToken()
- + ASEmitterTokens.FUNCTION.getToken()
- + ASEmitterTokens.PAREN_OPEN.getToken()
- + ASEmitterTokens.PAREN_CLOSE.getToken()
- + ASEmitterTokens.SPACE.getToken()
- + ASEmitterTokens.BLOCK_OPEN.getToken());
- writeNewline(ASEmitterTokens.RETURN.getToken()
- + ASEmitterTokens.SPACE.getToken()
- + ASEmitterTokens.THIS.getToken()
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
- + ASEmitterTokens.SEMICOLON.getToken());
- indentPop();
- writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken()
- + ASEmitterTokens.COMMA.getToken());
- writeNewline();
- writeNewline("/** @this {"
- + formatQualifiedName(cdef.getQualifiedName()) + "} */");
- writeNewline(ASEmitterTokens.SET.getToken()
- + ASEmitterTokens.COLON.getToken()
- + ASEmitterTokens.SPACE.getToken()
- + ASEmitterTokens.FUNCTION.getToken()
- + ASEmitterTokens.PAREN_OPEN.getToken() + "value"
- + ASEmitterTokens.PAREN_CLOSE.getToken()
- + ASEmitterTokens.SPACE.getToken()
- + ASEmitterTokens.BLOCK_OPEN.getToken());
- writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_) {");
- writeNewline(" var oldValue = " + ASEmitterTokens.THIS.getToken()
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
- + ASEmitterTokens.SEMICOLON.getToken());
- writeNewline(" " + ASEmitterTokens.THIS.getToken()
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + name
- + "_ = value;");
- writeNewline(" this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
- writeNewline(" this, \"" + name + "\", oldValue, value));");
- writeNewline("}");
- write(ASEmitterTokens.BLOCK_CLOSE.getToken());
- write(ASEmitterTokens.BLOCK_CLOSE.getToken());
- }
-
@Override
public void emitAccessors(IAccessorNode node)
{
@@ -500,49 +447,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitForEachLoop(IForLoopNode node)
{
- IBinaryOperatorNode bnode = (IBinaryOperatorNode) node
- .getConditionalsContainerNode().getChild(0);
- IASNode childNode = bnode.getChild(0);
-
- String iterName = "foreachiter"
- + new Integer(foreachLoopCounter).toString();
- foreachLoopCounter++;
-
- write(ASEmitterTokens.FOR);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.VAR);
- write(ASEmitterTokens.SPACE);
- write(iterName);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.IN);
- write(ASEmitterTokens.SPACE);
- getWalker().walk(bnode.getChild(1));
- writeToken(ASEmitterTokens.PAREN_CLOSE);
- writeNewline();
- write(ASEmitterTokens.BLOCK_OPEN);
- writeNewline();
- if (childNode instanceof IVariableExpressionNode)
- {
- write(ASEmitterTokens.VAR);
- write(ASEmitterTokens.SPACE);
- write(((IVariableNode) childNode.getChild(0)).getName());
- }
- else
- write(((IIdentifierNode) childNode).getName());
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.SPACE);
- getWalker().walk(bnode.getChild(1));
- write(ASEmitterTokens.SQUARE_OPEN);
- write(iterName);
- write(ASEmitterTokens.SQUARE_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- writeNewline();
- getWalker().walk(node.getStatementContentsNode());
- write(ASEmitterTokens.BLOCK_CLOSE);
- writeNewline();
-
+ forEachEmitter.emit(node);
}
@Override
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad488d8a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
index 310bf6b..0ec3fd2 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
@@ -66,11 +66,67 @@ public class BindableEmitter extends JSSubEmitter implements
else
write(ASEmitterTokens.COMMA);
- fjs.emitBindableVarDefineProperty(varName, definition);
+ emitBindableVarDefineProperty(varName, definition);
}
writeNewline(ASEmitterTokens.BLOCK_CLOSE);
write(ASEmitterTokens.PAREN_CLOSE);
write(ASEmitterTokens.SEMICOLON);
}
}
+
+ private void emitBindableVarDefineProperty(String name,
+ IClassDefinition cdef)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ // 'PropName': {
+ writeNewline("/** @expose */");
+ writeNewline(name + ASEmitterTokens.COLON.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.BLOCK_OPEN.getToken());
+ indentPush();
+ writeNewline("/** @this {"
+ + fjs.formatQualifiedName(cdef.getQualifiedName()) + "} */");
+ writeNewline(ASEmitterTokens.GET.getToken()
+ + ASEmitterTokens.COLON.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.FUNCTION.getToken()
+ + ASEmitterTokens.PAREN_OPEN.getToken()
+ + ASEmitterTokens.PAREN_CLOSE.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.BLOCK_OPEN.getToken());
+ writeNewline(ASEmitterTokens.RETURN.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
+ + ASEmitterTokens.SEMICOLON.getToken());
+ indentPop();
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken()
+ + ASEmitterTokens.COMMA.getToken());
+ writeNewline();
+ writeNewline("/** @this {"
+ + fjs.formatQualifiedName(cdef.getQualifiedName()) + "} */");
+ writeNewline(ASEmitterTokens.SET.getToken()
+ + ASEmitterTokens.COLON.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.FUNCTION.getToken()
+ + ASEmitterTokens.PAREN_OPEN.getToken() + "value"
+ + ASEmitterTokens.PAREN_CLOSE.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.BLOCK_OPEN.getToken());
+ writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_) {");
+ writeNewline(" var oldValue = " + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
+ + ASEmitterTokens.SEMICOLON.getToken());
+ writeNewline(" " + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + name
+ + "_ = value;");
+ writeNewline(" this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
+ writeNewline(" this, \"" + name + "\", oldValue, value));");
+ writeNewline("}");
+ write(ASEmitterTokens.BLOCK_CLOSE.getToken());
+ write(ASEmitterTokens.BLOCK_CLOSE.getToken());
+ }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ad488d8a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
new file mode 100644
index 0000000..1b33061
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ForEachEmitter.java
@@ -0,0 +1,88 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IBinaryOperatorNode;
+import org.apache.flex.compiler.tree.as.IForLoopNode;
+import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.tree.as.IVariableExpressionNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+
+public class ForEachEmitter extends JSSubEmitter implements
+ ISubEmitter<IForLoopNode>
+{
+
+ public ForEachEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IForLoopNode node)
+ {
+ IBinaryOperatorNode bnode = (IBinaryOperatorNode) node
+ .getConditionalsContainerNode().getChild(0);
+ IASNode childNode = bnode.getChild(0);
+
+ final String iterName = getModel().getCurrentForeachName();
+ getModel().incForeachLoopCount();
+
+ write(ASEmitterTokens.FOR);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.VAR);
+ write(ASEmitterTokens.SPACE);
+ write(iterName);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.IN);
+ write(ASEmitterTokens.SPACE);
+ getWalker().walk(bnode.getChild(1));
+ writeToken(ASEmitterTokens.PAREN_CLOSE);
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_OPEN);
+ writeNewline();
+ if (childNode instanceof IVariableExpressionNode)
+ {
+ write(ASEmitterTokens.VAR);
+ write(ASEmitterTokens.SPACE);
+ write(((IVariableNode) childNode.getChild(0)).getName());
+ }
+ else
+ write(((IIdentifierNode) childNode).getName());
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.SPACE);
+ getWalker().walk(bnode.getChild(1));
+ write(ASEmitterTokens.SQUARE_OPEN);
+ write(iterName);
+ write(ASEmitterTokens.SQUARE_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ writeNewline();
+ getWalker().walk(node.getStatementContentsNode());
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ writeNewline();
+ }
+
+}
[09/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
Class emitting into shared jx package for future use. - Refactored Bindable
class level emittion;
- Refactored GetSet class level emition - Created a shared model for each
emitter sess
Posted by ah...@apache.org.
- Refactored Class emitting into shared jx package for future use.
- Refactored Bindable class level emittion;
- Refactored GetSet class level emition
- Created a shared model for each emitter session.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/ab1c421d
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/ab1c421d
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/ab1c421d
Branch: refs/heads/develop
Commit: ab1c421dcd7b60dcef6f118db2379bb5f4bfe8e5
Parents: dca1ad1
Author: Michael Schmalle <ms...@apache.org>
Authored: Sat May 30 17:40:46 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:06 2015 +0100
----------------------------------------------------------------------
.../js/flexjs/TestFlexJSExpressions.java | 18 +-
.../mxml/flexjs/TestFlexJSMXMLScript.java | 2 +-
.../flex/compiler/codegen/ISubEmitter.java | 45 +
.../flex/compiler/codegen/js/IJSEmitter.java | 3 +-
.../compiler/internal/codegen/as/ASEmitter.java | 2 +-
.../compiler/internal/codegen/js/JSEmitter.java | 9 +
.../internal/codegen/js/JSSessionModel.java | 79 +
.../internal/codegen/js/JSSubEmitter.java | 99 ++
.../internal/codegen/js/amd/JSAMDEmitter.java | 2 +
.../codegen/js/flexjs/JSFlexJSDocEmitter.java | 134 +-
.../codegen/js/flexjs/JSFlexJSEmitter.java | 1524 +++++++-----------
.../internal/codegen/js/goog/JSGoogEmitter.java | 33 +-
.../internal/codegen/js/jx/BindableEmitter.java | 76 +
.../internal/codegen/js/jx/ClassEmitter.java | 156 ++
.../internal/codegen/js/jx/GetSetEmitter.java | 195 +++
.../codegen/js/utils/DocEmitterUtils.java | 49 +
.../internal/codegen/js/utils/EmitterUtils.java | 121 ++
.../codegen/js/vf2js/JSVF2JSEmitter.java | 10 +-
.../codegen/mxml/flexjs/MXMLFlexJSEmitter.java | 14 +-
.../codegen/mxml/vf2js/MXMLVF2JSEmitter.java | 4 +-
20 files changed, 1573 insertions(+), 1002 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
index 9691b70..99fc70f 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/flexjs/TestFlexJSExpressions.java
@@ -19,7 +19,7 @@
package org.apache.flex.compiler.internal.codegen.js.flexjs;
-import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.IClassDefinition;
import org.apache.flex.compiler.driver.IBackend;
import org.apache.flex.compiler.internal.codegen.js.goog.TestGoogExpressions;
import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
@@ -164,9 +164,9 @@ public class TestFlexJSExpressions extends TestGoogExpressions
IBinaryOperatorNode bnode = (IBinaryOperatorNode) findFirstDescendantOfType(
fnode, IBinaryOperatorNode.class);
((NodeBase)fnode).setParent(null);
- IDefinition def = classnode.getDefinition();
+ IClassDefinition def = classnode.getDefinition();
- ((JSFlexJSEmitter)asEmitter).thisClass = def;
+ ((JSFlexJSEmitter)asEmitter).getModel().setCurrentClass(def);
asBlockWalker.visitBinaryOperator(bnode);
assertOut("this.b = 1");
}
@@ -188,9 +188,9 @@ public class TestFlexJSExpressions extends TestGoogExpressions
IBinaryOperatorNode bnode = (IBinaryOperatorNode) findFirstDescendantOfType(
fnode, IBinaryOperatorNode.class);
((NodeBase)fnode).setParent(null);
- IDefinition def = classnode.getDefinition();
+ IClassDefinition def = classnode.getDefinition();
- ((JSFlexJSEmitter)asEmitter).thisClass = def;
+ ((JSFlexJSEmitter)asEmitter).getModel().setCurrentClass(def);
asBlockWalker.visitBinaryOperator(bnode);
assertOut("this.b = 1");
}
@@ -478,9 +478,9 @@ public class TestFlexJSExpressions extends TestGoogExpressions
IBinaryOperatorNode bnode = (IBinaryOperatorNode) findFirstDescendantOfType(
fnode, IBinaryOperatorNode.class);
((NodeBase)fnode).setParent(null);
- IDefinition def = classnode.getDefinition();
+ IClassDefinition def = classnode.getDefinition();
- ((JSFlexJSEmitter)asEmitter).thisClass = def;
+ ((JSFlexJSEmitter)asEmitter).getModel().setCurrentClass(def);
asBlockWalker.visitBinaryOperator(bnode);
assertOut("foo_bar_B.d.b = 1");
}
@@ -538,9 +538,9 @@ public class TestFlexJSExpressions extends TestGoogExpressions
IBinaryOperatorNode bnode = (IBinaryOperatorNode) findFirstDescendantOfType(
fnode, IBinaryOperatorNode.class);
((NodeBase)fnode).setParent(null);
- IDefinition def = classnode.getDefinition();
+ IClassDefinition def = classnode.getDefinition();
- ((JSFlexJSEmitter)asEmitter).thisClass = def;
+ ((JSFlexJSEmitter)asEmitter).getModel().setCurrentClass(def);
asBlockWalker.visitBinaryOperator(bnode);
assertOut("org_apache_flex_utils_Language.as(this.model, foo_bar_E, true).labelText = null");
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLScript.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLScript.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLScript.java
index 8984cd4..6d79603 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLScript.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/TestFlexJSMXMLScript.java
@@ -40,7 +40,7 @@ public class TestFlexJSMXMLScript extends FlexJSTestBase
IMXMLDocumentNode dnode = (IMXMLDocumentNode) node
.getAncestorOfType(IMXMLDocumentNode.class);
- ((JSFlexJSEmitter)(mxmlBlockWalker.getASEmitter())).thisClass = dnode.getDefinition();
+ ((JSFlexJSEmitter)(mxmlBlockWalker.getASEmitter())).getModel().setCurrentClass(dnode.getDefinition());
mxmlBlockWalker.visitDocument(dnode);
String appName = dnode.getQualifiedName();
String outTemplate = "/**\n * AppName\n *\n * @fileoverview\n *\n * @suppress {checkTypes}\n */\n\ngoog.provide('AppName');\n\ngoog.require('org_apache_flex_core_Application');\n\n\n\n\n/**\n * @constructor\n * @extends {org_apache_flex_core_Application}\n */\nAppName = function() {\n AppName.base(this, 'constructor');\n \n /**\n * @private\n * @type {Array}\n */\n this.mxmldd;\n \n /**\n * @private\n * @type {Array}\n */\n this.mxmldp;\n};\ngoog.inherits(AppName, org_apache_flex_core_Application);\n\n\n/**\n * Metadata\n *\n * @type {Object.<string, Array.<Object>>}\n */\nAppName.prototype.FLEXJS_CLASS_INFO = { names: [{ name: 'AppName', qName: 'AppName' }] };\n\n\n/**\n * @expose\n * @override\n */\nAppName.prototype.addedToParent = function() {\n AppName.base(this, 'addedToParent');\n};\n\n\n";
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/codegen/ISubEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/ISubEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/ISubEmitter.java
new file mode 100644
index 0000000..1431c4b
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/codegen/ISubEmitter.java
@@ -0,0 +1,45 @@
+/*
+ *
+ * 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.codegen;
+
+import org.apache.flex.compiler.tree.as.IASNode;
+
+/**
+ * The {@link IEmitter} emitter can use composition for it's more
+ * complicated production sequences with member, dynamic, binary expressions and
+ * identifiers etc.
+ *
+ * @author Michael Schmalle
+ */
+public interface ISubEmitter<T>
+{
+ /**
+ * The main emitter will call this method of the sub emitter with the
+ * correct generic type implemented.
+ * <p>
+ * The main idea here is abstraction. Producing JavaScript can get
+ * complicated, the best way to avoid bugs is to avoid as much state and
+ * interdependence between emit() calls of the main emitter.
+ *
+ * @param node The current {@link IASNode} being emitted by the
+ * {@link IEmitter}.
+ */
+ void emit(T node);
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
index 09bb858..01444e7 100644
--- a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
@@ -22,6 +22,7 @@ package org.apache.flex.compiler.codegen.js;
import java.io.Writer;
import org.apache.flex.compiler.codegen.as.IASEmitter;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
import org.apache.flex.compiler.visitor.IASNodeStrategy;
/**
@@ -32,5 +33,5 @@ import org.apache.flex.compiler.visitor.IASNodeStrategy;
*/
public interface IJSEmitter extends IASEmitter
{
-
+ JSSessionModel getModel();
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index b7db495..423571b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -717,7 +717,7 @@ public class ASEmitter implements IASEmitter, IEmitter
getWalker().walk(node.getNameExpressionNode());
}
- protected void emitParameters(IParameterNode[] nodes)
+ public void emitParameters(IParameterNode[] nodes)
{
write(ASEmitterTokens.PAREN_OPEN);
int len = nodes.length;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
index 6fb5576..4eb6ccb 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
@@ -33,10 +33,19 @@ import org.apache.flex.compiler.tree.as.IFunctionObjectNode;
*/
public class JSEmitter extends ASEmitter implements IJSEmitter
{
+ private JSSessionModel model;
+
+ @Override
+ public JSSessionModel getModel()
+ {
+ return model;
+ }
public JSEmitter(FilterWriter out)
{
super(out);
+
+ model = new JSSessionModel();
}
@Override
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
new file mode 100644
index 0000000..97cc52b
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -0,0 +1,79 @@
+/*
+ *
+ * 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.js;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.tree.as.IGetterNode;
+import org.apache.flex.compiler.tree.as.ISetterNode;
+
+/**
+ * @author Michael Schmalle
+ */
+public class JSSessionModel
+{
+ private IClassDefinition currentClass;
+
+ public static class PropertyNodes
+ {
+ public IGetterNode getter;
+ public ISetterNode setter;
+ }
+
+ private HashMap<String, PropertyNodes> propertyMap = new HashMap<String, PropertyNodes>();
+
+ private HashMap<String, PropertyNodes> staticPropertyMap = new HashMap<String, PropertyNodes>();
+
+ private ArrayList<String> bindableVars = new ArrayList<String>();
+
+ public IClassDefinition getCurrentClass()
+ {
+ return currentClass;
+ }
+
+ public void setCurrentClass(IClassDefinition currentClass)
+ {
+ this.currentClass = currentClass;
+ }
+
+ public HashMap<String, PropertyNodes> getPropertyMap()
+ {
+ return propertyMap;
+ }
+
+ public HashMap<String, PropertyNodes> getStaticPropertyMap()
+ {
+ return staticPropertyMap;
+ }
+
+ public boolean hasBindableVars()
+ {
+ return bindableVars.size() > 0;
+ }
+
+ public List<String> getBindableVars()
+ {
+ return bindableVars;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
new file mode 100644
index 0000000..00ed207
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
@@ -0,0 +1,99 @@
+/*
+ *
+ * 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.js;
+
+import org.apache.flex.compiler.codegen.IEmitterTokens;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.projects.ICompilerProject;
+
+public class JSSubEmitter
+{
+ private IJSEmitter emitter;
+
+ protected IJSEmitter getEmitter()
+ {
+ return emitter;
+ }
+
+ protected ICompilerProject getProject()
+ {
+ return emitter.getWalker().getProject();
+ }
+
+ protected JSSessionModel getModel()
+ {
+ return emitter.getModel();
+ }
+
+ public JSSubEmitter(IJSEmitter emitter)
+ {
+ this.emitter = emitter;
+ }
+
+ protected void write(IEmitterTokens value)
+ {
+ emitter.write(value);
+ }
+
+ protected void write(String value)
+ {
+ emitter.write(value);
+ }
+
+ protected void writeToken(IEmitterTokens value)
+ {
+ emitter.writeToken(value);
+ }
+
+ protected void writeToken(String value)
+ {
+ emitter.writeToken(value);
+ }
+
+ protected void writeNewline()
+ {
+ emitter.writeNewline();
+ }
+
+ protected void writeNewline(IEmitterTokens value)
+ {
+ emitter.writeNewline(value);
+ }
+
+ protected void writeNewline(String value)
+ {
+ emitter.writeNewline(value);
+ }
+
+ protected void writeNewline(String value, boolean pushIndent)
+ {
+ emitter.writeNewline(value, pushIndent);
+ }
+
+ protected void indentPush()
+ {
+ emitter.indentPush();
+ }
+
+ protected void indentPop()
+ {
+ emitter.indentPop();
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
index bc45058..8dcbb2c 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
@@ -251,6 +251,8 @@ public class JSAMDEmitter extends JSEmitter implements IJSAMDEmitter
//ICompilerProject project = getWalker().getProject();
IClassDefinition definition = node.getDefinition();
+ getModel().setCurrentClass(definition);
+
final String className = definition.getBaseName();
write("AS3.compilationUnit($exports, function($primaryDeclaration){");
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
index 701bb99..b7ba9bd 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
@@ -20,6 +20,7 @@
package org.apache.flex.compiler.internal.codegen.js.flexjs;
import java.util.ArrayList;
+import java.util.List;
import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
import org.apache.flex.compiler.clients.MXMLJSC;
@@ -46,50 +47,59 @@ import org.apache.flex.compiler.tree.as.IVariableNode;
public class JSFlexJSDocEmitter extends JSGoogDocEmitter
{
+ private List<String> classIgnoreList;
+ private List<String> ignoreList;
public JSFlexJSDocEmitter(IJSEmitter emitter)
{
super(emitter);
}
- public ArrayList<String> classIgnoreList;
- private ArrayList<String> ignoreList;
+ public List<String> getClassIgnoreList()
+ {
+ return classIgnoreList;
+ }
+ public void setClassIgnoreList(List<String> value)
+ {
+ this.classIgnoreList = value;
+ }
+
@Override
protected String convertASTypeToJS(String name, String pname)
{
- if (ignoreList != null)
- {
- if (ignoreList.contains(pname + "." + name))
- return IASLanguageConstants.Object;
- }
- if (classIgnoreList != null)
- {
- if (classIgnoreList.contains(pname + "." + name))
- return IASLanguageConstants.Object;
- }
- name = super.convertASTypeToJS(name, pname);
- return formatQualifiedName(name);
+ if (ignoreList != null)
+ {
+ if (ignoreList.contains(pname + "." + name))
+ return IASLanguageConstants.Object;
+ }
+ if (classIgnoreList != null)
+ {
+ if (classIgnoreList.contains(pname + "." + name))
+ return IASLanguageConstants.Object;
+ }
+ name = super.convertASTypeToJS(name, pname);
+ return formatQualifiedName(name);
}
-
+
@Override
protected String formatQualifiedName(String name)
{
- if (name.contains("goog.") || name.startsWith("Vector."))
- return name;
- name = name.replaceAll("\\.", "_");
- return name;
+ if (name.contains("goog.") || name.startsWith("Vector."))
+ return name;
+ name = name.replaceAll("\\.", "_");
+ return name;
}
@Override
public void emitMethodDoc(IFunctionNode node, ICompilerProject project)
{
ignoreList = null;
-
+
IClassDefinition classDefinition = resolveClassDefinition(node);
ASDocComment asDoc = (ASDocComment) node.getASDocComment();
-
+
if (node instanceof IFunctionNode)
{
boolean hasDoc = false;
@@ -122,7 +132,9 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
.getContainingScope(),
DependencyType.INHERITANCE, true);
if (type == null)
- System.out.println(iReference.getDisplayString() + " not resolved in " + classDefinition.getQualifiedName());
+ System.out.println(iReference.getDisplayString()
+ + " not resolved in "
+ + classDefinition.getQualifiedName());
emitImplements(type, type.getPackageName());
}
}
@@ -133,10 +145,11 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
{
if (asDoc != null && MXMLJSC.keepASDoc)
{
- String docText = asDoc.commentNoEnd();
- String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION.getToken();
- if (docText.contains(ignoreToken))
- loadIgnores(docText);
+ String docText = asDoc.commentNoEnd();
+ String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION
+ .getToken();
+ if (docText.contains(ignoreToken))
+ loadIgnores(docText);
write(changeAnnotations(asDoc.commentNoEnd()));
}
else
@@ -166,7 +179,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
ITypeDefinition tdef = enode.resolveType(project);
if (tdef == null)
continue;
-
+
emitParam(pnode, tdef.getPackageName());
}
@@ -187,12 +200,12 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
hasDoc = true;
}
- ITypeDefinition tdef = ((IFunctionDefinition)node.getDefinition())
- .resolveReturnType(project);
+ ITypeDefinition tdef = ((IFunctionDefinition) node
+ .getDefinition()).resolveReturnType(project);
String packageName = "";
packageName = tdef.getPackageName();
-
+
emitReturn(node, packageName);
}
@@ -221,38 +234,40 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
private void loadIgnores(String doc)
{
- ignoreList = new ArrayList<String>();
- String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION.getToken();
- int index = doc.indexOf(ignoreToken);
- while (index != -1)
- {
- String ignorable = doc.substring(index + ignoreToken.length());
- int endIndex = ignorable.indexOf("\n");
- ignorable = ignorable.substring(0, endIndex);
- ignorable = ignorable.trim();
- ignoreList.add(ignorable);
- index = doc.indexOf(ignoreToken, index + endIndex);
- }
+ ignoreList = new ArrayList<String>();
+ String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION.getToken();
+ int index = doc.indexOf(ignoreToken);
+ while (index != -1)
+ {
+ String ignorable = doc.substring(index + ignoreToken.length());
+ int endIndex = ignorable.indexOf("\n");
+ ignorable = ignorable.substring(0, endIndex);
+ ignorable = ignorable.trim();
+ ignoreList.add(ignorable);
+ index = doc.indexOf(ignoreToken, index + endIndex);
+ }
}
+
private String changeAnnotations(String doc)
{
- // rename these tags so they don't conflict with generated
- // jsdoc tags
- String pass1 = doc.replaceAll("@param", "@asparam");
- String pass2 = pass1.replaceAll("@return", "@asreturn");
- String pass3 = pass2.replaceAll("@private", "@asprivate");
- return pass3;
+ // rename these tags so they don't conflict with generated
+ // jsdoc tags
+ String pass1 = doc.replaceAll("@param", "@asparam");
+ String pass2 = pass1.replaceAll("@return", "@asreturn");
+ String pass3 = pass2.replaceAll("@private", "@asprivate");
+ return pass3;
}
-
- public void emitInterfaceMemberDoc(IDefinitionNode node, ICompilerProject project)
+
+ public void emitInterfaceMemberDoc(IDefinitionNode node,
+ ICompilerProject project)
{
boolean hasDoc = false;
-
- ASDocComment asDoc = (ASDocComment) ((IFunctionNode) node).getASDocComment();
-
+
+ ASDocComment asDoc = (ASDocComment) ((IFunctionNode) node)
+ .getASDocComment();
+
String returnType = ((IFunctionNode) node).getReturnType();
- if (returnType != ""
- && returnType != ASEmitterTokens.VOID.getToken()) // has return
+ if (returnType != "" && returnType != ASEmitterTokens.VOID.getToken()) // has return
{
if (asDoc != null && MXMLJSC.keepASDoc)
write(changeAnnotations(asDoc.commentNoEnd()));
@@ -260,13 +275,14 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
begin();
hasDoc = true;
- ITypeDefinition tdef = ((IFunctionDefinition)node.getDefinition())
+ ITypeDefinition tdef = ((IFunctionDefinition) node.getDefinition())
.resolveReturnType(project);
emitReturn((IFunctionNode) node, tdef.getPackageName());
}
- IParameterNode[] parameters = ((IFunctionNode) node).getParameterNodes();
+ IParameterNode[] parameters = ((IFunctionNode) node)
+ .getParameterNodes();
for (IParameterNode pnode : parameters)
{
if (!hasDoc)
@@ -303,7 +319,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
emitPublic(node);
}
}
-
+
@Override
public void emitFieldDoc(IVariableNode node, IDefinition def)
{
@@ -320,7 +336,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
}
else
{
- emitPublic(node);
+ emitPublic(node);
}
if (node.isConst())
[40/42] git commit: [flex-falcon] [refs/heads/develop] - Uses now the
config file provided by IntelliJ when -output is not provided
Posted by ah...@apache.org.
Uses now the config file provided by IntelliJ when -output is not provided
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/d6162d04
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/d6162d04
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/d6162d04
Branch: refs/heads/develop
Commit: d6162d04bfa310266b089fcf608fd797638469fd
Parents: 2a9b27c
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Wed Jun 3 02:14:49 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Wed Jun 3 02:14:49 2015 +0100
----------------------------------------------------------------------
.../src/org/apache/flex/utils/ArgumentUtil.java | 15 ++--
flex-compiler-oem/src/flex2/tools/Tool.java | 82 ++++++++++++++++----
2 files changed, 74 insertions(+), 23 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/d6162d04/compiler/src/org/apache/flex/utils/ArgumentUtil.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/utils/ArgumentUtil.java b/compiler/src/org/apache/flex/utils/ArgumentUtil.java
index 8b5fe7a..6987cba 100644
--- a/compiler/src/org/apache/flex/utils/ArgumentUtil.java
+++ b/compiler/src/org/apache/flex/utils/ArgumentUtil.java
@@ -53,14 +53,15 @@ public class ArgumentUtil {
}
}
- if (index < 0 || index >= length) {
- throw new IndexOutOfBoundsException("Index: " + index + ", Length: " + length);
- }
+ String[] newArgs = new String[length - 1];
- String[] newArgs = new String[args.length - 1];
- System.arraycopy(args, 0, newArgs, 0, index);
- if (index < length - 1) {
- System.arraycopy(args, index + 1, newArgs, index, length - index - 1);
+ if (index < 0 || index >= length) {
+ System.arraycopy(args, 0, newArgs, 0, length - 1);
+ } else {
+ System.arraycopy(args, 0, newArgs, 0, index);
+ if (index < length - 1) {
+ System.arraycopy(args, index + 1, newArgs, index, length - index - 1);
+ }
}
return newArgs;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/d6162d04/flex-compiler-oem/src/flex2/tools/Tool.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Tool.java b/flex-compiler-oem/src/flex2/tools/Tool.java
index a41c1f4..b77dd8f 100644
--- a/flex-compiler-oem/src/flex2/tools/Tool.java
+++ b/flex-compiler-oem/src/flex2/tools/Tool.java
@@ -31,6 +31,11 @@ import org.apache.flex.compiler.clients.MXMLC;
import org.apache.flex.compiler.clients.MXMLJSC.JSOutputType;
import org.apache.flex.compiler.clients.problems.ProblemQuery;
import org.apache.flex.compiler.clients.problems.ProblemQueryProvider;
+import org.apache.flex.compiler.config.Configuration;
+import org.apache.flex.compiler.config.ConfigurationBuffer;
+import org.apache.flex.compiler.config.ConfigurationValue;
+import org.apache.flex.compiler.filespecs.FileSpecification;
+import org.apache.flex.compiler.internal.config.FileConfigurator;
import org.apache.flex.compiler.problems.CompilerProblemSeverity;
import org.apache.flex.compiler.problems.ICompilerProblem;
import org.apache.flex.compiler.problems.annotations.DefaultSeverity;
@@ -41,10 +46,7 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
import static org.apache.flex.compiler.clients.MXMLJSC.JSOutputType.FLEXJS_DUAL;
@@ -81,26 +83,36 @@ public class Tool {
return exitCode;
}
- protected static class ArgumentBag {
- public String[] args;
+ protected static ArgumentBag preparePhase1(ArgumentBag bag) {
+ bag.isCommandLineOutput = true;
- public String oldOutputPath;
- public String newOutputPath;
+ bag.oldOutputPath = ArgumentUtil.getValue(bag.args, "-output");
- public ArgumentBag(String[] args) {
- this.args = args;
- }
- }
+ if (bag.oldOutputPath == null) {
+ bag.isCommandLineOutput = false;
+ ConfigurationBuffer flexConfig = null;
- protected static ArgumentBag preparePhase1(ArgumentBag bag) {
- bag.oldOutputPath = ArgumentUtil.getValue(bag.args, "-output");
+ try {
+ flexConfig = loadConfig(bag.args);
+ } catch (org.apache.flex.compiler.exceptions.ConfigurationException ignored) {
+ }
+
+ final List<ConfigurationValue> output = flexConfig != null ? flexConfig.getVar("output") : null;
+ final ConfigurationValue configurationValue = output != null ? output.get(0) : null;
+ bag.oldOutputPath = configurationValue != null ? configurationValue.getArgs().get(0) : null;
+ }
if (bag.oldOutputPath != null) {
final int lastIndexOf = Math.max(bag.oldOutputPath.lastIndexOf("/"), bag.oldOutputPath.lastIndexOf("\\"));
if (lastIndexOf > -1) {
bag.newOutputPath = bag.oldOutputPath.substring(0, lastIndexOf) + File.separator + "js" + File.separator + "out";
- ArgumentUtil.setValue(bag.args, "-output", bag.newOutputPath);
+
+ if (bag.isCommandLineOutput) {
+ ArgumentUtil.setValue(bag.args, "-output", bag.newOutputPath);
+ } else {
+ bag.args = ArgumentUtil.addValueAt(bag.args, "-output", bag.newOutputPath, bag.args.length - 1);
+ }
}
}
@@ -111,7 +123,11 @@ public class Tool {
bag.args = ArgumentUtil.removeElement(bag.args, "-js-output-type");
if (bag.oldOutputPath != null) {
- ArgumentUtil.setValue(bag.args, "-output", bag.oldOutputPath);
+ if (bag.isCommandLineOutput) {
+ ArgumentUtil.setValue(bag.args, "-output", bag.oldOutputPath);
+ } else {
+ bag.args = ArgumentUtil.removeElement(bag.args, "-output");
+ }
}
if (COMPILER.getName().equals(COMPC.class.getName())) {
@@ -121,6 +137,28 @@ public class Tool {
return bag;
}
+ private static ConfigurationBuffer loadConfig(String[] args) throws org.apache.flex.compiler.exceptions.ConfigurationException {
+ final String configFilePath = ArgumentUtil.getValue(args, "-load-config");
+ final File configFile = new File(configFilePath);
+ final FileSpecification fileSpecification = new FileSpecification(configFile.getAbsolutePath());
+ final ConfigurationBuffer cfgbuf = createConfigurationBuffer(Configuration.class);
+
+ FileConfigurator.load(
+ cfgbuf,
+ fileSpecification,
+ new File(configFile.getPath()).getParent(),
+ "flex-config",
+ false);
+
+ return cfgbuf;
+ }
+
+ private static ConfigurationBuffer createConfigurationBuffer(
+ Class<? extends Configuration> configurationClass) {
+ return new ConfigurationBuffer(
+ configurationClass, Configuration.getAliases());
+ }
+
protected static int flexCompile(String[] args) throws NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
int exitCode;
@@ -263,4 +301,16 @@ public class Tool {
return mxmlc.getProblems();
}
}
+
+ protected static class ArgumentBag {
+ public String[] args;
+
+ public String oldOutputPath;
+ public String newOutputPath;
+ public boolean isCommandLineOutput;
+
+ public ArgumentBag(String[] args) {
+ this.args = args;
+ }
+ }
}
[26/42] git commit: [flex-falcon] [refs/heads/develop] - Revert "Make
comment more distinct"
Posted by ah...@apache.org.
Revert "Make comment more distinct"
This reverts commit 9b95414ba99eca4bb0401a906414635e240fc2aa.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/4fa27aec
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/4fa27aec
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/4fa27aec
Branch: refs/heads/develop
Commit: 4fa27aec93d3edc84f8ef39a86784a61ce77187b
Parents: f67b246
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:47:38 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:04 2015 +0100
----------------------------------------------------------------------
.../org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/4fa27aec/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java b/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
index ade44c2..4d625d4 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
@@ -74,7 +74,7 @@ public class VF2JSDepsWriter {
this.problems = problems;
buildDB();
ArrayList<GoogDep> dps = sort(mainName);
- String outString = "// generated by FalconJX (VF2JS)" + "\n";
+ String outString = "// generated by FalconJS" + "\n";
int n = dps.size();
for (int i = n - 1; i >= 0; i--)
{
[19/42] git commit: [flex-falcon] [refs/heads/develop] - Bypass
FlexJS' new underscored namespace convention
Posted by ah...@apache.org.
Bypass FlexJS' new underscored namespace convention
Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/cfc1a336
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/cfc1a336
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/cfc1a336
Branch: refs/heads/develop
Commit: cfc1a3367ba0ade2d3159e01b62503dfcbbd40ad
Parents: e7636ff
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Mon Feb 16 12:52:23 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:40 2015 +0100
----------------------------------------------------------------------
.../codegen/js/vf2js/JSVF2JSDocEmitter.java | 48 ++++++++++++++++++++
.../codegen/mxml/vf2js/MXMLVF2JSEmitter.java | 2 +-
.../codegen/mxml/vf2js/MXMLVF2JSPublisher.java | 2 +-
3 files changed, 50 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cfc1a336/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
index c0a1241..f731c2b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
@@ -40,6 +40,7 @@ import org.apache.flex.compiler.projects.ICompilerProject;
import org.apache.flex.compiler.tree.as.IDefinitionNode;
import org.apache.flex.compiler.tree.as.IExpressionNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IInterfaceNode;
import org.apache.flex.compiler.tree.as.IParameterNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
@@ -52,6 +53,41 @@ public class JSVF2JSDocEmitter extends JSGoogDocEmitter
}
@Override
+ public void emitInterfaceDoc(IInterfaceNode node, ICompilerProject project)
+ {
+ begin();
+
+ emitJSDocLine(JSEmitterTokens.INTERFACE.getToken());
+
+ boolean hasQualifiedNames = true;
+ IExpressionNode[] inodes = node.getExtendedInterfaceNodes();
+ for (IExpressionNode inode : inodes)
+ {
+ IDefinition dnode = inode.resolve(project);
+ if (dnode != null)
+ {
+ emitJSDocLine(ASEmitterTokens.EXTENDS, dnode.getQualifiedName());
+ }
+ else
+ {
+ hasQualifiedNames = false;
+ break;
+ }
+ }
+
+ if (!hasQualifiedNames)
+ {
+ String[] inames = node.getExtendedInterfaces();
+ for (String iname : inames)
+ {
+ emitJSDocLine(ASEmitterTokens.EXTENDS, iname);
+ }
+ }
+
+ end();
+ }
+
+ @Override
public void emitMethodDoc(IFunctionNode node, ICompilerProject project)
{
IClassDefinition classDefinition = resolveClassDefinition(node);
@@ -268,4 +304,16 @@ public class JSVF2JSDocEmitter extends JSGoogDocEmitter
emitPublic(node);
}
}
+
+ @Override
+ public void emitExtends(IClassDefinition superDefinition, String packageName)
+ {
+ emitJSDocLine(ASEmitterTokens.EXTENDS, superDefinition.getQualifiedName());
+ }
+
+ @Override
+ public void emitImplements(ITypeDefinition definition, String packageName)
+ {
+ emitJSDocLine(ASEmitterTokens.IMPLEMENTS, definition.getQualifiedName());
+ }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cfc1a336/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
index 5c2aae0..d18f626 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
@@ -1492,7 +1492,7 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
if (project.mainCU != null &&
cu.getName().equals(project.mainCU.getName()))
{
- emitHeaderLine(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
+ emitHeaderLine("org.apache.flex.utils.Language");
}
writeNewline();
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/cfc1a336/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
index 164806c..5adbc90 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
@@ -205,7 +205,7 @@ public class MXMLVF2JSPublisher extends JSGoogPublisher implements
+ File.separator + outputFileName;
appendExportSymbol(projectIntermediateJSFilePath, projectName);
- appendEncodedCSS(projectIntermediateJSFilePath, projectName);
+ //appendEncodedCSS(projectIntermediateJSFilePath, projectName);
if (!subsetGoog)
{
[31/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
interface to emitter. - Refactored var dec to emitter. - Refactored method to
emitter.
Posted by ah...@apache.org.
- Refactored interface to emitter.
- Refactored var dec to emitter.
- Refactored method to emitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/7f043143
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/7f043143
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/7f043143
Branch: refs/heads/develop
Commit: 7f04314348326e966494548d5120fe5f0cbd48ca
Parents: 02e5a02
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 15:08:04 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:21 2015 +0100
----------------------------------------------------------------------
.../compiler/internal/codegen/as/ASEmitter.java | 4 +-
.../internal/codegen/js/JSSessionModel.java | 7 ++
.../codegen/js/flexjs/JSFlexJSEmitter.java | 104 +++++++++++------
.../internal/codegen/js/goog/JSGoogEmitter.java | 71 ++++++------
.../codegen/js/jx/InterfaceEmitter.java | 112 ++++++++++++++++++
.../internal/codegen/js/jx/MethodEmitter.java | 114 +++++++++++++++++++
.../codegen/js/jx/VarDeclarationEmitter.java | 88 ++++++++++++++
.../internal/codegen/js/utils/EmitterUtils.java | 6 +
.../codegen/js/vf2js/JSVF2JSEmitter.java | 4 +-
9 files changed, 437 insertions(+), 73 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 7f5f46f..d16081d 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -699,7 +699,7 @@ public class ASEmitter implements IASEmitter, IEmitter
}
}
- protected void emitMemberKeyword(IDefinitionNode node)
+ public void emitMemberKeyword(IDefinitionNode node)
{
if (node instanceof IFunctionNode)
{
@@ -717,7 +717,7 @@ public class ASEmitter implements IASEmitter, IEmitter
getWalker().walk(node.getNameExpressionNode());
}
- protected void emitDeclarationName(IDefinitionNode node)
+ public void emitDeclarationName(IDefinitionNode node)
{
getWalker().walk(node.getNameExpressionNode());
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
index 48079fa..8bb30b4 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -46,6 +46,8 @@ public class JSSessionModel
private HashMap<String, PropertyNodes> propertyMap = new HashMap<String, PropertyNodes>();
+ private List<String> interfacePropertyMap = new ArrayList<String>();
+
private HashMap<String, PropertyNodes> staticPropertyMap = new HashMap<String, PropertyNodes>();
private ArrayList<String> bindableVars = new ArrayList<String>();
@@ -67,6 +69,11 @@ public class JSSessionModel
return propertyMap;
}
+ public List<String> getInterfacePropertyMap()
+ {
+ return interfacePropertyMap;
+ }
+
public HashMap<String, PropertyNodes> getStaticPropertyMap()
{
return staticPropertyMap;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index d9b1c4e..4463d0a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -41,10 +41,13 @@ import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.ForEachEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.InterfaceEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.MemberAccessEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.MethodEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.PackageFooterEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.PackageHeaderEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.VarDeclarationEmitter;
import org.apache.flex.compiler.internal.tree.as.FunctionNode;
import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
import org.apache.flex.compiler.internal.tree.as.SetterNode;
@@ -60,6 +63,7 @@ import org.apache.flex.compiler.tree.as.IFunctionCallNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
import org.apache.flex.compiler.tree.as.IGetterNode;
import org.apache.flex.compiler.tree.as.IIdentifierNode;
+import org.apache.flex.compiler.tree.as.IInterfaceNode;
import org.apache.flex.compiler.tree.as.ILiteralNode;
import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
@@ -85,8 +89,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
private BindableEmitter bindableEmitter;
private ClassEmitter classEmitter;
+ private InterfaceEmitter interfaceEmitter;
+
private FieldEmitter fieldEmitter;
+ private VarDeclarationEmitter varDeclarationEmitter;
private AccessorEmitter accessorEmitter;
+ private MethodEmitter methodEmitter;
+
private FunctionCallEmitter functionCallEmitter;
private SuperCallEmitter superCallEmitter;
private ForEachEmitter forEachEmitter;
@@ -129,8 +138,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
bindableEmitter = new BindableEmitter(this);
classEmitter = new ClassEmitter(this);
+ interfaceEmitter = new InterfaceEmitter(this);
+
fieldEmitter = new FieldEmitter(this);
+ varDeclarationEmitter = new VarDeclarationEmitter(this);
accessorEmitter = new AccessorEmitter(this);
+ methodEmitter = new MethodEmitter(this);
+
functionCallEmitter = new FunctionCallEmitter(this);
superCallEmitter = new SuperCallEmitter(this);
forEachEmitter = new ForEachEmitter(this);
@@ -156,7 +170,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
@Override
- protected void emitMemberName(IDefinitionNode node)
+ public void emitMemberName(IDefinitionNode node)
{
write(node.getName());
}
@@ -170,6 +184,32 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
return name;
}
+ //--------------------------------------------------------------------------
+ // Package Level
+ //--------------------------------------------------------------------------
+
+ @Override
+ public void emitPackageHeader(IPackageDefinition definition)
+ {
+ packageHeaderEmitter.emit(definition);
+ }
+
+ @Override
+ public void emitPackageHeaderContents(IPackageDefinition definition)
+ {
+ packageHeaderEmitter.emitContents(definition);
+ }
+
+ @Override
+ public void emitPackageFooter(IPackageDefinition definition)
+ {
+ packageFooterEmitter.emit(definition);
+ }
+
+ //--------------------------------------------------------------------------
+ // Class
+ //--------------------------------------------------------------------------
+
@Override
public void emitClass(IClassNode node)
{
@@ -177,18 +217,48 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
@Override
+ public void emitInterface(IInterfaceNode node)
+ {
+ interfaceEmitter.emit(node);
+ }
+
+ @Override
public void emitField(IVariableNode node)
{
fieldEmitter.emit(node);
}
@Override
+ public void emitVarDeclaration(IVariableNode node)
+ {
+ varDeclarationEmitter.emit(node);
+ }
+
+ @Override
public void emitAccessors(IAccessorNode node)
{
accessorEmitter.emit(node);
}
@Override
+ public void emitGetAccessor(IGetterNode node)
+ {
+ accessorEmitter.emitGet(node);
+ }
+
+ @Override
+ public void emitSetAccessor(ISetterNode node)
+ {
+ accessorEmitter.emitSet(node);
+ }
+
+ @Override
+ public void emitMethod(IFunctionNode node)
+ {
+ methodEmitter.emit(node);
+ }
+
+ @Override
public void emitFunctionCall(IFunctionCallNode node)
{
functionCallEmitter.emit(node);
@@ -208,7 +278,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitIdentifier(IIdentifierNode node)
{
- // TODO (mschmalle) remove when project field is removed
identifierEmitter.emit(node);
}
@@ -235,23 +304,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
{
- // TODO (mschmalle) remove when project field is removed
memberAccessEmitter.emit(node);
}
@Override
- public void emitGetAccessor(IGetterNode node)
- {
- accessorEmitter.emitGet(node);
- }
-
- @Override
- public void emitSetAccessor(ISetterNode node)
- {
- accessorEmitter.emitSet(node);
- }
-
- @Override
protected void emitObjectDefineProperty(IAccessorNode node)
{
//TODO: ajh is this method needed anymore?
@@ -380,24 +436,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
@Override
- public void emitPackageHeader(IPackageDefinition definition)
- {
- packageHeaderEmitter.emit(definition);
- }
-
- @Override
- public void emitPackageHeaderContents(IPackageDefinition definition)
- {
- packageHeaderEmitter.emitContents(definition);
- }
-
- @Override
- public void emitPackageFooter(IPackageDefinition definition)
- {
- packageFooterEmitter.emit(definition);
- }
-
- @Override
public void emitForEachLoop(IForLoopNode node)
{
forEachEmitter.emit(node);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 7dd7cdb..40453ec 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -95,16 +95,17 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
return docEmitter;
}
- //--------------------------------------------------------------------------
- //
- //--------------------------------------------------------------------------
-
@Override
public String formatQualifiedName(String name)
{
return name;
}
+ //--------------------------------------------------------------------------
+ // Package Level
+ //--------------------------------------------------------------------------
+
+ // XXX DEAD
@Override
public void emitPackageHeader(IPackageDefinition definition)
{
@@ -124,6 +125,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
writeNewline();
}
+ // XXX DEAD
@Override
public void emitPackageHeaderContents(IPackageDefinition definition)
{
@@ -160,6 +162,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
}
+ // XXX DEAD
@Override
public void emitPackageContents(IPackageDefinition definition)
{
@@ -175,15 +178,17 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
}
+ // XXX DEAD
@Override
public void emitPackageFooter(IPackageDefinition definition)
{
}
//--------------------------------------------------------------------------
- //
+ // Class
//--------------------------------------------------------------------------
+ // XXX DEAD
@Override
public void emitClass(IClassNode node)
{
@@ -253,6 +258,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
}
+ // XXX Dead [InterfaceEmitter]
@Override
public void emitInterface(IInterfaceNode node)
{
@@ -315,6 +321,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
}
+ // XXX Dead
@Override
public void emitField(IVariableNode node)
{
@@ -364,6 +371,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
}
+ // XXX Dead [VarDeclarationEmitter]
@Override
public void emitVarDeclaration(IVariableNode node)
{
@@ -406,19 +414,8 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
}
- @Override
- public void emitGetAccessor(IGetterNode node)
- {
- emitObjectDefineProperty(node);
- }
-
- @Override
- public void emitSetAccessor(ISetterNode node)
- {
- emitObjectDefineProperty(node);
- }
-
- protected void emitAccessors(IAccessorNode node)
+ // XXX Dead
+ public void emitAccessors(IAccessorNode node)
{
String qname = node.getQualifiedName();
if (!propertyNames.contains(qname))
@@ -441,6 +438,21 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
}
+ // XXX Dead
+ @Override
+ public void emitGetAccessor(IGetterNode node)
+ {
+ emitObjectDefineProperty(node);
+ }
+
+ // XXX Dead
+ @Override
+ public void emitSetAccessor(ISetterNode node)
+ {
+ emitObjectDefineProperty(node);
+ }
+
+ // XXX Dead [MethodEmitter]
@Override
public void emitMethod(IFunctionNode node)
{
@@ -453,7 +465,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
boolean isConstructor = node.isConstructor();
- String qname = getTypeDefinition(node).getQualifiedName();
+ String qname = EmitterUtils.getTypeDefinition(node).getQualifiedName();
if (qname != null && !qname.equals(""))
{
write(formatQualifiedName(qname));
@@ -499,13 +511,14 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
write(ASEmitterTokens.PAREN_OPEN);
write(formatQualifiedName(qname));
writeToken(ASEmitterTokens.COMMA);
- String sname = getSuperClassDefinition(node, project)
+ String sname = EmitterUtils.getSuperClassDefinition(node, project)
.getQualifiedName();
write(formatQualifiedName(sname));
write(ASEmitterTokens.PAREN_CLOSE);
}
}
+ // XXX Dead
@Override
public void emitFunctionCall(IFunctionCallNode node)
{
@@ -534,6 +547,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
}
+ // XXX Dead
@Override
public void emitIdentifier(IIdentifierNode node)
{
@@ -836,7 +850,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
@Override
- protected void emitAssignedValue(IExpressionNode node)
+ public void emitAssignedValue(IExpressionNode node)
{
if (node != null)
{
@@ -895,21 +909,6 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
super(out);
}
- private static ITypeDefinition getTypeDefinition(IDefinitionNode node)
- {
- ITypeNode tnode = (ITypeNode) node.getAncestorOfType(ITypeNode.class);
- return (ITypeDefinition) tnode.getDefinition();
- }
-
- private static IClassDefinition getSuperClassDefinition(
- IDefinitionNode node, ICompilerProject project)
- {
- IClassDefinition parent = (IClassDefinition) node.getDefinition()
- .getParent();
- IClassDefinition superClass = parent.resolveBaseClass(project);
- return superClass;
- }
-
protected void emitObjectDefineProperty(IAccessorNode node)
{
/*
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/InterfaceEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/InterfaceEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/InterfaceEmitter.java
new file mode 100644
index 0000000..d12a3ba
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/InterfaceEmitter.java
@@ -0,0 +1,112 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.projects.ICompilerProject;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IDefinitionNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IInterfaceNode;
+
+public class InterfaceEmitter extends JSSubEmitter implements
+ ISubEmitter<IInterfaceNode>
+{
+
+ public InterfaceEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IInterfaceNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ ICompilerProject project = getWalker().getProject();
+
+ fjs.getDocEmitter().emitInterfaceDoc(node, project);
+
+ String qname = node.getQualifiedName();
+ if (qname != null && !qname.equals(""))
+ {
+ write(getEmitter().formatQualifiedName(qname));
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+
+ final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
+ for (IDefinitionNode mnode : members)
+ {
+ boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
+ || mnode.getNodeID() == ASTNodeID.SetterID;
+
+ if (!isAccessor
+ || !getModel().getInterfacePropertyMap().contains(qname))
+ {
+ writeNewline();
+
+ write(getEmitter().formatQualifiedName(qname));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(mnode.getQualifiedName());
+
+ if (isAccessor
+ && !getModel().getInterfacePropertyMap()
+ .contains(qname))
+ {
+ getModel().getInterfacePropertyMap().add(qname);
+ }
+ else
+ {
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+
+ fjs.emitParameters(((IFunctionNode) mnode)
+ .getParameterNodes());
+
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ }
+
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java
new file mode 100644
index 0000000..5caa357
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MethodEmitter.java
@@ -0,0 +1,114 @@
+/*
+ *
+ * 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.js.jx;
+
+import java.util.ArrayList;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.common.ASModifier;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
+import org.apache.flex.compiler.problems.ICompilerProblem;
+import org.apache.flex.compiler.projects.ICompilerProject;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+
+public class MethodEmitter extends JSSubEmitter implements
+ ISubEmitter<IFunctionNode>
+{
+ public MethodEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IFunctionNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ FunctionNode fn = (FunctionNode) node;
+ fn.parseFunctionBody(new ArrayList<ICompilerProblem>());
+
+ ICompilerProject project = getWalker().getProject();
+
+ fjs.getDocEmitter().emitMethodDoc(node, project);
+
+ boolean isConstructor = node.isConstructor();
+
+ String qname = EmitterUtils.getTypeDefinition(node).getQualifiedName();
+ if (qname != null && !qname.equals(""))
+ {
+ write(fjs.formatQualifiedName(qname));
+ if (!isConstructor)
+ {
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ if (!fn.hasModifier(ASModifier.STATIC))
+ {
+ write(JSEmitterTokens.PROTOTYPE);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ }
+ }
+ }
+
+ if (!isConstructor)
+ fjs.emitMemberName(node);
+
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+
+ fjs.emitParameters(node.getParameterNodes());
+
+ boolean hasSuperClass = EmitterUtils.hasSuperClass(project, node);
+
+ if (isConstructor && node.getScopedNode().getChildCount() == 0)
+ {
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ if (hasSuperClass)
+ fjs.emitSuperCall(node, JSSessionModel.CONSTRUCTOR_EMPTY);
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ }
+
+ if (!isConstructor || node.getScopedNode().getChildCount() > 0)
+ fjs.emitMethodScope(node.getScopedNode());
+
+ if (isConstructor && hasSuperClass)
+ {
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ write(JSGoogEmitterTokens.GOOG_INHERITS);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(fjs.formatQualifiedName(qname));
+ writeToken(ASEmitterTokens.COMMA);
+ String sname = EmitterUtils.getSuperClassDefinition(node, project)
+ .getQualifiedName();
+ write(fjs.formatQualifiedName(sname));
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
new file mode 100644
index 0000000..8b57ea9
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/VarDeclarationEmitter.java
@@ -0,0 +1,88 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IEmbedNode;
+import org.apache.flex.compiler.tree.as.IExpressionNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+
+public class VarDeclarationEmitter extends JSSubEmitter implements
+ ISubEmitter<IVariableNode>
+{
+
+ public VarDeclarationEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IVariableNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ if (!(node instanceof ChainedVariableNode) && !node.isConst())
+ {
+ fjs.emitMemberKeyword(node);
+ }
+
+ IExpressionNode avnode = node.getAssignedValueNode();
+ if (avnode != null)
+ {
+ IDefinition def = avnode.resolveType(getWalker().getProject());
+
+ String opcode = avnode.getNodeID().getParaphrase();
+ if (opcode != "AnonymousFunction")
+ fjs.getDocEmitter().emitVarDoc(node, def);
+ }
+ else
+ {
+ fjs.getDocEmitter().emitVarDoc(node, null);
+ }
+
+ fjs.emitDeclarationName(node);
+ if (!(avnode instanceof IEmbedNode))
+ fjs.emitAssignedValue(avnode);
+
+ if (!(node instanceof ChainedVariableNode))
+ {
+ // check for chained variables
+ int len = node.getChildCount();
+ for (int i = 0; i < len; i++)
+ {
+ IASNode child = node.getChild(i);
+ if (child instanceof ChainedVariableNode)
+ {
+ writeToken(ASEmitterTokens.COMMA);
+ fjs.emitVarDeclaration((IVariableNode) child);
+ }
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 4f8482f..8a97565 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -83,6 +83,12 @@ public class EmitterUtils
return null;
}
+ public static ITypeDefinition getTypeDefinition(IDefinitionNode node)
+ {
+ ITypeNode tnode = (ITypeNode) node.getAncestorOfType(ITypeNode.class);
+ return (ITypeDefinition) tnode.getDefinition();
+ }
+
public static boolean isSameClass(IDefinition pdef, IDefinition thisClass,
ICompilerProject project)
{
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/7f043143/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index b436b8a..a25f98e 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -369,7 +369,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
@Override
- protected void emitMemberKeyword(IDefinitionNode node)
+ public void emitMemberKeyword(IDefinitionNode node)
{
if (node instanceof IFunctionNode)
{
@@ -496,7 +496,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
@Override
- protected void emitAccessors(IAccessorNode node)
+ public void emitAccessors(IAccessorNode node)
{
if (node.getNodeID() == ASTNodeID.GetterID)
{
[36/42] git commit: [flex-falcon] [refs/heads/develop] - Check
windows file separator too
Posted by ah...@apache.org.
Check windows file separator too
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/e0f06557
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/e0f06557
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/e0f06557
Branch: refs/heads/develop
Commit: e0f06557aec6122c775708561bd3e882ac2fe32e
Parents: 7127eee
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Mon Jun 1 19:19:56 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:38 2015 +0100
----------------------------------------------------------------------
.../org/apache/flex/compiler/internal/graph/GoogDepsWriter.java | 4 ++++
1 file changed, 4 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e0f06557/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
index f3d77fe..b53e126 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
@@ -451,6 +451,10 @@ public class GoogDepsWriter {
fileEntry = swc.getFile("js/src/" + bckClassPath + ".js");
if (fileEntry == null)
fileEntry = swc.getFile("js/out/" + bckClassPath + ".js");
+ if (fileEntry == null)
+ fileEntry = swc.getFile("js\\src\\" + bckClassPath + ".js");
+ if (fileEntry == null)
+ fileEntry = swc.getFile("js\\out\\" + bckClassPath + ".js");
if (fileEntry != null)
{
fn = outputFolderPath + File.separator + classPath + ".js";
[24/42] git commit: [flex-falcon] [refs/heads/develop] - Revert
"Bypass FlexJS' new underscored namespace convention"
Posted by ah...@apache.org.
Revert "Bypass FlexJS' new underscored namespace convention"
This reverts commit a388b191544e7fee7d999b0301d2e4a0b8f1f939.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/da5a7148
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/da5a7148
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/da5a7148
Branch: refs/heads/develop
Commit: da5a71483c68e954cf15d8b5101e7ded4627cb96
Parents: 11fe07b
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:47:38 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:57 2015 +0100
----------------------------------------------------------------------
.../codegen/js/vf2js/JSVF2JSDocEmitter.java | 48 --------------------
.../codegen/mxml/vf2js/MXMLVF2JSEmitter.java | 2 +-
.../codegen/mxml/vf2js/MXMLVF2JSPublisher.java | 2 +-
3 files changed, 2 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/da5a7148/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
index f731c2b..c0a1241 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
@@ -40,7 +40,6 @@ import org.apache.flex.compiler.projects.ICompilerProject;
import org.apache.flex.compiler.tree.as.IDefinitionNode;
import org.apache.flex.compiler.tree.as.IExpressionNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
-import org.apache.flex.compiler.tree.as.IInterfaceNode;
import org.apache.flex.compiler.tree.as.IParameterNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
@@ -53,41 +52,6 @@ public class JSVF2JSDocEmitter extends JSGoogDocEmitter
}
@Override
- public void emitInterfaceDoc(IInterfaceNode node, ICompilerProject project)
- {
- begin();
-
- emitJSDocLine(JSEmitterTokens.INTERFACE.getToken());
-
- boolean hasQualifiedNames = true;
- IExpressionNode[] inodes = node.getExtendedInterfaceNodes();
- for (IExpressionNode inode : inodes)
- {
- IDefinition dnode = inode.resolve(project);
- if (dnode != null)
- {
- emitJSDocLine(ASEmitterTokens.EXTENDS, dnode.getQualifiedName());
- }
- else
- {
- hasQualifiedNames = false;
- break;
- }
- }
-
- if (!hasQualifiedNames)
- {
- String[] inames = node.getExtendedInterfaces();
- for (String iname : inames)
- {
- emitJSDocLine(ASEmitterTokens.EXTENDS, iname);
- }
- }
-
- end();
- }
-
- @Override
public void emitMethodDoc(IFunctionNode node, ICompilerProject project)
{
IClassDefinition classDefinition = resolveClassDefinition(node);
@@ -304,16 +268,4 @@ public class JSVF2JSDocEmitter extends JSGoogDocEmitter
emitPublic(node);
}
}
-
- @Override
- public void emitExtends(IClassDefinition superDefinition, String packageName)
- {
- emitJSDocLine(ASEmitterTokens.EXTENDS, superDefinition.getQualifiedName());
- }
-
- @Override
- public void emitImplements(ITypeDefinition definition, String packageName)
- {
- emitJSDocLine(ASEmitterTokens.IMPLEMENTS, definition.getQualifiedName());
- }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/da5a7148/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
index 209916a..e56a654 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
@@ -1495,7 +1495,7 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
if (project.mainCU != null &&
cu.getName().equals(project.mainCU.getName()))
{
- emitHeaderLine("org.apache.flex.utils.Language");
+ emitHeaderLine(JSFlexJSEmitterTokens.LANGUAGE_QNAME.getToken());
}
writeNewline();
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/da5a7148/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
index 5adbc90..164806c 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSPublisher.java
@@ -205,7 +205,7 @@ public class MXMLVF2JSPublisher extends JSGoogPublisher implements
+ File.separator + outputFileName;
appendExportSymbol(projectIntermediateJSFilePath, projectName);
- //appendEncodedCSS(projectIntermediateJSFilePath, projectName);
+ appendEncodedCSS(projectIntermediateJSFilePath, projectName);
if (!subsetGoog)
{
[03/42] git commit: [flex-falcon] [refs/heads/develop] - Factorized
the duplicated confusing and at time unused fixArg function
Posted by ah...@apache.org.
Factorized the duplicated confusing and at time unused fixArg function
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/0585dd38
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/0585dd38
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/0585dd38
Branch: refs/heads/develop
Commit: 0585dd3856ab21a6debcbc21ac96c2e3bfaa24ff
Parents: 673da18
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Fri May 29 17:11:14 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Fri May 29 17:11:14 2015 +0100
----------------------------------------------------------------------
.../apache/flex/compiler/clients/MXMLJSC.java | 103 ++++---------------
.../apache/flex/compiler/clients/COMPJSC.java | 39 +------
.../apache/flex/compiler/clients/MXMLJSC.java | 52 ++--------
.../apache/flex/utils/ConfigurationUtil.java | 31 ++++++
4 files changed, 61 insertions(+), 164 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0585dd38/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
----------------------------------------------------------------------
diff --git a/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
index d436a3e..b4f5718 100644
--- a/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler.js/src/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -19,38 +19,23 @@
package org.apache.flex.compiler.clients;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+import com.google.javascript.jscomp.*;
+import com.google.javascript.jscomp.Compiler;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.output.CountingOutputStream;
-
import org.apache.flex.compiler.clients.problems.ProblemPrinter;
import org.apache.flex.compiler.clients.problems.ProblemQuery;
import org.apache.flex.compiler.clients.problems.WorkspaceProblemFormatter;
import org.apache.flex.compiler.common.DependencyType;
import org.apache.flex.compiler.common.VersionInfo;
-import org.apache.flex.compiler.config.CommandLineConfigurator;
-import org.apache.flex.compiler.config.Configuration;
-import org.apache.flex.compiler.config.ConfigurationBuffer;
-import org.apache.flex.compiler.config.ConfigurationValue;
-import org.apache.flex.compiler.config.Configurator;
-import org.apache.flex.compiler.config.ICompilerSettingsConstants;
-import org.apache.flex.compiler.config.RSLSettings;
+import org.apache.flex.compiler.config.*;
import org.apache.flex.compiler.config.RSLSettings.RSLAndPolicyFileURLPair;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.exceptions.ConfigurationException;
@@ -58,12 +43,7 @@ import org.apache.flex.compiler.exceptions.ConfigurationException.IOError;
import org.apache.flex.compiler.exceptions.ConfigurationException.MustSpecifyTarget;
import org.apache.flex.compiler.exceptions.ConfigurationException.OnlyOneSource;
import org.apache.flex.compiler.filespecs.IFileSpecification;
-import org.apache.flex.compiler.internal.as.codegen.CodeGeneratorManager;
-import org.apache.flex.compiler.internal.as.codegen.JSGeneratingReducer;
-import org.apache.flex.compiler.internal.as.codegen.JSGenerator;
-import org.apache.flex.compiler.internal.as.codegen.JSSharedData;
-import org.apache.flex.compiler.internal.as.codegen.JSWriter;
-import org.apache.flex.compiler.internal.as.codegen.JSWriter.ClosureProblem;
+import org.apache.flex.compiler.internal.as.codegen.*;
import org.apache.flex.compiler.internal.config.localization.LocalizationManager;
import org.apache.flex.compiler.internal.definitions.ClassDefinition;
import org.apache.flex.compiler.internal.driver.IBackend;
@@ -71,11 +51,7 @@ import org.apache.flex.compiler.internal.driver.JSBackend;
import org.apache.flex.compiler.internal.driver.JSTarget;
import org.apache.flex.compiler.internal.graph.GoogDepsWriter;
import org.apache.flex.compiler.internal.graph.GraphMLWriter;
-import org.apache.flex.compiler.internal.projects.CompilerProject;
-import org.apache.flex.compiler.internal.projects.DefinitionPriority;
-import org.apache.flex.compiler.internal.projects.FlexJSProject;
-import org.apache.flex.compiler.internal.projects.FlexProject;
-import org.apache.flex.compiler.internal.projects.ISourceFileHandler;
+import org.apache.flex.compiler.internal.projects.*;
import org.apache.flex.compiler.internal.projects.DefinitionPriority.BasePriority;
import org.apache.flex.compiler.internal.resourcebundles.ResourceBundleUtils;
import org.apache.flex.compiler.internal.scopes.ASProjectScope;
@@ -83,22 +59,14 @@ import org.apache.flex.compiler.internal.scopes.ASProjectScope.DefinitionPromise
import org.apache.flex.compiler.internal.targets.LinkageChecker;
import org.apache.flex.compiler.internal.targets.Target;
import org.apache.flex.compiler.internal.tree.mxml.MXMLClassDefinitionNode;
-import org.apache.flex.compiler.internal.units.ABCCompilationUnit;
-import org.apache.flex.compiler.internal.units.ResourceModuleCompilationUnit;
-import org.apache.flex.compiler.internal.units.SWCCompilationUnit;
-import org.apache.flex.compiler.internal.units.SourceCompilationUnitFactory;
-import org.apache.flex.compiler.internal.units.StyleModuleCompilationUnit;
+import org.apache.flex.compiler.internal.units.*;
import org.apache.flex.compiler.internal.workspaces.Workspace;
-import org.apache.flex.compiler.problems.ConfigurationProblem;
-import org.apache.flex.compiler.problems.ICompilerProblem;
-import org.apache.flex.compiler.problems.InternalCompilerProblem;
-import org.apache.flex.compiler.problems.UnableToBuildSWFProblem;
-import org.apache.flex.compiler.problems.UnexpectedExceptionProblem;
+import org.apache.flex.compiler.problems.*;
import org.apache.flex.compiler.projects.ICompilerProject;
import org.apache.flex.compiler.targets.ISWFTarget;
+import org.apache.flex.compiler.targets.ITarget.TargetType;
import org.apache.flex.compiler.targets.ITargetReport;
import org.apache.flex.compiler.targets.ITargetSettings;
-import org.apache.flex.compiler.targets.ITarget.TargetType;
import org.apache.flex.compiler.tree.as.IASNode;
import org.apache.flex.compiler.units.ICompilationUnit;
import org.apache.flex.compiler.units.ICompilationUnit.UnitType;
@@ -106,24 +74,12 @@ import org.apache.flex.compiler.units.requests.IFileScopeRequestResult;
import org.apache.flex.swc.ISWC;
import org.apache.flex.swf.ISWF;
import org.apache.flex.swf.io.ISWFWriter;
-import org.apache.flex.swf.io.OutputBitStream;
import org.apache.flex.swf.types.Rect;
-import org.apache.flex.utils.FileUtils;
+import org.apache.flex.utils.ConfigurationUtil;
import org.apache.flex.utils.FilenameNormalization;
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-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.JSError;
-import com.google.javascript.jscomp.JSSourceFile;
+import java.io.*;
+import java.util.*;
/**
* The entry-point class for the FalconJS version of mxmlc.
@@ -189,7 +145,7 @@ public class MXMLJSC
int exitCode = -1;
try
{
- exitCode = _mainNoExit(fixArgs(args), problems);
+ exitCode = _mainNoExit(ConfigurationUtil.fixArgs(args), problems);
}
catch (Exception e)
{
@@ -1509,27 +1465,6 @@ public class MXMLJSC
return flexHome;
}
- // workaround for Falcon bug.
- // Input files with relative paths confuse the algorithm that extracts the root class name.
-
- protected static String[] fixArgs(final String[] args)
- {
- String[] newArgs = args;
- if (args.length > 1)
- {
- String targetPath = args[args.length - 1];
- if (targetPath.startsWith("."))
- {
- targetPath = FileUtils.getTheRealPathBecauseCanonicalizeDoesNotFixCase(new File(targetPath));
- newArgs = new String[args.length];
- for (int i = 0; i < args.length - 1; ++i)
- newArgs[i] = args[i];
- newArgs[args.length - 1] = targetPath;
- }
- }
- return newArgs;
- }
-
protected JSCommandLineConfiguration getConfiguration()
{
if (config instanceof JSCommandLineConfiguration)
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0585dd38/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
index 694e521..7c205a8 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/COMPJSC.java
@@ -19,17 +19,6 @@
package org.apache.flex.compiler.clients;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
import org.apache.commons.io.FilenameUtils;
import org.apache.flex.compiler.codegen.as.IASWriter;
import org.apache.flex.compiler.driver.IBackend;
@@ -51,11 +40,11 @@ import org.apache.flex.compiler.problems.UnableToBuildSWFProblem;
import org.apache.flex.compiler.targets.ITarget.TargetType;
import org.apache.flex.compiler.targets.ITargetSettings;
import org.apache.flex.compiler.units.ICompilationUnit;
-import org.apache.flex.tools.FlexTool;
-import org.apache.flex.utils.FileUtils;
-
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
+import java.io.*;
+import java.util.*;
+
/**
* @author Erik de Bruin
@@ -421,26 +410,4 @@ public class COMPJSC extends MXMLJSC
{
return TargetType.SWC;
}
-
- // Workaround for Falcon bug: input files with relative paths confuse the
- // algorithm that extracts the root class name.
- protected static String[] fixArgs(final String[] args)
- {
- String[] newArgs = args;
- if (args.length > 1)
- {
- String targetPath = args[args.length - 1];
- if (targetPath.startsWith("."))
- {
- targetPath = FileUtils
- .getTheRealPathBecauseCanonicalizeDoesNotFixCase(new File(
- targetPath));
- newArgs = new String[args.length];
- for (int i = 0; i < args.length - 1; ++i)
- newArgs[i] = args[i];
- newArgs[args.length - 1] = targetPath;
- }
- }
- return newArgs;
- }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0585dd38/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
index 60f9915..759da96 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/MXMLJSC.java
@@ -19,18 +19,9 @@
package org.apache.flex.compiler.clients;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
import org.apache.commons.io.FilenameUtils;
import org.apache.flex.compiler.clients.problems.ProblemPrinter;
import org.apache.flex.compiler.clients.problems.ProblemQuery;
@@ -68,23 +59,18 @@ import org.apache.flex.compiler.internal.targets.JSTarget;
import org.apache.flex.compiler.internal.units.ResourceModuleCompilationUnit;
import org.apache.flex.compiler.internal.units.SourceCompilationUnitFactory;
import org.apache.flex.compiler.internal.workspaces.Workspace;
-import org.apache.flex.compiler.problems.ConfigurationProblem;
-import org.apache.flex.compiler.problems.ICompilerProblem;
-import org.apache.flex.compiler.problems.InternalCompilerProblem;
-import org.apache.flex.compiler.problems.UnableToBuildSWFProblem;
-import org.apache.flex.compiler.problems.UnexpectedExceptionProblem;
+import org.apache.flex.compiler.problems.*;
import org.apache.flex.compiler.projects.ICompilerProject;
import org.apache.flex.compiler.targets.ITarget;
import org.apache.flex.compiler.targets.ITarget.TargetType;
import org.apache.flex.compiler.targets.ITargetSettings;
import org.apache.flex.compiler.units.ICompilationUnit;
import org.apache.flex.tools.FlexTool;
-import org.apache.flex.utils.FileUtils;
+import org.apache.flex.utils.ConfigurationUtil;
import org.apache.flex.utils.FilenameNormalization;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
+import java.io.*;
+import java.util.*;
/**
* @author Erik de Bruin
@@ -257,7 +243,7 @@ public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider, Flex
int exitCode = -1;
try
{
- exitCode = _mainNoExit(fixArgs(args), problems);
+ exitCode = _mainNoExit(ConfigurationUtil.fixArgs(args), problems);
}
catch (Exception e)
{
@@ -802,26 +788,4 @@ public class MXMLJSC implements JSCompilerEntryPoint, ProblemQueryProvider, Flex
{
workspace.close();
}
-
- // Workaround for Falcon bug: input files with relative paths confuse the
- // algorithm that extracts the root class name.
- protected static String[] fixArgs(final String[] args)
- {
- String[] newArgs = args;
- if (args.length > 1)
- {
- String targetPath = args[args.length - 1];
- if (targetPath.startsWith("."))
- {
- targetPath = FileUtils
- .getTheRealPathBecauseCanonicalizeDoesNotFixCase(new File(
- targetPath));
- newArgs = new String[args.length];
- for (int i = 0; i < args.length - 1; ++i)
- newArgs[i] = args[i];
- newArgs[args.length - 1] = targetPath;
- }
- }
- return newArgs;
- }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0585dd38/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/utils/ConfigurationUtil.java b/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
new file mode 100644
index 0000000..8f443c0
--- /dev/null
+++ b/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
@@ -0,0 +1,31 @@
+package org.apache.flex.utils;
+
+import java.io.File;
+
+/**
+ * @author: Frederic Thomas
+ * Date: 29/05/2015
+ * Time: 17:04
+ */
+public class ConfigurationUtil {
+
+ // workaround for Falcon bug.
+ // Input files with relative paths confuse the algorithm that extracts the root class name.
+ public static String[] fixArgs(final String[] args)
+ {
+ String[] newArgs = args;
+ if (args.length > 1)
+ {
+ String targetPath = args[args.length - 1];
+ if (targetPath.startsWith("."))
+ {
+ targetPath = FileUtils.getTheRealPathBecauseCanonicalizeDoesNotFixCase(new File(targetPath));
+ newArgs = new String[args.length];
+ for (int i = 0; i < args.length - 1; ++i)
+ newArgs[i] = args[i];
+ newArgs[args.length - 1] = targetPath;
+ }
+ }
+ return newArgs;
+ }
+}
[27/42] git commit: [flex-falcon] [refs/heads/develop] - Revert
"Quick commit to keep get everything in the repo before Mike goes wild"
Posted by ah...@apache.org.
Revert "Quick commit to keep get everything in the repo before Mike goes wild"
This reverts commit 2b06e1e9f743366aa8333e1b6ab10405b220b76f.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/1422546c
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/1422546c
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/1422546c
Branch: refs/heads/develop
Commit: 1422546c5212149574fe92eb10077c9c62986f57
Parents: 4fa27ae
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Sun May 31 19:47:38 2015 +0200
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:07 2015 +0100
----------------------------------------------------------------------
.../internal/codegen/js/vf2js/TestVF2JSStatements.java | 4 ++--
.../org/apache/flex/compiler/internal/test/TestBase.java | 2 +-
.../projects/simpleMXML/src/SimpleMXML_Project_result.js | 2 +-
compiler.jx.tests/test-files/vf2js/projects/super/Base.as | 2 --
.../compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java | 9 +++++----
5 files changed, 9 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1422546c/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
index 8327fcf..3385b47 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/codegen/js/vf2js/TestVF2JSStatements.java
@@ -346,7 +346,7 @@ public class TestVF2JSStatements extends TestGoogStatements
IIfNode node = (IIfNode) getNode(
"if (numChildren == 0) { if (!typeDescription.@dynamic) { trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + typeDescription.@name + \"'\"); } }", IIfNode.class);
asBlockWalker.visitIf(node);
- assertOut("if (numChildren == 0) {\n if (!typeDescription['E4XOperator']) {\n org_apache_flex_utils_Language.trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + typeDescription['E4XOperator'] + \"'\");\n }\n}");
+ assertOut("if (numChildren == 0) {\n if (!this.typeDescription['E4XOperator']) {\n org_apache_flex_utils_Language.trace(\"warning: no describeType entry for '\" + childName + \"' on non-dynamic type '\" + this.typeDescription['E4XOperator'] + \"'\");\n }\n}");
}
@Test
@@ -355,7 +355,7 @@ public class TestVF2JSStatements extends TestGoogStatements
IIfNode node = (IIfNode) getNode(
"if (options.includeReadOnly) { properties = classInfo..accessor.(@access != \"writeonly\") + classInfo..variable; }", IIfNode.class);
asBlockWalker.visitIf(node);
- assertOut("if (options.includeReadOnly) {\n properties = 'E4XFilter' + classInfo['E4XSelector'];\n}");
+ assertOut("if (options.includeReadOnly) {\n properties = 'E4XFilter' + this.classInfo['E4XSelector'];\n}");
}
@Test
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1422546c/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
index 3b4f464..2a2e90b 100644
--- a/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
+++ b/compiler.jx.tests/src/org/apache/flex/compiler/internal/test/TestBase.java
@@ -261,7 +261,7 @@ public class TestBase implements ITestBase
walker.visitCompilationUnit(cu);
- System.out.println(writer.toString());
+ //System.out.println(writer.toString());
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(outputClassFile));
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1422546c/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js b/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
index d493d28..e34f12d 100644
--- a/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
+++ b/compiler.jx.tests/test-files/vf2js/projects/simpleMXML/src/SimpleMXML_Project_result.js
@@ -23,7 +23,7 @@ goog.provide('SimpleMXML_Project');
goog.require('spark.components.Application');
goog.require('example.Component');
-goog.require('org.apache.flex.utils.Language');
+goog.require('org_apache_flex_utils_Language');
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1422546c/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
----------------------------------------------------------------------
diff --git a/compiler.jx.tests/test-files/vf2js/projects/super/Base.as b/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
index 7c2330c..ee69d65 100644
--- a/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
+++ b/compiler.jx.tests/test-files/vf2js/projects/super/Base.as
@@ -52,8 +52,6 @@ public class Base extends Super
public function getNumber():void
{
alert(super.doStuff());
-
- alert(Math.max(0, super.x - 1));
var x:Number = super.x;
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/1422546c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index 68d0cb6..b11193b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -990,10 +990,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (pfnode == null)
return false;
- String parentName = pfnode.getName();
- String currentName = node.getName();
-
- return parentName.equals(currentName);
+ return pfnode.getName().equals(node.getName());
}
//--------------------------------------------------------------------------
@@ -1362,6 +1359,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
// ToDo (erikdebruin): properly handle E4X
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.MEMBER_ACCESS);
getWalker().walk(node.getLeftOperandNode());
write(ASEmitterTokens.SQUARE_OPEN);
write(ASEmitterTokens.SINGLE_QUOTE);
@@ -1374,6 +1373,8 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
{
// ToDo (erikdebruin): properly handle E4X
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.MEMBER_ACCESS);
getWalker().walk(node.getLeftOperandNode());
write(ASEmitterTokens.SQUARE_OPEN);
write(ASEmitterTokens.SINGLE_QUOTE);
[39/42] git commit: [flex-falcon] [refs/heads/develop] - Added a TODO
because I don't know the ICompilerProblem to use or create at the moment.
Posted by ah...@apache.org.
Added a TODO because I don't know the ICompilerProblem to use or create at the moment.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/2a9b27c0
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/2a9b27c0
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/2a9b27c0
Branch: refs/heads/develop
Commit: 2a9b27c02fc5547040eaab2228c164cb42848d21
Parents: 55443ff
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Tue Jun 2 13:35:18 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:48 2015 +0100
----------------------------------------------------------------------
.../src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/2a9b27c0/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
index b53e126..bac500a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/graph/GoogDepsWriter.java
@@ -170,6 +170,7 @@ public class GoogDepsWriter {
gd.className = className;
gd.filePath = getFilePath(className);
if(gd.filePath.isEmpty()) {
+ // TODO Send a ICompilerProblem instead.
throw new RuntimeException("Unable to find JavaScript filePath for class: " + className);
}
depMap.put(gd.className, gd);
[28/42] git commit: [flex-falcon] [refs/heads/develop] - - Added
formatQualifiedName() to IJSEmitter. - Removed all casts dealing with
formatQualifiedName() addition.
Posted by ah...@apache.org.
- Added formatQualifiedName() to IJSEmitter.
- Removed all casts dealing with formatQualifiedName() addition.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/83932907
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/83932907
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/83932907
Branch: refs/heads/develop
Commit: 83932907f1e6341766a2a4988953e697a601404c
Parents: 1422546
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 14:13:03 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:11 2015 +0100
----------------------------------------------------------------------
.../flex/compiler/codegen/js/IJSEmitter.java | 2 ++
.../compiler/internal/codegen/js/JSEmitter.java | 8 ++++++++
.../codegen/js/flexjs/JSFlexJSEmitter.java | 17 +++++++++--------
.../internal/codegen/js/goog/JSGoogEmitter.java | 17 +++++++++--------
.../internal/codegen/js/jx/AccessorEmitter.java | 13 +++++++------
.../internal/codegen/js/jx/AsIsEmitter.java | 6 +-----
.../codegen/js/jx/BinaryOperatorEmitter.java | 10 ++++++----
.../internal/codegen/js/jx/BindableEmitter.java | 7 ++-----
.../internal/codegen/js/jx/ClassEmitter.java | 2 +-
.../internal/codegen/js/jx/FieldEmitter.java | 14 +++++---------
.../codegen/js/jx/FunctionCallEmitter.java | 5 +++--
.../internal/codegen/js/jx/IdentifierEmitter.java | 8 ++------
.../codegen/js/jx/MemberAccessEmitter.java | 7 ++-----
.../codegen/js/jx/PackageFooterEmitter.java | 14 ++++++--------
.../codegen/js/jx/PackageHeaderEmitter.java | 5 +----
.../internal/codegen/js/jx/SuperCallEmitter.java | 10 ++++------
16 files changed, 68 insertions(+), 77 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
index 01444e7..5a83ec6 100644
--- a/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/codegen/js/IJSEmitter.java
@@ -34,4 +34,6 @@ import org.apache.flex.compiler.visitor.IASNodeStrategy;
public interface IJSEmitter extends IASEmitter
{
JSSessionModel getModel();
+
+ String formatQualifiedName(String name);
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
index 4eb6ccb..1c55dcd 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSEmitter.java
@@ -49,6 +49,12 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
}
@Override
+ public String formatQualifiedName(String name)
+ {
+ return name;
+ }
+
+ @Override
public void emitLocalNamedFunction(IFunctionNode node)
{
FunctionNode fnode = (FunctionNode)node;
@@ -68,4 +74,6 @@ public class JSEmitter extends ASEmitter implements IJSEmitter
emitFunctionScope(fnode.getScopedNode());
}
+
+
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index ec1f3db..5b8b1fe 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -161,6 +161,15 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
@Override
+ public String formatQualifiedName(String name)
+ {
+ if (name.contains("goog.") || name.startsWith("Vector."))
+ return name;
+ name = name.replaceAll("\\.", "_");
+ return name;
+ }
+
+ @Override
public void emitClass(IClassNode node)
{
classEmitter.emit(node);
@@ -447,12 +456,4 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
}
- @Override
- public String formatQualifiedName(String name)
- {
- if (name.contains("goog.") || name.startsWith("Vector."))
- return name;
- name = name.replaceAll("\\.", "_");
- return name;
- }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 77c9094..b685fe0 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -84,7 +84,7 @@ import org.apache.flex.compiler.utils.ASNodeUtils;
public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
{
protected List<String> propertyNames = new ArrayList<String>();
-
+
// TODO (mschmalle) Remove this (not used in JSFlexJSEmitter and JSGoogEmitter anymore)
public ICompilerProject project;
@@ -109,6 +109,12 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
//--------------------------------------------------------------------------
@Override
+ public String formatQualifiedName(String name)
+ {
+ return name;
+ }
+
+ @Override
public void emitPackageHeader(IPackageDefinition definition)
{
IASScope containedScope = definition.getContainedScope();
@@ -545,9 +551,9 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
IClassNode cnode = (IClassNode) node
.getAncestorOfType(IClassNode.class);
- IDefinition def = ((IIdentifierNode) node).resolve(project);
+ IDefinition def = node.resolve(project);
- ITypeDefinition type = ((IIdentifierNode) node).resolveType(project);
+ ITypeDefinition type = node.resolveType(project);
IASNode pnode = node.getParent();
ASTNodeID inode = pnode.getNodeID();
@@ -1159,9 +1165,4 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
return list;
}
-
- protected String formatQualifiedName(String name)
- {
- return name;
- }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
index 0d0bd66..d6311f0 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AccessorEmitter.java
@@ -82,12 +82,12 @@ public class AccessorEmitter extends JSSubEmitter implements
write(JSEmitterTokens.DEFINE_PROPERTIES);
write(ASEmitterTokens.PAREN_OPEN);
String qname = definition.getQualifiedName();
- write(fjs.formatQualifiedName(qname));
+ write(getEmitter().formatQualifiedName(qname));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSEmitterTokens.PROTOTYPE);
write(ASEmitterTokens.COMMA);
write(ASEmitterTokens.SPACE);
- write("/** @lends {" + fjs.formatQualifiedName(qname)
+ write("/** @lends {" + getEmitter().formatQualifiedName(qname)
+ ".prototype} */ ");
writeNewline(ASEmitterTokens.BLOCK_OPEN);
@@ -117,7 +117,7 @@ public class AccessorEmitter extends JSSubEmitter implements
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.SPACE);
write(ASEmitterTokens.BLOCK_OPEN);
- write(fjs.formatQualifiedName(qname));
+ write(getEmitter().formatQualifiedName(qname));
write(ASEmitterTokens.BLOCK_CLOSE);
write(ASEmitterTokens.SPACE);
write(JSDocEmitterTokens.JSDOC_CLOSE);
@@ -141,7 +141,7 @@ public class AccessorEmitter extends JSSubEmitter implements
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.SPACE);
write(ASEmitterTokens.BLOCK_OPEN);
- write(fjs.formatQualifiedName(qname));
+ write(getEmitter().formatQualifiedName(qname));
write(ASEmitterTokens.BLOCK_CLOSE);
write(ASEmitterTokens.SPACE);
write(JSDocEmitterTokens.JSDOC_CLOSE);
@@ -164,10 +164,11 @@ public class AccessorEmitter extends JSSubEmitter implements
write(JSEmitterTokens.DEFINE_PROPERTIES);
write(ASEmitterTokens.PAREN_OPEN);
String qname = definition.getQualifiedName();
- write(fjs.formatQualifiedName(qname));
+ write(getEmitter().formatQualifiedName(qname));
write(ASEmitterTokens.COMMA);
write(ASEmitterTokens.SPACE);
- write("/** @lends {" + fjs.formatQualifiedName(qname) + "} */ ");
+ write("/** @lends {" + getEmitter().formatQualifiedName(qname)
+ + "} */ ");
writeNewline(ASEmitterTokens.BLOCK_OPEN);
Set<String> propertyNames = getModel().getStaticPropertyMap()
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
index 5d243c7..ac45b88 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/AsIsEmitter.java
@@ -24,7 +24,6 @@ import org.apache.flex.compiler.codegen.js.IJSEmitter;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
import org.apache.flex.compiler.tree.ASTNodeID;
import org.apache.flex.compiler.tree.as.IExpressionNode;
@@ -41,9 +40,6 @@ public class AsIsEmitter extends JSSubEmitter
public void emitIsAs(IExpressionNode left, IExpressionNode right,
ASTNodeID id, boolean coercion)
{
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
// project is null in unit tests
//IDefinition dnode = project != null ? (right).resolve(project) : null;
IDefinition dnode = getProject() != null ? (right)
@@ -102,7 +98,7 @@ public class AsIsEmitter extends JSSubEmitter
writeToken(ASEmitterTokens.COMMA);
if (dnode != null)
- write(fjs.formatQualifiedName(dnode.getQualifiedName()));
+ write(getEmitter().formatQualifiedName(dnode.getQualifiedName()));
else
getWalker().walk(right);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
index 80ea2c5..e3d151c 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BinaryOperatorEmitter.java
@@ -73,7 +73,8 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
IDefinition dnode = (node.getRightOperandNode())
.resolve(getProject());
if (dnode != null)
- write(fjs.formatQualifiedName(dnode.getQualifiedName()));
+ write(getEmitter()
+ .formatQualifiedName(dnode.getQualifiedName()));
else
getWalker().walk(node.getRightOperandNode());
}
@@ -102,7 +103,8 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
write(ASEmitterTokens.PAREN_OPEN);
IClassNode cnode = (IClassNode) node
.getAncestorOfType(IClassNode.class);
- write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+ write(getEmitter().formatQualifiedName(
+ cnode.getQualifiedName()));
writeToken(ASEmitterTokens.COMMA);
write(ASEmitterTokens.THIS);
writeToken(ASEmitterTokens.COMMA);
@@ -117,8 +119,8 @@ public class BinaryOperatorEmitter extends JSSubEmitter implements
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSFlexJSEmitterTokens.SUPERSETTER);
write(ASEmitterTokens.PAREN_OPEN);
- write(fjs.formatQualifiedName(cnode
- .getQualifiedName()));
+ write(getEmitter().formatQualifiedName(
+ cnode.getQualifiedName()));
writeToken(ASEmitterTokens.COMMA);
write(ASEmitterTokens.THIS);
writeToken(ASEmitterTokens.COMMA);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
index 0ec3fd2..d2cd20c 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
@@ -39,9 +39,6 @@ public class BindableEmitter extends JSSubEmitter implements
@Override
public void emit(IClassDefinition definition)
{
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
if (getModel().hasBindableVars())
{
write(JSGoogEmitterTokens.OBJECT);
@@ -49,12 +46,12 @@ public class BindableEmitter extends JSSubEmitter implements
write(JSEmitterTokens.DEFINE_PROPERTIES);
write(ASEmitterTokens.PAREN_OPEN);
String qname = definition.getQualifiedName();
- write(fjs.formatQualifiedName(qname));
+ write(getEmitter().formatQualifiedName(qname));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSEmitterTokens.PROTOTYPE);
write(ASEmitterTokens.COMMA);
write(ASEmitterTokens.SPACE);
- write("/** @lends {" + fjs.formatQualifiedName(qname)
+ write("/** @lends {" + getEmitter().formatQualifiedName(qname)
+ ".prototype} */ ");
writeNewline(ASEmitterTokens.BLOCK_OPEN);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
index 516bd98..ff83a52 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -76,7 +76,7 @@ public class ClassEmitter extends JSSubEmitter implements
String qname = definition.getQualifiedName();
if (qname != null && !qname.equals(""))
{
- write(fjs.formatQualifiedName(qname));
+ write(getEmitter().formatQualifiedName(qname));
write(ASEmitterTokens.SPACE);
writeToken(ASEmitterTokens.EQUAL);
write(ASEmitterTokens.FUNCTION);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
index d63ffde..957751f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -28,7 +28,6 @@ import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
import org.apache.flex.compiler.tree.ASTNodeID;
@@ -47,9 +46,6 @@ public class FieldEmitter extends JSSubEmitter implements
@Override
public void emit(IVariableNode node)
{
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
IDefinition definition = EmitterUtils.getClassDefinition(node);
IDefinition def = null;
@@ -60,9 +56,9 @@ public class FieldEmitter extends JSSubEmitter implements
}
// TODO (mschmalle)
- if (fjs.getDocEmitter() instanceof IJSGoogDocEmitter)
+ if (getEmitter().getDocEmitter() instanceof IJSGoogDocEmitter)
{
- ((IJSGoogDocEmitter) fjs.getDocEmitter()).emitFieldDoc(node, def);
+ ((IJSGoogDocEmitter) getEmitter().getDocEmitter()).emitFieldDoc(node, def);
}
IDefinition ndef = node.getDefinition();
@@ -78,7 +74,7 @@ public class FieldEmitter extends JSSubEmitter implements
if (definition == null)
definition = ndef.getContainingScope().getDefinition();
- write(fjs.formatQualifiedName(definition.getQualifiedName())
+ write(getEmitter().formatQualifiedName(definition.getQualifiedName())
+ ASEmitterTokens.MEMBER_ACCESS.getToken() + root
+ node.getName());
@@ -87,7 +83,7 @@ public class FieldEmitter extends JSSubEmitter implements
{
write(ASEmitterTokens.SPACE);
writeToken(ASEmitterTokens.EQUAL);
- fjs.getWalker().walk(vnode);
+ getEmitter().getWalker().walk(vnode);
}
if (!(node instanceof ChainedVariableNode))
@@ -100,7 +96,7 @@ public class FieldEmitter extends JSSubEmitter implements
{
writeNewline(ASEmitterTokens.SEMICOLON);
writeNewline();
- fjs.emitField((IVariableNode) child);
+ getEmitter().emitField((IVariableNode) child);
}
}
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
index 00bdf18..788cd75 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
@@ -79,10 +79,11 @@ public class FunctionCallEmitter extends JSSubEmitter implements
def = node.resolveCalledExpression(getProject());
// all new calls to a class should be fully qualified names
if (def instanceof ClassDefinition)
- write(fjs.formatQualifiedName(def.getQualifiedName()));
+ write(getEmitter().formatQualifiedName(
+ def.getQualifiedName()));
else
// I think we still need this for "new someVarOfTypeClass"
- fjs.getWalker().walk(node.getNameNode());
+ getEmitter().getWalker().walk(node.getNameNode());
write(ASEmitterTokens.PAREN_OPEN);
fjs.walkArguments(node.getArgumentNodes());
write(ASEmitterTokens.PAREN_CLOSE);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
index 3af251d..9c5dcd9 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/IdentifierEmitter.java
@@ -25,7 +25,6 @@ import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.definitions.IFunctionDefinition.FunctionClassification;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
@@ -48,9 +47,6 @@ public class IdentifierEmitter extends JSSubEmitter implements
@Override
public void emit(IIdentifierNode node)
{
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
IDefinition nodeDef = ((IIdentifierNode) node).resolve(getProject());
IASNode parentNode = node.getParent();
@@ -67,7 +63,7 @@ public class IdentifierEmitter extends JSSubEmitter implements
String sname = nodeDef.getParent().getQualifiedName();
if (sname.length() > 0)
{
- write(fjs.formatQualifiedName(sname));
+ write(getEmitter().formatQualifiedName(sname));
write(ASEmitterTokens.MEMBER_ACCESS);
}
}
@@ -119,7 +115,7 @@ public class IdentifierEmitter extends JSSubEmitter implements
if (emitName)
{
if (nodeDef != null)
- write(fjs.formatQualifiedName(nodeDef.getQualifiedName()));
+ write(getEmitter().formatQualifiedName(nodeDef.getQualifiedName()));
else
write(node.getName());
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
index b582915..9bce1ae 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/MemberAccessEmitter.java
@@ -24,7 +24,6 @@ import org.apache.flex.compiler.codegen.js.IJSEmitter;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
import org.apache.flex.compiler.internal.tree.as.GetterNode;
@@ -49,9 +48,6 @@ public class MemberAccessEmitter extends JSSubEmitter implements
@Override
public void emit(IMemberAccessExpressionNode node)
{
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
if (ASNodeUtils.hasParenOpen(node))
write(ASEmitterTokens.PAREN_OPEN);
@@ -117,7 +113,8 @@ public class MemberAccessEmitter extends JSSubEmitter implements
write(ASEmitterTokens.PAREN_OPEN);
IClassNode cnode = (IClassNode) node
.getAncestorOfType(IClassNode.class);
- write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+ write(getEmitter().formatQualifiedName(
+ cnode.getQualifiedName()));
writeToken(ASEmitterTokens.COMMA);
write(ASEmitterTokens.THIS);
writeToken(ASEmitterTokens.COMMA);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
index 86ac18d..1b4b729 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageFooterEmitter.java
@@ -27,7 +27,6 @@ import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
-import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
import org.apache.flex.compiler.scopes.IASScope;
@@ -54,9 +53,8 @@ public class PackageFooterEmitter extends JSSubEmitter implements
if (type == null)
return;
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
- JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) fjs.getDocEmitter();
+ JSFlexJSDocEmitter doc = (JSFlexJSDocEmitter) getEmitter()
+ .getDocEmitter();
ITypeNode tnode = EmitterUtils.findTypeNode(definition.getNode());
if (tnode != null)
@@ -76,7 +74,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements
doc.end();
// a.B.prototype.AFJS_CLASS_INFO = { };
- write(fjs.formatQualifiedName(type.getQualifiedName()));
+ write(getEmitter().formatQualifiedName(type.getQualifiedName()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSEmitterTokens.PROTOTYPE);
write(ASEmitterTokens.MEMBER_ACCESS);
@@ -98,7 +96,7 @@ public class PackageFooterEmitter extends JSSubEmitter implements
write(JSFlexJSEmitterTokens.QNAME);
writeToken(ASEmitterTokens.COLON);
write(ASEmitterTokens.SINGLE_QUOTE);
- write(fjs.formatQualifiedName(tnode.getQualifiedName()));
+ write(getEmitter().formatQualifiedName(tnode.getQualifiedName()));
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.BLOCK_CLOSE);
write(ASEmitterTokens.SQUARE_CLOSE);
@@ -120,8 +118,8 @@ public class PackageFooterEmitter extends JSSubEmitter implements
int i = 0;
for (IExpressionNode enode : enodes)
{
- write(fjs.formatQualifiedName(enode.resolve(getProject())
- .getQualifiedName()));
+ write(getEmitter().formatQualifiedName(
+ enode.resolve(getProject()).getQualifiedName()));
if (i < enodes.length - 1)
writeToken(ASEmitterTokens.COMMA);
i++;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
index cd82cf2..da13f75 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/PackageHeaderEmitter.java
@@ -53,9 +53,6 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
@Override
public void emit(IPackageDefinition definition)
{
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
IASScope containedScope = definition.getContainedScope();
ITypeDefinition type = EmitterUtils.findType(containedScope
.getAllLocalDefinitions());
@@ -75,7 +72,7 @@ public class PackageHeaderEmitter extends JSSubEmitter implements
write(JSGoogEmitterTokens.GOOG_PROVIDE);
write(ASEmitterTokens.PAREN_OPEN);
write(ASEmitterTokens.SINGLE_QUOTE);
- write(fjs.formatQualifiedName(type.getQualifiedName()));
+ write(getEmitter().formatQualifiedName(type.getQualifiedName()));
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/83932907/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
index 90c3bdb..8e48678 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SuperCallEmitter.java
@@ -45,14 +45,10 @@ public class SuperCallEmitter extends JSSubEmitter
public SuperCallEmitter(IJSEmitter emitter)
{
super(emitter);
- // TODO Auto-generated constructor stub
}
public void emit(IASNode node, String type)
{
- // TODO (mschmalle) will remove this cast as more things get abstracted
- JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
-
IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
: null;
IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
@@ -89,9 +85,11 @@ public class SuperCallEmitter extends JSSubEmitter
write(JSFlexJSEmitterTokens.SUPERSETTER);
write(ASEmitterTokens.PAREN_OPEN);
if (cnode == null && thisClass != null)
- write(fjs.formatQualifiedName(thisClass.getQualifiedName()));
+ write(getEmitter().formatQualifiedName(
+ thisClass.getQualifiedName()));
else
- write(fjs.formatQualifiedName(cnode.getQualifiedName()));
+ write(getEmitter().formatQualifiedName(
+ cnode.getQualifiedName()));
writeToken(ASEmitterTokens.COMMA);
write(ASEmitterTokens.THIS);
writeToken(ASEmitterTokens.COMMA);
[37/42] git commit: [flex-falcon] [refs/heads/develop] - Set the
compiler at right time
Posted by ah...@apache.org.
Set the compiler at right time
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/6675bd04
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/6675bd04
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/6675bd04
Branch: refs/heads/develop
Commit: 6675bd049f30f440ea06663d852cfa6301e28fbc
Parents: e0f0655
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Mon Jun 1 19:23:03 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:41 2015 +0100
----------------------------------------------------------------------
flex-compiler-oem/src/flex2/tools/CompJSC.java | 10 +++++++++-
flex-compiler-oem/src/flex2/tools/Compc.java | 9 ++++-----
flex-compiler-oem/src/flex2/tools/MxmlJSC.java | 3 ++-
flex-compiler-oem/src/flex2/tools/Mxmlc.java | 9 ++++-----
4 files changed, 19 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6675bd04/flex-compiler-oem/src/flex2/tools/CompJSC.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/CompJSC.java b/flex-compiler-oem/src/flex2/tools/CompJSC.java
index cb2106c..c81f180 100644
--- a/flex-compiler-oem/src/flex2/tools/CompJSC.java
+++ b/flex-compiler-oem/src/flex2/tools/CompJSC.java
@@ -20,10 +20,18 @@
package flex2.tools;
import org.apache.flex.compiler.clients.COMPJSC;
+import org.apache.flex.compiler.clients.JSCompilerEntryPoint;
+import org.apache.flex.compiler.driver.IBackend;
+
+import java.lang.reflect.InvocationTargetException;
public class CompJSC extends MxmlJSC {
- static {
+ protected JSCompilerEntryPoint getCompilerInstance(IBackend backend) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
COMPILER = COMPJSC.class;
+ if (compiler == null) {
+ compiler = COMPILER.getDeclaredConstructor(IBackend.class).newInstance(backend);
+ }
+ return compiler;
}
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6675bd04/flex-compiler-oem/src/flex2/tools/Compc.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Compc.java b/flex-compiler-oem/src/flex2/tools/Compc.java
index a502217..38848fa 100644
--- a/flex-compiler-oem/src/flex2/tools/Compc.java
+++ b/flex-compiler-oem/src/flex2/tools/Compc.java
@@ -30,11 +30,6 @@ public class Compc extends Tool {
public static final String FILE_SPECS = "include-classes";
- static {
- COMPILER = COMPC.class;
- JS_COMPILER = CompJSC.class;
- }
-
/**
* The entry-point for Mxmlc.
* Note that if you change anything in this method, make sure to check Compc, Shell, and
@@ -52,6 +47,10 @@ public class Compc extends Tool {
}
public static void compc(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
+
+ COMPILER = COMPC.class;
+ JS_COMPILER = CompJSC.class;
+
compile(args);
}
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6675bd04/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
index c2923a1..f71633a 100644
--- a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
+++ b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
@@ -37,11 +37,12 @@ import java.util.Set;
public class MxmlJSC implements ProblemQueryProvider {
- protected static Class<? extends MXMLJSC> COMPILER = MXMLJSC.class;
+ protected static Class<? extends MXMLJSC> COMPILER;
protected JSCompilerEntryPoint compiler;
protected JSCompilerEntryPoint getCompilerInstance(IBackend backend) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
+ COMPILER = MXMLJSC.class;
if (compiler == null) {
compiler = COMPILER.getDeclaredConstructor(IBackend.class).newInstance(backend);
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/6675bd04/flex-compiler-oem/src/flex2/tools/Mxmlc.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/Mxmlc.java b/flex-compiler-oem/src/flex2/tools/Mxmlc.java
index abed94f..ed908f9 100644
--- a/flex-compiler-oem/src/flex2/tools/Mxmlc.java
+++ b/flex-compiler-oem/src/flex2/tools/Mxmlc.java
@@ -47,11 +47,6 @@ public final class Mxmlc extends Tool {
public static final String FILE_SPECS = "file-specs";
- static {
- COMPILER = MXMLC.class;
- JS_COMPILER = MxmlJSC.class;
- }
-
/**
* The entry-point for Mxmlc.
* Note that if you change anything in this method, make sure to check Compc, Shell, and
@@ -69,6 +64,10 @@ public final class Mxmlc extends Tool {
}
public static void mxmlc(String[] args) throws InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException {
+
+ COMPILER = MXMLC.class;
+ JS_COMPILER = MxmlJSC.class;
+
compile(args);
}
[14/42] git commit: [flex-falcon] [refs/heads/develop] - Removed
commented out methods from JSFlexJSEmitter.java and placed them in Notes text
file (not sure if the might still be used).
Posted by ah...@apache.org.
Removed commented out methods from JSFlexJSEmitter.java and placed them in Notes text file
(not sure if the might still be used).
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/32e1dbf6
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/32e1dbf6
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/32e1dbf6
Branch: refs/heads/develop
Commit: 32e1dbf616ee0c26a85e064dae6bded2b3b9fafb
Parents: cea0796
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 11:39:50 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:23 2015 +0100
----------------------------------------------------------------------
.../codegen/js/flexjs/JSFlexJSEmitter.java | 349 +-----------------
.../codegen/js/flexjs/Notes_JSFlexJSEmitter.txt | 367 +++++++++++++++++++
2 files changed, 368 insertions(+), 348 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/32e1dbf6/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 7aa4e2a..5562e31 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -342,7 +342,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitGetAccessor(IGetterNode node)
{
- classEmitter.getGetSetEmitter().emitGet(node);
+ classEmitter.getGetSetEmitter().emitGet(node);
}
@Override
@@ -545,92 +545,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
- /*
- @Override
- public void emitForEachLoop(IForLoopNode node)
- {
- IContainerNode xnode = (IContainerNode) node.getChild(1);
- IBinaryOperatorNode bnode = (IBinaryOperatorNode) node
- .getConditionalsContainerNode().getChild(0);
- IASNode childNode = bnode.getChild(0);
-
- write(ASEmitterTokens.TRY);
- write(ASEmitterTokens.BLOCK_OPEN);
- writeNewline();
-
- write(JSGoogEmitterTokens.GOOG_ARRAY_FOREACH);
- write(ASEmitterTokens.PAREN_OPEN);
- getWalker().walk(bnode.getChild(1));
- writeToken(ASEmitterTokens.COMMA);
- writeToken(ASEmitterTokens.FUNCTION);
- write(ASEmitterTokens.PAREN_OPEN);
- if (childNode instanceof IVariableExpressionNode)
- write(((IVariableNode) childNode.getChild(0)).getName());
- else
- write(((IIdentifierNode) childNode).getName());
- writeToken(ASEmitterTokens.PAREN_CLOSE);
- if (isImplicit(xnode))
- write(ASEmitterTokens.BLOCK_OPEN);
- getWalker().walk(node.getStatementContentsNode());
- if (isImplicit(xnode))
- {
- writeNewline();
- write(ASEmitterTokens.BLOCK_CLOSE);
- }
- write(ASEmitterTokens.PAREN_CLOSE);
- writeNewline();
- write(ASEmitterTokens.BLOCK_CLOSE);
- writeNewline();
- write(ASEmitterTokens.CATCH);
- write(ASEmitterTokens.PAREN_OPEN);
- write("foreachbreakerror");
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- write(ASEmitterTokens.BLOCK_CLOSE);
- writeNewline();
-
- }
-
- @Override
- public void emitIterationFlow(IIterationFlowNode node)
- {
- // look for break in foreach and throw error instead
- if (node.getKind() == IIterationFlowNode.IterationFlowKind.BREAK)
- {
- IASNode pNode = node.getParent();
- while (pNode != null)
- {
- ASTNodeID id = pNode.getNodeID();
- if (id == ASTNodeID.ForEachLoopID)
- {
- write(ASEmitterTokens.THROW);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.NEW);
- write(ASEmitterTokens.SPACE);
- write(JSGoogEmitterTokens.ERROR);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- return;
- }
- else if (id == ASTNodeID.ForLoopID ||
- id == ASTNodeID.DoWhileLoopID ||
- id == ASTNodeID.WhileLoopID)
- break;
- pNode = pNode.getParent();
- }
- }
- write(node.getKind().toString().toLowerCase());
- IIdentifierNode lnode = node.getLabelNode();
- if (lnode != null)
- {
- write(ASEmitterTokens.SPACE);
- getWalker().walk(lnode);
- }
- }
- */
-
@Override
public void emitTypedExpression(ITypedExpressionNode node)
{
@@ -685,7 +599,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
}
-
@Override
public String formatQualifiedName(String name)
{
@@ -694,264 +607,4 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
name = name.replaceAll("\\.", "_");
return name;
}
-
-}
-
-/*
-@Override
-public void emitInterface(IInterfaceNode node)
-{
- ICompilerProject project = getWalker().getProject();
-
- getDoc().emitInterfaceDoc(node, project);
-
- String qname = node.getQualifiedName();
- if (qname != null && !qname.equals(""))
- {
- write(formatQualifiedName(qname));
- write(ASEmitterTokens.SPACE);
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.FUNCTION);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- writeNewline();
- write(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- }
-
-
- final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
- for (IDefinitionNode mnode : members)
- {
- boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
- || mnode.getNodeID() == ASTNodeID.SetterID;
-
- writeNewline();
- writeNewline();
- writeNewline();
-
- getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
-
- write(formatQualifiedName(qname));
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.PROTOTYPE);
- write(ASEmitterTokens.MEMBER_ACCESS);
- if (isAccessor)
- {
- writeGetSetPrefix(mnode.getNodeID() == ASTNodeID.GetterID);
- }
- write(mnode.getQualifiedName());
- write(ASEmitterTokens.SPACE);
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.FUNCTION);
- emitParameters(((IFunctionNode) mnode).getParameterNodes());
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- write(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- }
-}
-*/
-
-/*
-@Override
-public void emitMethod(IFunctionNode node)
-{
- FunctionNode fn = (FunctionNode) node;
- fn.parseFunctionBody(getProblems());
-
- ICompilerProject project = getWalker().getProject();
-
- getDoc().emitMethodDoc(node, project);
-
- boolean isConstructor = node.isConstructor();
-
- String qname = getTypeDefinition(node).getQualifiedName();
- if (qname != null && !qname.equals(""))
- {
- write(formatQualifiedName(qname));
- if (!isConstructor)
- {
- write(ASEmitterTokens.MEMBER_ACCESS);
- if (!fn.hasModifier(ASModifier.STATIC))
- {
- write(JSEmitterTokens.PROTOTYPE);
- write(ASEmitterTokens.MEMBER_ACCESS);
- }
- }
- }
-
- if (!isConstructor)
- emitMemberName(node);
-
- write(ASEmitterTokens.SPACE);
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.FUNCTION);
-
- emitParameters(node.getParameterNodes());
-
- boolean hasSuperClass = hasSuperClass(node);
-
- if (isConstructor && node.getScopedNode().getChildCount() == 0)
- {
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- if (hasSuperClass)
- emitSuperCall(node, CONSTRUCTOR_EMPTY);
- writeNewline();
- write(ASEmitterTokens.BLOCK_CLOSE);
- }
-
- if (!isConstructor || node.getScopedNode().getChildCount() > 0)
- emitMethodScope(node.getScopedNode());
-
- if (isConstructor && hasSuperClass)
- {
- writeNewline(ASEmitterTokens.SEMICOLON);
- write(JSGoogEmitterTokens.GOOG_INHERITS);
- write(ASEmitterTokens.PAREN_OPEN);
- write(formatQualifiedName(qname));
- writeToken(ASEmitterTokens.COMMA);
- String sname = getSuperClassDefinition(node, project)
- .getQualifiedName();
- write(formatQualifiedName(sname));
- write(ASEmitterTokens.PAREN_CLOSE);
- }
-}
-*/
-
-/*
-@Override
-protected void emitDefaultParameterCodeBlock(IFunctionNode node)
-{
- IParameterNode[] pnodes = node.getParameterNodes();
- if (pnodes.length == 0)
- return;
-
- Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
-
- if (defaults != null)
- {
- final StringBuilder code = new StringBuilder();
-
- if (!hasBody(node))
- {
- indentPush();
- write(JSFlexJSEmitterTokens.INDENT);
- }
-
- List<IParameterNode> parameters = new ArrayList<IParameterNode>(
- defaults.values());
-
- for (int i = 0, n = parameters.size(); i < n; i++)
- {
- IParameterNode pnode = parameters.get(i);
-
- if (pnode != null)
- {
- code.setLength(0);
-
- // x = typeof y !== 'undefined' ? y : z;\n
- code.append(pnode.getName());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.EQUAL.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.TYPEOF.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(pnode.getName());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.STRICT_NOT_EQUAL.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
- code.append(ASEmitterTokens.UNDEFINED.getToken());
- code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.TERNARY.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(pnode.getName());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.COLON.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(pnode.getDefaultValue());
- code.append(ASEmitterTokens.SEMICOLON.getToken());
-
- write(code.toString());
-
- if (i == n - 1 && !hasBody(node))
- indentPop();
-
- writeNewline();
- }
- }
- }
-}
-*/
-
-/*
-private void writeGetSetPrefix(boolean isGet)
-{
- if (isGet)
- write(ASEmitterTokens.GET);
- else
- write(ASEmitterTokens.SET);
- write("_");
-}
-*/
-
-/*
-@Override
-public void emitUnaryOperator(IUnaryOperatorNode node)
-{
- if (node.getNodeID() == ASTNodeID.Op_PreIncrID
- || node.getNodeID() == ASTNodeID.Op_PreDecrID
- || node.getNodeID() == ASTNodeID.Op_PostIncrID
- || node.getNodeID() == ASTNodeID.Op_PostDecrID)
- {
- IExpressionNode opNode = node.getOperandNode();
- String getString = stringifyNode(opNode);
- int index = getString.lastIndexOf("get_");
- if (index != -1)
- {
- write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
- write(ASEmitterTokens.MEMBER_ACCESS);
- if (node.getNodeID() == ASTNodeID.Op_PreIncrID)
- write(JSFlexJSEmitterTokens.PREINCREMENT);
- else if (node.getNodeID() == ASTNodeID.Op_PostIncrID)
- write(JSFlexJSEmitterTokens.POSTINCREMENT);
- else if (node.getNodeID() == ASTNodeID.Op_PreDecrID)
- write(JSFlexJSEmitterTokens.PREDECREMENT);
- else
- write(JSFlexJSEmitterTokens.POSTDECREMENT);
- write(ASEmitterTokens.PAREN_OPEN);
- String obj = getString.substring(0, index - 1);
- write(obj);
- write(ASEmitterTokens.COMMA);
- String prop = getString.substring(index + 4);
- int endIndex = prop.indexOf(ASEmitterTokens.PAREN_OPEN.getToken());
- prop = prop.substring(0, endIndex);
- write(ASEmitterTokens.DOUBLE_QUOTE);
- write(prop);
- write(ASEmitterTokens.DOUBLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- return;
- }
- else
- {
- IASNode parentNode = node.getParent();
- if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID &&
- ((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
- {
- // GCC wanted parens around foo++.toString(). As in (foo++).toString();
- write(ASEmitterTokens.PAREN_OPEN);
- super.emitUnaryOperator(node);
- write(ASEmitterTokens.PAREN_CLOSE);
- return;
- }
- }
-
- }
- super.emitUnaryOperator(node);
}
-*/
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/32e1dbf6/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Notes_JSFlexJSEmitter.txt
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Notes_JSFlexJSEmitter.txt b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Notes_JSFlexJSEmitter.txt
new file mode 100644
index 0000000..97e2ffa
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/Notes_JSFlexJSEmitter.txt
@@ -0,0 +1,367 @@
+/*
+ *
+ * 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.
+ *
+ */
+
+//-------------------------------------
+// Removed from JSFlexJSEmitter.java 05-31-2015
+//-------------------------------------
+
+/*
+ @Override
+ public void emitForEachLoop(IForLoopNode node)
+ {
+ IContainerNode xnode = (IContainerNode) node.getChild(1);
+ IBinaryOperatorNode bnode = (IBinaryOperatorNode) node
+ .getConditionalsContainerNode().getChild(0);
+ IASNode childNode = bnode.getChild(0);
+
+ write(ASEmitterTokens.TRY);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ writeNewline();
+
+ write(JSGoogEmitterTokens.GOOG_ARRAY_FOREACH);
+ write(ASEmitterTokens.PAREN_OPEN);
+ getWalker().walk(bnode.getChild(1));
+ writeToken(ASEmitterTokens.COMMA);
+ writeToken(ASEmitterTokens.FUNCTION);
+ write(ASEmitterTokens.PAREN_OPEN);
+ if (childNode instanceof IVariableExpressionNode)
+ write(((IVariableNode) childNode.getChild(0)).getName());
+ else
+ write(((IIdentifierNode) childNode).getName());
+ writeToken(ASEmitterTokens.PAREN_CLOSE);
+ if (isImplicit(xnode))
+ write(ASEmitterTokens.BLOCK_OPEN);
+ getWalker().walk(node.getStatementContentsNode());
+ if (isImplicit(xnode))
+ {
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ }
+ write(ASEmitterTokens.PAREN_CLOSE);
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ writeNewline();
+ write(ASEmitterTokens.CATCH);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write("foreachbreakerror");
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ writeNewline();
+
+ }
+
+ @Override
+ public void emitIterationFlow(IIterationFlowNode node)
+ {
+ // look for break in foreach and throw error instead
+ if (node.getKind() == IIterationFlowNode.IterationFlowKind.BREAK)
+ {
+ IASNode pNode = node.getParent();
+ while (pNode != null)
+ {
+ ASTNodeID id = pNode.getNodeID();
+ if (id == ASTNodeID.ForEachLoopID)
+ {
+ write(ASEmitterTokens.THROW);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.NEW);
+ write(ASEmitterTokens.SPACE);
+ write(JSGoogEmitterTokens.ERROR);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ return;
+ }
+ else if (id == ASTNodeID.ForLoopID ||
+ id == ASTNodeID.DoWhileLoopID ||
+ id == ASTNodeID.WhileLoopID)
+ break;
+ pNode = pNode.getParent();
+ }
+ }
+ write(node.getKind().toString().toLowerCase());
+ IIdentifierNode lnode = node.getLabelNode();
+ if (lnode != null)
+ {
+ write(ASEmitterTokens.SPACE);
+ getWalker().walk(lnode);
+ }
+ }
+*/
+
+/*
+@Override
+public void emitInterface(IInterfaceNode node)
+{
+ ICompilerProject project = getWalker().getProject();
+
+ getDoc().emitInterfaceDoc(node, project);
+
+ String qname = node.getQualifiedName();
+ if (qname != null && !qname.equals(""))
+ {
+ write(formatQualifiedName(qname));
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+
+
+ final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
+ for (IDefinitionNode mnode : members)
+ {
+ boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
+ || mnode.getNodeID() == ASTNodeID.SetterID;
+
+ writeNewline();
+ writeNewline();
+ writeNewline();
+
+ getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
+
+ write(formatQualifiedName(qname));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ if (isAccessor)
+ {
+ writeGetSetPrefix(mnode.getNodeID() == ASTNodeID.GetterID);
+ }
+ write(mnode.getQualifiedName());
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+ emitParameters(((IFunctionNode) mnode).getParameterNodes());
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+}
+*/
+
+/*
+@Override
+public void emitMethod(IFunctionNode node)
+{
+ FunctionNode fn = (FunctionNode) node;
+ fn.parseFunctionBody(getProblems());
+
+ ICompilerProject project = getWalker().getProject();
+
+ getDoc().emitMethodDoc(node, project);
+
+ boolean isConstructor = node.isConstructor();
+
+ String qname = getTypeDefinition(node).getQualifiedName();
+ if (qname != null && !qname.equals(""))
+ {
+ write(formatQualifiedName(qname));
+ if (!isConstructor)
+ {
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ if (!fn.hasModifier(ASModifier.STATIC))
+ {
+ write(JSEmitterTokens.PROTOTYPE);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ }
+ }
+ }
+
+ if (!isConstructor)
+ emitMemberName(node);
+
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+
+ emitParameters(node.getParameterNodes());
+
+ boolean hasSuperClass = hasSuperClass(node);
+
+ if (isConstructor && node.getScopedNode().getChildCount() == 0)
+ {
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ if (hasSuperClass)
+ emitSuperCall(node, CONSTRUCTOR_EMPTY);
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ }
+
+ if (!isConstructor || node.getScopedNode().getChildCount() > 0)
+ emitMethodScope(node.getScopedNode());
+
+ if (isConstructor && hasSuperClass)
+ {
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ write(JSGoogEmitterTokens.GOOG_INHERITS);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(formatQualifiedName(qname));
+ writeToken(ASEmitterTokens.COMMA);
+ String sname = getSuperClassDefinition(node, project)
+ .getQualifiedName();
+ write(formatQualifiedName(sname));
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+}
+*/
+
+/*
+@Override
+protected void emitDefaultParameterCodeBlock(IFunctionNode node)
+{
+ IParameterNode[] pnodes = node.getParameterNodes();
+ if (pnodes.length == 0)
+ return;
+
+ Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
+
+ if (defaults != null)
+ {
+ final StringBuilder code = new StringBuilder();
+
+ if (!hasBody(node))
+ {
+ indentPush();
+ write(JSFlexJSEmitterTokens.INDENT);
+ }
+
+ List<IParameterNode> parameters = new ArrayList<IParameterNode>(
+ defaults.values());
+
+ for (int i = 0, n = parameters.size(); i < n; i++)
+ {
+ IParameterNode pnode = parameters.get(i);
+
+ if (pnode != null)
+ {
+ code.setLength(0);
+
+ // x = typeof y !== 'undefined' ? y : z;\n
+ code.append(pnode.getName());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.EQUAL.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.TYPEOF.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(pnode.getName());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.STRICT_NOT_EQUAL.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+ code.append(ASEmitterTokens.UNDEFINED.getToken());
+ code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.TERNARY.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(pnode.getName());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.COLON.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(pnode.getDefaultValue());
+ code.append(ASEmitterTokens.SEMICOLON.getToken());
+
+ write(code.toString());
+
+ if (i == n - 1 && !hasBody(node))
+ indentPop();
+
+ writeNewline();
+ }
+ }
+ }
+}
+*/
+
+/*
+private void writeGetSetPrefix(boolean isGet)
+{
+ if (isGet)
+ write(ASEmitterTokens.GET);
+ else
+ write(ASEmitterTokens.SET);
+ write("_");
+}
+*/
+
+/*
+@Override
+public void emitUnaryOperator(IUnaryOperatorNode node)
+{
+ if (node.getNodeID() == ASTNodeID.Op_PreIncrID
+ || node.getNodeID() == ASTNodeID.Op_PreDecrID
+ || node.getNodeID() == ASTNodeID.Op_PostIncrID
+ || node.getNodeID() == ASTNodeID.Op_PostDecrID)
+ {
+ IExpressionNode opNode = node.getOperandNode();
+ String getString = stringifyNode(opNode);
+ int index = getString.lastIndexOf("get_");
+ if (index != -1)
+ {
+ write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ if (node.getNodeID() == ASTNodeID.Op_PreIncrID)
+ write(JSFlexJSEmitterTokens.PREINCREMENT);
+ else if (node.getNodeID() == ASTNodeID.Op_PostIncrID)
+ write(JSFlexJSEmitterTokens.POSTINCREMENT);
+ else if (node.getNodeID() == ASTNodeID.Op_PreDecrID)
+ write(JSFlexJSEmitterTokens.PREDECREMENT);
+ else
+ write(JSFlexJSEmitterTokens.POSTDECREMENT);
+ write(ASEmitterTokens.PAREN_OPEN);
+ String obj = getString.substring(0, index - 1);
+ write(obj);
+ write(ASEmitterTokens.COMMA);
+ String prop = getString.substring(index + 4);
+ int endIndex = prop.indexOf(ASEmitterTokens.PAREN_OPEN.getToken());
+ prop = prop.substring(0, endIndex);
+ write(ASEmitterTokens.DOUBLE_QUOTE);
+ write(prop);
+ write(ASEmitterTokens.DOUBLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ return;
+ }
+ else
+ {
+ IASNode parentNode = node.getParent();
+ if (parentNode.getNodeID() == ASTNodeID.MemberAccessExpressionID &&
+ ((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
+ {
+ // GCC wanted parens around foo++.toString(). As in (foo++).toString();
+ write(ASEmitterTokens.PAREN_OPEN);
+ super.emitUnaryOperator(node);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ return;
+ }
+ }
+
+ }
+ super.emitUnaryOperator(node);
+}
+*/
\ No newline at end of file
[21/42] git commit: [flex-falcon] [refs/heads/develop] - Make comment
more distinct
Posted by ah...@apache.org.
Make comment more distinct
Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/e5ac5e12
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/e5ac5e12
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/e5ac5e12
Branch: refs/heads/develop
Commit: e5ac5e12d41c315967d52857e28c023aae271c1d
Parents: fcbdf11
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Mon Feb 16 12:53:00 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:47 2015 +0100
----------------------------------------------------------------------
.../org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e5ac5e12/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java b/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
index 4d625d4..ade44c2 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/graph/VF2JSDepsWriter.java
@@ -74,7 +74,7 @@ public class VF2JSDepsWriter {
this.problems = problems;
buildDB();
ArrayList<GoogDep> dps = sort(mainName);
- String outString = "// generated by FalconJS" + "\n";
+ String outString = "// generated by FalconJX (VF2JS)" + "\n";
int n = dps.size();
for (int i = n - 1; i >= 0; i--)
{
[30/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
more shared utility methods. - Moved writeIndent() to ASEmitter.
Posted by ah...@apache.org.
- Refactored more shared utility methods.
- Moved writeIndent() to ASEmitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/02e5a02f
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/02e5a02f
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/02e5a02f
Branch: refs/heads/develop
Commit: 02e5a02ff8193b7b6d623bb63d59acdd4e2b239b
Parents: 26deda9
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 14:28:16 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:18 2015 +0100
----------------------------------------------------------------------
.../compiler/internal/codegen/as/ASEmitter.java | 26 ++--
.../internal/codegen/js/goog/JSGoogEmitter.java | 124 ++-----------------
.../internal/codegen/js/utils/EmitterUtils.java | 42 ++++++-
.../codegen/js/vf2js/JSVF2JSEmitter.java | 12 +-
4 files changed, 78 insertions(+), 126 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/02e5a02f/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 26b1100..7f5f46f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -147,12 +147,17 @@ public class ASEmitter implements IASEmitter, IEmitter
return currentIndent;
}
+ protected void writeIndent()
+ {
+ write(ASEmitterTokens.INDENT);
+ }
+
private IASBlockWalker walker;
@Override
public IBlockWalker getWalker()
{
- return (IBlockWalker) walker;
+ return walker;
}
@Override
@@ -1367,7 +1372,8 @@ public class ASEmitter implements IASEmitter, IEmitter
}
@Override
- public void emitNamespaceAccessExpression(INamespaceAccessExpressionNode node)
+ public void emitNamespaceAccessExpression(
+ INamespaceAccessExpressionNode node)
{
getWalker().walk(node.getLeftOperandNode());
write(node.getOperator().getOperatorText());
@@ -1379,7 +1385,7 @@ public class ASEmitter implements IASEmitter, IEmitter
{
if (ASNodeUtils.hasParenOpen(node))
write(ASEmitterTokens.PAREN_OPEN);
-
+
if (node.getNodeID() == ASTNodeID.Op_PreIncrID
|| node.getNodeID() == ASTNodeID.Op_PreDecrID
|| node.getNodeID() == ASTNodeID.Op_BitwiseNotID
@@ -1397,7 +1403,7 @@ public class ASEmitter implements IASEmitter, IEmitter
}
else
{
- getWalker().walk(node.getOperandNode());
+ getWalker().walk(node.getOperandNode());
}
}
@@ -1420,7 +1426,7 @@ public class ASEmitter implements IASEmitter, IEmitter
getWalker().walk(node.getOperandNode());
write(ASEmitterTokens.PAREN_CLOSE);
}
-
+
if (ASNodeUtils.hasParenClose(node))
write(ASEmitterTokens.PAREN_CLOSE);
}
@@ -1455,23 +1461,27 @@ public class ASEmitter implements IASEmitter, IEmitter
{
}
+ @Override
public void emitContainer(IContainerNode node)
{
}
+ @Override
public void emitE4XFilter(IMemberAccessExpressionNode node)
{
- // ToDo (erikdebruin)
+ // ToDo (erikdebruin)
}
+ @Override
public void emitUseNamespace(IUseNamespaceNode node)
{
- // ToDo (erikdebruin)
+ // ToDo (erikdebruin)
}
+ @Override
public String stringifyNode(IASNode node)
{
- boolean oldBufferWrite = isBufferWrite();
+ boolean oldBufferWrite = isBufferWrite();
StringBuilder oldBuilder = this.builder;
this.builder = new StringBuilder();
setBufferWrite(true);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/02e5a02f/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index c431553..7dd7cdb 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -21,7 +21,6 @@ package org.apache.flex.compiler.internal.codegen.js.goog;
import java.io.FilterWriter;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -41,7 +40,6 @@ import org.apache.flex.compiler.internal.codegen.js.JSEmitter;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
-import org.apache.flex.compiler.internal.definitions.ClassDefinition;
import org.apache.flex.compiler.internal.scopes.PackageScope;
import org.apache.flex.compiler.internal.tree.as.ChainedVariableNode;
import org.apache.flex.compiler.internal.tree.as.FunctionCallNode;
@@ -66,7 +64,6 @@ import org.apache.flex.compiler.tree.as.IIdentifierNode;
import org.apache.flex.compiler.tree.as.IInterfaceNode;
import org.apache.flex.compiler.tree.as.INamespaceAccessExpressionNode;
import org.apache.flex.compiler.tree.as.IParameterNode;
-import org.apache.flex.compiler.tree.as.IScopedNode;
import org.apache.flex.compiler.tree.as.ISetterNode;
import org.apache.flex.compiler.tree.as.ITypeNode;
import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
@@ -98,11 +95,6 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
return docEmitter;
}
- protected void writeIndent()
- {
- write(ASEmitterTokens.INDENT);
- }
-
//--------------------------------------------------------------------------
//
//--------------------------------------------------------------------------
@@ -142,7 +134,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
if (type == null)
return;
- List<String> list = resolveImports(type);
+ List<String> list = EmitterUtils.resolveImports(type);
for (String imp : list)
{
if (imp.indexOf(JSGoogEmitterTokens.AS3.getToken()) != -1)
@@ -485,7 +477,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
emitParameters(node.getParameterNodes());
- boolean hasSuperClass = hasSuperClass(node);
+ boolean hasSuperClass = EmitterUtils.hasSuperClass(project, node);
if (isConstructor && node.getScopedNode().getChildCount() == 0)
{
@@ -621,11 +613,12 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
boolean isLocal = false;
if (node.getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL)
isLocal = true;
- if (hasBody(node) && !isStatic && !isLocal)
+ if (EmitterUtils.hasBody(node) && !isStatic && !isLocal)
emitSelfReference(node);
- if (node.isConstructor() && hasSuperClass(node)
- && !hasSuperCall(node.getScopedNode()))
+ if (node.isConstructor()
+ && EmitterUtils.hasSuperClass(getWalker().getProject(), node)
+ && !EmitterUtils.hasSuperCall(node.getScopedNode()))
emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
emitRestParameterCodeBlock(node);
@@ -662,7 +655,8 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
.getAncestorOfType(IFunctionNode.class);
}
- if (fnode.isConstructor() && !hasSuperClass(fnode))
+ if (fnode.isConstructor()
+ && !EmitterUtils.hasSuperClass(getWalker().getProject(), fnode))
return;
IClassNode cnode = (IClassNode) node
@@ -741,13 +735,14 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
if (pnodes.length == 0)
return;
- Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
+ Map<Integer, IParameterNode> defaults = EmitterUtils
+ .getDefaults(pnodes);
if (defaults != null)
{
final StringBuilder code = new StringBuilder();
- if (!hasBody(node))
+ if (!EmitterUtils.hasBody(node))
{
indentPush();
writeIndent();
@@ -790,7 +785,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
write(code.toString());
- if (i == n - 1 && !hasBody(node))
+ if (i == n - 1 && !EmitterUtils.hasBody(node))
indentPop();
writeNewline();
@@ -803,7 +798,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
{
IParameterNode[] pnodes = node.getParameterNodes();
- IParameterNode rest = getRest(pnodes);
+ IParameterNode rest = EmitterUtils.getRest(pnodes);
if (rest != null)
{
final StringBuilder code = new StringBuilder();
@@ -900,42 +895,6 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
super(out);
}
- protected Map<Integer, IParameterNode> getDefaults(IParameterNode[] nodes)
- {
- Map<Integer, IParameterNode> result = new HashMap<Integer, IParameterNode>();
- int i = 0;
- boolean hasDefaults = false;
- for (IParameterNode node : nodes)
- {
- if (node.hasDefaultValue())
- {
- hasDefaults = true;
- result.put(i, node);
- }
- else
- {
- result.put(i, null);
- }
- i++;
- }
-
- if (!hasDefaults)
- return null;
-
- return result;
- }
-
- private IParameterNode getRest(IParameterNode[] nodes)
- {
- for (IParameterNode node : nodes)
- {
- if (node.isRest())
- return node;
- }
-
- return null;
- }
-
private static ITypeDefinition getTypeDefinition(IDefinitionNode node)
{
ITypeNode tnode = (ITypeNode) node.getAncestorOfType(ITypeNode.class);
@@ -951,38 +910,6 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
return superClass;
}
- protected boolean hasSuperClass(IDefinitionNode node)
- {
- ICompilerProject project = getWalker().getProject();
- IClassDefinition superClassDefinition = getSuperClassDefinition(node,
- project);
- // XXX (mschmalle) this is nulling for MXML super class, figure out why
- if (superClassDefinition == null)
- return false;
- String qname = superClassDefinition.getQualifiedName();
- return superClassDefinition != null
- && !qname.equals(IASLanguageConstants.Object);
- }
-
- protected boolean hasSuperCall(IScopedNode node)
- {
- for (int i = node.getChildCount() - 1; i > -1; i--)
- {
- IASNode cnode = node.getChild(i);
- if (cnode.getNodeID() == ASTNodeID.FunctionCallID
- && cnode.getChild(0).getNodeID() == ASTNodeID.SuperID)
- return true;
- }
-
- return false;
- }
-
- protected static boolean hasBody(IFunctionNode node)
- {
- IScopedNode scope = node.getScopedNode();
- return scope.getChildCount() > 0;
- }
-
protected void emitObjectDefineProperty(IAccessorNode node)
{
/*
@@ -1139,29 +1066,4 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
if (ASNodeUtils.hasParenOpen(node))
write(ASEmitterTokens.PAREN_CLOSE);
}
-
- //--------------------------------------------------------------------------
- //
- //--------------------------------------------------------------------------
-
- private List<String> resolveImports(ITypeDefinition type)
- {
- ArrayList<String> list = new ArrayList<String>();
- IScopedNode scopeNode = type.getContainedScope().getScopeNode();
- if (scopeNode != null)
- {
- scopeNode.getAllImports(list);
- }
- else
- {
- // MXML
- ClassDefinition cdefinition = (ClassDefinition) type;
- String[] implicitImports = cdefinition.getImplicitImports();
- for (String imp : implicitImports)
- {
- list.add(imp);
- }
- }
- return list;
- }
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/02e5a02f/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
index 07da145..4f8482f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -21,9 +21,11 @@ package org.apache.flex.compiler.internal.codegen.js.utils;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.apache.flex.compiler.constants.IASLanguageConstants;
@@ -50,6 +52,7 @@ import org.apache.flex.compiler.tree.as.IDefinitionNode;
import org.apache.flex.compiler.tree.as.IFunctionNode;
import org.apache.flex.compiler.tree.as.IIdentifierNode;
import org.apache.flex.compiler.tree.as.IPackageNode;
+import org.apache.flex.compiler.tree.as.IParameterNode;
import org.apache.flex.compiler.tree.as.IScopedNode;
import org.apache.flex.compiler.tree.as.ITypeNode;
@@ -167,13 +170,50 @@ public class EmitterUtils
return (tnode != null) ? tnode.getDefinition() : null;
}
+ public static IParameterNode getRest(IParameterNode[] nodes)
+ {
+ for (IParameterNode node : nodes)
+ {
+ if (node.isRest())
+ return node;
+ }
+
+ return null;
+ }
+
+ public static Map<Integer, IParameterNode> getDefaults(
+ IParameterNode[] nodes)
+ {
+ Map<Integer, IParameterNode> result = new HashMap<Integer, IParameterNode>();
+ int i = 0;
+ boolean hasDefaults = false;
+ for (IParameterNode node : nodes)
+ {
+ if (node.hasDefaultValue())
+ {
+ hasDefaults = true;
+ result.put(i, node);
+ }
+ else
+ {
+ result.put(i, null);
+ }
+ i++;
+ }
+
+ if (!hasDefaults)
+ return null;
+
+ return result;
+ }
+
public static boolean writeThis(ICompilerProject project,
JSSessionModel model, IIdentifierNode node)
{
IClassNode classNode = (IClassNode) node
.getAncestorOfType(IClassNode.class);
- IDefinition nodeDef = ((IIdentifierNode) node).resolve(project);
+ IDefinition nodeDef = node.resolve(project);
IASNode parentNode = node.getParent();
ASTNodeID parentNodeId = parentNode.getNodeID();
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/02e5a02f/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index dab4472..b436b8a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -267,7 +267,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
boolean isLocal = false;
if (node.getFunctionClassification() == IFunctionDefinition.FunctionClassification.LOCAL)
isLocal = true;
- if (hasBody(node) && !isStatic && !isLocal)
+ if (EmitterUtils.hasBody(node) && !isStatic && !isLocal)
emitSelfReference(node);
emitRestParameterCodeBlock(node);
@@ -280,7 +280,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
if (node.isConstructor() && hasSuperClass(node)
- && !hasSuperCall(node.getScopedNode()))
+ && !EmitterUtils.hasSuperCall(node.getScopedNode()))
emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
}
@@ -578,7 +578,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
}
- @Override
protected boolean hasSuperClass(IDefinitionNode node)
{
ICompilerProject project = getWalker().getProject();
@@ -1182,13 +1181,14 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (pnodes.length == 0)
return;
- Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
+ Map<Integer, IParameterNode> defaults = EmitterUtils
+ .getDefaults(pnodes);
if (defaults != null)
{
final StringBuilder code = new StringBuilder();
- if (!hasBody(node))
+ if (!EmitterUtils.hasBody(node))
{
indentPush();
write(JSFlexJSEmitterTokens.INDENT);
@@ -1231,7 +1231,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(code.toString());
- if (i == n - 1 && !hasBody(node))
+ if (i == n - 1 && !EmitterUtils.hasBody(node))
indentPop();
writeNewline();
[04/42] git commit: [flex-falcon] [refs/heads/develop] - Cleanup: -
Added Apache headers - Removed @Author tag
Posted by ah...@apache.org.
Cleanup:
- Added Apache headers
- Removed @Author tag
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/a1dae471
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/a1dae471
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/a1dae471
Branch: refs/heads/develop
Commit: a1dae4719cf6bca45a09fc90e9c4b1aff6b3acd8
Parents: 0585dd3
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Sat May 30 16:52:52 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Sat May 30 16:52:52 2015 +0100
----------------------------------------------------------------------
.../compiler/clients/JSCompilerEntryPoint.java | 24 +++++++++++---
.../clients/problems/ProblemQueryProvider.java | 28 ++++++++++++-----
.../apache/flex/utils/ConfigurationUtil.java | 33 +++++++++++++-------
flex-compiler-oem/src/flex2/tools/CompJSC.java | 24 +++++++++++---
flex-compiler-oem/src/flex2/tools/MxmlJSC.java | 26 +++++++++++----
5 files changed, 100 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/a1dae471/compiler.jx/src/org/apache/flex/compiler/clients/JSCompilerEntryPoint.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/clients/JSCompilerEntryPoint.java b/compiler.jx/src/org/apache/flex/compiler/clients/JSCompilerEntryPoint.java
index b30066a..534d9f5 100644
--- a/compiler.jx/src/org/apache/flex/compiler/clients/JSCompilerEntryPoint.java
+++ b/compiler.jx/src/org/apache/flex/compiler/clients/JSCompilerEntryPoint.java
@@ -1,14 +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.clients;
import org.apache.flex.compiler.problems.ICompilerProblem;
import java.util.Set;
-/**
- * @author: Frederic Thomas
- * Date: 26/05/2015
- * Time: 16:56
- */
public interface JSCompilerEntryPoint {
public int mainNoExit(final String[] args, Set<ICompilerProblem> problems,
Boolean printProblems);
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/a1dae471/compiler/src/org/apache/flex/compiler/clients/problems/ProblemQueryProvider.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/clients/problems/ProblemQueryProvider.java b/compiler/src/org/apache/flex/compiler/clients/problems/ProblemQueryProvider.java
index dcce2cc..55cdcce 100644
--- a/compiler/src/org/apache/flex/compiler/clients/problems/ProblemQueryProvider.java
+++ b/compiler/src/org/apache/flex/compiler/clients/problems/ProblemQueryProvider.java
@@ -1,12 +1,24 @@
-package org.apache.flex.compiler.clients.problems;
+/*
+ *
+ * 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.
+ *
+ */
-import org.apache.flex.compiler.clients.problems.ProblemQuery;
+package org.apache.flex.compiler.clients.problems;
-/**
- * @author: Frederic Thomas
- * Date: 26/05/2015
- * Time: 15:44
- */
public interface ProblemQueryProvider {
- public ProblemQuery getProblemQuery();
+ public ProblemQuery getProblemQuery();
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/a1dae471/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/utils/ConfigurationUtil.java b/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
index 8f443c0..ea1bc10 100644
--- a/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
+++ b/compiler/src/org/apache/flex/utils/ConfigurationUtil.java
@@ -1,24 +1,35 @@
+/*
+ *
+ * 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.utils;
import java.io.File;
-/**
- * @author: Frederic Thomas
- * Date: 29/05/2015
- * Time: 17:04
- */
public class ConfigurationUtil {
// workaround for Falcon bug.
// Input files with relative paths confuse the algorithm that extracts the root class name.
- public static String[] fixArgs(final String[] args)
- {
+ public static String[] fixArgs(final String[] args) {
String[] newArgs = args;
- if (args.length > 1)
- {
+ if (args.length > 1) {
String targetPath = args[args.length - 1];
- if (targetPath.startsWith("."))
- {
+ if (targetPath.startsWith(".")) {
targetPath = FileUtils.getTheRealPathBecauseCanonicalizeDoesNotFixCase(new File(targetPath));
newArgs = new String[args.length];
for (int i = 0; i < args.length - 1; ++i)
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/a1dae471/flex-compiler-oem/src/flex2/tools/CompJSC.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/CompJSC.java b/flex-compiler-oem/src/flex2/tools/CompJSC.java
index d291678..cb2106c 100644
--- a/flex-compiler-oem/src/flex2/tools/CompJSC.java
+++ b/flex-compiler-oem/src/flex2/tools/CompJSC.java
@@ -1,12 +1,26 @@
+/*
+ *
+ * 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 flex2.tools;
import org.apache.flex.compiler.clients.COMPJSC;
-/**
- * @author: Frederic Thomas
- * Date: 25/05/2015
- * Time: 14:05
- */
public class CompJSC extends MxmlJSC {
static {
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/a1dae471/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
index f23dc2a..c2923a1 100644
--- a/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
+++ b/flex-compiler-oem/src/flex2/tools/MxmlJSC.java
@@ -1,9 +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 flex2.tools;
-import org.apache.flex.compiler.clients.problems.ProblemQueryProvider;
import org.apache.flex.compiler.clients.JSCompilerEntryPoint;
import org.apache.flex.compiler.clients.MXMLJSC;
import org.apache.flex.compiler.clients.problems.ProblemQuery;
+import org.apache.flex.compiler.clients.problems.ProblemQueryProvider;
import org.apache.flex.compiler.driver.IBackend;
import org.apache.flex.compiler.internal.driver.as.ASBackend;
import org.apache.flex.compiler.internal.driver.js.amd.AMDBackend;
@@ -16,11 +35,6 @@ import java.lang.reflect.InvocationTargetException;
import java.util.HashSet;
import java.util.Set;
-/**
- * @author: Frederic Thomas
- * Date: 25/05/2015
- * Time: 14:05
- */
public class MxmlJSC implements ProblemQueryProvider {
protected static Class<? extends MXMLJSC> COMPILER = MXMLJSC.class;
[32/42] git commit: [flex-falcon] [refs/heads/develop] - Cleanup
organize.
Posted by ah...@apache.org.
Cleanup organize.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/e11ef01c
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/e11ef01c
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/e11ef01c
Branch: refs/heads/develop
Commit: e11ef01c3d3262df48a812f44a76744452d4012f
Parents: 7f04314
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 15:16:36 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:25 2015 +0100
----------------------------------------------------------------------
.../codegen/js/flexjs/JSFlexJSEmitter.java | 161 ++++++++++---------
.../internal/codegen/js/goog/JSGoogEmitter.java | 4 +
2 files changed, 91 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e11ef01c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 4463d0a..66a5731 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -258,35 +258,45 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
methodEmitter.emit(node);
}
+ //--------------------------------------------------------------------------
+ // Statements
+ //--------------------------------------------------------------------------
+
@Override
public void emitFunctionCall(IFunctionCallNode node)
{
functionCallEmitter.emit(node);
}
+ @Override
+ public void emitForEachLoop(IForLoopNode node)
+ {
+ forEachEmitter.emit(node);
+ }
+
+ //--------------------------------------------------------------------------
+ // Expressions
//--------------------------------------------------------------------------
@Override
- protected void emitSelfReference(IFunctionNode node)
+ public void emitSuperCall(IASNode node, String type)
{
- // we don't want 'var self = this;' in FlexJS
- // unless there are anonymous functions
- if (node.containsAnonymousFunctions())
- super.emitSelfReference(node);
+ superCallEmitter.emit(node, type);
}
@Override
- public void emitIdentifier(IIdentifierNode node)
+ public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
{
- identifierEmitter.emit(node);
+ memberAccessEmitter.emit(node);
}
- //--------------------------------------------------------------------------
-
@Override
- public void emitSuperCall(IASNode node, String type)
+ public void emitE4XFilter(IMemberAccessExpressionNode node)
{
- superCallEmitter.emit(node, type);
+ // ToDo (erikdebruin): implement E4X replacement !?!
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write("E4XFilter");
+ write(ASEmitterTokens.SINGLE_QUOTE);
}
@Override
@@ -295,6 +305,61 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
binaryOperatorEmitter.emit(node);
}
+ @Override
+ public void emitTypedExpression(ITypedExpressionNode node)
+ {
+ write(JSGoogEmitterTokens.ARRAY);
+ }
+
+ @Override
+ public void emitIdentifier(IIdentifierNode node)
+ {
+ identifierEmitter.emit(node);
+ }
+
+ @Override
+ public void emitLiteral(ILiteralNode node)
+ {
+ boolean isWritten = false;
+
+ String s = node.getValue(true);
+ if (!(node instanceof RegExpLiteralNode))
+ {
+ if (node.getLiteralType() == LiteralType.XML)
+ {
+ // ToDo (erikdebruin): VF2JS -> handle XML output properly...
+
+ write("'" + s + "'");
+
+ isWritten = true;
+ }
+ s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
+ s = s.replaceAll("\r", "__CR_PLACEHOLDER__");
+ s = s.replaceAll("\t", "__TAB_PLACEHOLDER__");
+ s = s.replaceAll("\f", "__FORMFEED_PLACEHOLDER__");
+ s = s.replaceAll("\b", "__BACKSPACE_PLACEHOLDER__");
+ s = s.replaceAll("\\\\\"", "__QUOTE_PLACEHOLDER__");
+ s = s.replaceAll("\\\\", "__ESCAPE_PLACEHOLDER__");
+ //s = "\'" + s.replaceAll("\'", "\\\\\'") + "\'";
+ s = s.replaceAll("__ESCAPE_PLACEHOLDER__", "\\\\\\\\");
+ s = s.replaceAll("__QUOTE_PLACEHOLDER__", "\\\\\"");
+ s = s.replaceAll("__BACKSPACE_PLACEHOLDER__", "\\\\b");
+ s = s.replaceAll("__FORMFEED_PLACEHOLDER__", "\\\\f");
+ s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
+ s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
+ s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
+ }
+
+ if (!isWritten)
+ {
+ write(s);
+ }
+ }
+
+ //--------------------------------------------------------------------------
+ // Specific
+ //--------------------------------------------------------------------------
+
public void emitIsAs(IExpressionNode left, IExpressionNode right,
ASTNodeID id, boolean coercion)
{
@@ -302,9 +367,18 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
@Override
- public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
+ protected void emitSelfReference(IFunctionNode node)
{
- memberAccessEmitter.emit(node);
+ // we don't want 'var self = this;' in FlexJS
+ // unless there are anonymous functions
+ if (node.containsAnonymousFunctions())
+ {
+ writeToken(ASEmitterTokens.VAR);
+ writeToken(JSGoogEmitterTokens.SELF);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.THIS);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ }
}
@Override
@@ -434,65 +508,4 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
else
super.emitDefinePropertyFunction(node);
}
-
- @Override
- public void emitForEachLoop(IForLoopNode node)
- {
- forEachEmitter.emit(node);
- }
-
- @Override
- public void emitTypedExpression(ITypedExpressionNode node)
- {
- write(JSGoogEmitterTokens.ARRAY);
- }
-
- @Override
- public void emitLiteral(ILiteralNode node)
- {
- boolean isWritten = false;
-
- String s = node.getValue(true);
- if (!(node instanceof RegExpLiteralNode))
- {
- if (node.getLiteralType() == LiteralType.XML)
- {
- // ToDo (erikdebruin): VF2JS -> handle XML output properly...
-
- write("'" + s + "'");
-
- isWritten = true;
- }
- s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
- s = s.replaceAll("\r", "__CR_PLACEHOLDER__");
- s = s.replaceAll("\t", "__TAB_PLACEHOLDER__");
- s = s.replaceAll("\f", "__FORMFEED_PLACEHOLDER__");
- s = s.replaceAll("\b", "__BACKSPACE_PLACEHOLDER__");
- s = s.replaceAll("\\\\\"", "__QUOTE_PLACEHOLDER__");
- s = s.replaceAll("\\\\", "__ESCAPE_PLACEHOLDER__");
- //s = "\'" + s.replaceAll("\'", "\\\\\'") + "\'";
- s = s.replaceAll("__ESCAPE_PLACEHOLDER__", "\\\\\\\\");
- s = s.replaceAll("__QUOTE_PLACEHOLDER__", "\\\\\"");
- s = s.replaceAll("__BACKSPACE_PLACEHOLDER__", "\\\\b");
- s = s.replaceAll("__FORMFEED_PLACEHOLDER__", "\\\\f");
- s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
- s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
- s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
- }
-
- if (!isWritten)
- {
- write(s);
- }
- }
-
- @Override
- public void emitE4XFilter(IMemberAccessExpressionNode node)
- {
- // ToDo (erikdebruin): implement E4X replacement !?!
- write(ASEmitterTokens.SINGLE_QUOTE);
- write("E4XFilter");
- write(ASEmitterTokens.SINGLE_QUOTE);
- }
-
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e11ef01c/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index 40453ec..df64740 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -640,6 +640,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
emitDefaultParameterCodeBlock(node);
}
+ // XXX Dead
protected void emitSelfReference(IFunctionNode node)
{
writeToken(ASEmitterTokens.VAR);
@@ -649,6 +650,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
writeNewline(ASEmitterTokens.SEMICOLON);
}
+ // XXX Dead
protected void emitSuperCall(IASNode node, String type)
{
IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
@@ -874,6 +876,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
getWalker().walk(node.getCollectionNode());
}
+ // XXX Dead
@Override
public void emitForEachLoop(IForLoopNode node)
{
@@ -999,6 +1002,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
emitBinaryOperator(node);
}
+ // XXX Dead
@Override
public void emitBinaryOperator(IBinaryOperatorNode node)
{
[34/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
literal to emitter. - Refactored self ref to emitter.
Posted by ah...@apache.org.
- Refactored literal to emitter.
- Refactored self ref to emitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/f2b74b68
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/f2b74b68
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/f2b74b68
Branch: refs/heads/develop
Commit: f2b74b68cbdcbbe1822c5771ae5f8caade04e37e
Parents: 0ca46d2
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 15:40:01 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:31 2015 +0100
----------------------------------------------------------------------
.../codegen/js/flexjs/JSFlexJSEmitter.java | 56 +++------------
.../internal/codegen/js/jx/LiteralEmitter.java | 74 ++++++++++++++++++++
.../codegen/js/jx/SelfReferenceEmitter.java | 52 ++++++++++++++
3 files changed, 135 insertions(+), 47 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f2b74b68/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 78f1f0b..e1df65a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -38,14 +38,15 @@ import org.apache.flex.compiler.internal.codegen.js.jx.ForEachEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.InterfaceEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.LiteralEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.MemberAccessEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.MethodEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.ObjectDefinePropertyEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.PackageFooterEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.PackageHeaderEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.SelfReferenceEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.VarDeclarationEmitter;
-import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
import org.apache.flex.compiler.tree.ASTNodeID;
import org.apache.flex.compiler.tree.as.IASNode;
import org.apache.flex.compiler.tree.as.IAccessorNode;
@@ -60,7 +61,6 @@ import org.apache.flex.compiler.tree.as.IGetterNode;
import org.apache.flex.compiler.tree.as.IIdentifierNode;
import org.apache.flex.compiler.tree.as.IInterfaceNode;
import org.apache.flex.compiler.tree.as.ILiteralNode;
-import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
import org.apache.flex.compiler.tree.as.ISetterNode;
import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
@@ -96,8 +96,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
private MemberAccessEmitter memberAccessEmitter;
private BinaryOperatorEmitter binaryOperatorEmitter;
private IdentifierEmitter identifierEmitter;
+ private LiteralEmitter literalEmitter;
private AsIsEmitter asIsEmitter;
+ private SelfReferenceEmitter selfReferenceEmitter;
private ObjectDefinePropertyEmitter objectDefinePropertyEmitter;
private DefinePropertyFunctionEmitter definePropertyFunctionEmitter;
@@ -146,10 +148,12 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
superCallEmitter = new SuperCallEmitter(this);
forEachEmitter = new ForEachEmitter(this);
memberAccessEmitter = new MemberAccessEmitter(this);
- asIsEmitter = new AsIsEmitter(this);
binaryOperatorEmitter = new BinaryOperatorEmitter(this);
identifierEmitter = new IdentifierEmitter(this);
+ literalEmitter = new LiteralEmitter(this);
+ asIsEmitter = new AsIsEmitter(this);
+ selfReferenceEmitter = new SelfReferenceEmitter(this);
objectDefinePropertyEmitter = new ObjectDefinePropertyEmitter(this);
definePropertyFunctionEmitter = new DefinePropertyFunctionEmitter(this);
}
@@ -320,40 +324,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitLiteral(ILiteralNode node)
{
- boolean isWritten = false;
-
- String s = node.getValue(true);
- if (!(node instanceof RegExpLiteralNode))
- {
- if (node.getLiteralType() == LiteralType.XML)
- {
- // ToDo (erikdebruin): VF2JS -> handle XML output properly...
-
- write("'" + s + "'");
-
- isWritten = true;
- }
- s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
- s = s.replaceAll("\r", "__CR_PLACEHOLDER__");
- s = s.replaceAll("\t", "__TAB_PLACEHOLDER__");
- s = s.replaceAll("\f", "__FORMFEED_PLACEHOLDER__");
- s = s.replaceAll("\b", "__BACKSPACE_PLACEHOLDER__");
- s = s.replaceAll("\\\\\"", "__QUOTE_PLACEHOLDER__");
- s = s.replaceAll("\\\\", "__ESCAPE_PLACEHOLDER__");
- //s = "\'" + s.replaceAll("\'", "\\\\\'") + "\'";
- s = s.replaceAll("__ESCAPE_PLACEHOLDER__", "\\\\\\\\");
- s = s.replaceAll("__QUOTE_PLACEHOLDER__", "\\\\\"");
- s = s.replaceAll("__BACKSPACE_PLACEHOLDER__", "\\\\b");
- s = s.replaceAll("__FORMFEED_PLACEHOLDER__", "\\\\f");
- s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
- s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
- s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
- }
-
- if (!isWritten)
- {
- write(s);
- }
+ literalEmitter.emit(node);
}
//--------------------------------------------------------------------------
@@ -369,16 +340,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
protected void emitSelfReference(IFunctionNode node)
{
- // we don't want 'var self = this;' in FlexJS
- // unless there are anonymous functions
- if (node.containsAnonymousFunctions())
- {
- writeToken(ASEmitterTokens.VAR);
- writeToken(JSGoogEmitterTokens.SELF);
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.THIS);
- writeNewline(ASEmitterTokens.SEMICOLON);
- }
+ selfReferenceEmitter.emit(node);
}
@Override
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f2b74b68/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
new file mode 100644
index 0000000..8f26374
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/LiteralEmitter.java
@@ -0,0 +1,74 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
+import org.apache.flex.compiler.tree.as.ILiteralNode;
+import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
+
+public class LiteralEmitter extends JSSubEmitter implements
+ ISubEmitter<ILiteralNode>
+{
+
+ public LiteralEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(ILiteralNode node)
+ {
+ boolean isWritten = false;
+
+ String s = node.getValue(true);
+ if (!(node instanceof RegExpLiteralNode))
+ {
+ if (node.getLiteralType() == LiteralType.XML)
+ {
+ write("'" + s + "'");
+
+ isWritten = true;
+ }
+ s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
+ s = s.replaceAll("\r", "__CR_PLACEHOLDER__");
+ s = s.replaceAll("\t", "__TAB_PLACEHOLDER__");
+ s = s.replaceAll("\f", "__FORMFEED_PLACEHOLDER__");
+ s = s.replaceAll("\b", "__BACKSPACE_PLACEHOLDER__");
+ s = s.replaceAll("\\\\\"", "__QUOTE_PLACEHOLDER__");
+ s = s.replaceAll("\\\\", "__ESCAPE_PLACEHOLDER__");
+ //s = "\'" + s.replaceAll("\'", "\\\\\'") + "\'";
+ s = s.replaceAll("__ESCAPE_PLACEHOLDER__", "\\\\\\\\");
+ s = s.replaceAll("__QUOTE_PLACEHOLDER__", "\\\\\"");
+ s = s.replaceAll("__BACKSPACE_PLACEHOLDER__", "\\\\b");
+ s = s.replaceAll("__FORMFEED_PLACEHOLDER__", "\\\\f");
+ s = s.replaceAll("__TAB_PLACEHOLDER__", "\\\\t");
+ s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
+ s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
+ }
+
+ if (!isWritten)
+ {
+ write(s);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/f2b74b68/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SelfReferenceEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SelfReferenceEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SelfReferenceEmitter.java
new file mode 100644
index 0000000..0d7849c
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/SelfReferenceEmitter.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.internal.codegen.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+
+public class SelfReferenceEmitter extends JSSubEmitter implements
+ ISubEmitter<IFunctionNode>
+{
+
+ public SelfReferenceEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IFunctionNode node)
+ {
+ // we don't want 'var self = this;' in FlexJS
+ // unless there are anonymous functions
+ if (node.containsAnonymousFunctions())
+ {
+ writeToken(ASEmitterTokens.VAR);
+ writeToken(JSGoogEmitterTokens.SELF);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.THIS);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ }
+ }
+}
[42/42] git commit: [flex-falcon] [refs/heads/develop] - handle
simple cases with no superclass
Posted by ah...@apache.org.
handle simple cases with no superclass
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/06a2533b
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/06a2533b
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/06a2533b
Branch: refs/heads/develop
Commit: 06a2533bbe9f124a06e71b953bfc1ef3cfb49d6a
Parents: 66d489b
Author: Alex Harui <ah...@apache.org>
Authored: Wed Jun 3 23:05:54 2015 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Jun 3 23:05:54 2015 -0700
----------------------------------------------------------------------
.../compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java | 2 +-
.../flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/06a2533b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
index b7ba9bd..99b355b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSDocEmitter.java
@@ -117,7 +117,7 @@ public class JSFlexJSDocEmitter extends JSGoogDocEmitter
IClassDefinition parent = (IClassDefinition) node
.getDefinition().getParent();
IClassDefinition superClass = parent.resolveBaseClass(project);
- String qname = superClass.getQualifiedName();
+ String qname = (superClass != null) ? superClass.getQualifiedName() : null;
if (superClass != null
&& !qname.equals(IASLanguageConstants.Object))
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/06a2533b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
index c0a1241..3bea2e9 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSDocEmitter.java
@@ -75,7 +75,7 @@ public class JSVF2JSDocEmitter extends JSGoogDocEmitter
IClassDefinition parent = (IClassDefinition) node
.getDefinition().getParent();
IClassDefinition superClass = parent.resolveBaseClass(project);
- String qname = superClass.getQualifiedName();
+ String qname = (superClass != null) ? superClass.getQualifiedName() : null;
if (superClass != null
&& !qname.equals(IASLanguageConstants.Object))
[41/42] git commit: [flex-falcon] [refs/heads/develop] - Merge branch
'IDEA-FLEX_JS_COMPILER' into develop
Posted by ah...@apache.org.
Merge branch 'IDEA-FLEX_JS_COMPILER' into develop
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/66d489bf
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/66d489bf
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/66d489bf
Branch: refs/heads/develop
Commit: 66d489bfcd155ab64c499a1bfa4c0ae32bb0e6d6
Parents: fc1fe38 d6162d0
Author: Alex Harui <ah...@apache.org>
Authored: Wed Jun 3 22:48:34 2015 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Wed Jun 3 22:48:34 2015 -0700
----------------------------------------------------------------------
build.xml | 6 +-
.../apache/flex/compiler/clients/MXMLJSC.java | 103 ++----
.../apache/flex/compiler/clients/COMPJSC.java | 44 +--
.../compiler/clients/JSCompilerEntryPoint.java | 29 ++
.../apache/flex/compiler/clients/MXMLJSC.java | 69 ++--
.../mxml/flexjs/MXMLFlexJSPublisher.java | 2 +-
.../compiler/internal/graph/GoogDepsWriter.java | 14 +-
.../clients/problems/ProblemQueryProvider.java | 24 ++
.../src/org/apache/flex/utils/ArgumentUtil.java | 123 +++++++
flex-compiler-oem/build.xml | 35 +-
.../src/flex2/compiler/CompilerAPI.java | 55 +++-
.../compiler/common/LocalFilePathResolver.java | 83 +++++
.../config/CommandLineConfigurator.java | 7 +-
.../src/flex2/compiler/io/NetworkFile.java | 148 +++++++++
.../src/flex2/compiler/util/ManifestParser.java | 239 ++++++++++++++
.../src/flex2/compiler/util/NameMappings.java | 183 +++++++++++
.../flex2/compiler/util/ThreadLocalToolkit.java | 7 +-
.../flex2/compiler/util/URLPathResolver.java | 75 +++++
flex-compiler-oem/src/flex2/tools/CompJSC.java | 37 +++
flex-compiler-oem/src/flex2/tools/Compc.java | 53 +++
flex-compiler-oem/src/flex2/tools/MxmlJSC.java | 92 ++++++
flex-compiler-oem/src/flex2/tools/Mxmlc.java | 324 +++++++++++++++++++
flex-compiler-oem/src/flex2/tools/Tool.java | 316 ++++++++++++++++++
23 files changed, 1871 insertions(+), 197 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/66d489bf/build.xml
----------------------------------------------------------------------
[02/42] git commit: [flex-falcon] [refs/heads/develop] - Adjust the
build: - Uses swfutils.jar from the Flex SDK - Creates a compc.jar to make
IntelliJ happy
Posted by ah...@apache.org.
Adjust the build:
- Uses swfutils.jar from the Flex SDK
- Creates a compc.jar to make IntelliJ happy
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/673da18b
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/673da18b
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/673da18b
Branch: refs/heads/develop
Commit: 673da18b1a83b40fcbf207a567ccb631ac903575
Parents: 6ddfb7b
Author: Frédéric THOMAS <we...@gmail.com>
Authored: Thu May 28 15:24:20 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Thu May 28 18:15:52 2015 +0100
----------------------------------------------------------------------
build.xml | 6 +++---
flex-compiler-oem/build.xml | 36 ++++++++++++++++++++++++++++++++----
2 files changed, 35 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/673da18b/build.xml
----------------------------------------------------------------------
diff --git a/build.xml b/build.xml
index 3a8b300..7447397 100644
--- a/build.xml
+++ b/build.xml
@@ -66,7 +66,7 @@
<ant dir="compiler" target="sdk"/>
</target>
- <target name="main" depends="sdk, javadoc, tests" description="Default target - Builds a Falcon SDK, builds Falcon Javadoc, and runs tests."/>
+ <target name="main" depends="sdk, javadoc" description="Default target - Builds a Falcon SDK, builds Falcon Javadoc, and runs tests."/>
<target name="all" depends="main, jx, oem" description="Builds Falcon, then FalconJX"/>
@@ -82,7 +82,7 @@
<ant dir="compiler.tests" target="main"/>
</target>
- <target name="compiler.oem" depends="swfutils" description="Builds FB Integration JAR">
+ <target name="compiler.oem" depends="compiler.jx, swfutils" description="Builds FB Integration JAR">
<ant dir="flex-compiler-oem" target="main"/>
</target>
@@ -136,7 +136,7 @@
<available file="swfutils"
type="dir"
property="swfutils.bundled"
- value="true" />
+ value="false" />
</target>
<target name="compiler.jx" description="Builds FalconJX.">
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/673da18b/flex-compiler-oem/build.xml
----------------------------------------------------------------------
diff --git a/flex-compiler-oem/build.xml b/flex-compiler-oem/build.xml
index cded834..5e778e3 100644
--- a/flex-compiler-oem/build.xml
+++ b/flex-compiler-oem/build.xml
@@ -43,7 +43,6 @@
<!-- set FLEX_HOME from environment if not already set -->
<property name="FLEX_HOME" value="${env.FLEX_HOME}"/>
-
<!-- The 'sdk' property is the absolute path, with forward slashes, to the compiler/generated/dist/sdk directory -->
<!-- where a Falcon SDK is built -->
@@ -79,6 +78,8 @@
<path id="classpath">
<fileset dir="${sdk}/lib" includes="**/*.jar"/>
+ <fileset dir="../compiler.jx/lib" includes="jsc.jar"/>
+ <fileset dir="${FLEX_HOME}/lib" includes="swfutils.jar"/>
</path>
@@ -98,7 +99,6 @@
source="${javac.src}" target="${javac.src}"
includes="**/*.java" destdir="${oem}/bin" classpathref="classpath" includeAntRuntime="true">
<src path="${oem}/src"/>
- <src path="${basedir}/../swfutils/src"/>
</javac>
<!--
<copy todir="${compiler}/generated/classes">
@@ -106,6 +106,33 @@
</copy>
-->
</target>
+
+
+ <target name="set.compc.jar.uptodate">
+ <uptodate property="compc.jar.uptodate"
+ targetfile="${sdk}/lib/compc.jar">
+ <srcfiles dir="${compiler}/generated/classes">
+ <include name="**/*.class"/>
+ <include name="**/*.properties"/>
+ </srcfiles>
+ </uptodate>
+ </target>
+
+ <target name="compc.jar" depends="oem.jar,set.compc.jar.uptodate" unless="compc.jar.uptodate">
+ <mkdir dir="${sdk}/lib"/>
+ <jar file="${sdk}/lib/compc.jar" basedir="${compiler}/generated/classes" whenmanifestonly="create">
+ <include name="META-INF/LICENSE"/>
+ <include name="META-INF/NOTICE"/>
+ <manifest>
+ <attribute name="Sealed" value="${manifest.sealed}"/>
+ <attribute name="Implementation-Title" value="${manifest.Implementation-Title} - COMPC Command Line Compiler"/>
+ <attribute name="Implementation-Version" value="${manifest.Implementation-Version}.${build.number}"/>
+ <attribute name="Implementation-Vendor" value="${manifest.Implementation-Vendor}"/>
+ <attribute name="Main-Class" value="flex2.tools.Compc"/>
+ <attribute name="Class-Path" value="flex-compiler-oem.jar"/>
+ </manifest>
+ </jar>
+ </target>
<target name="set.oem.jar.uptodate">
<uptodate property="oem.jar.uptodate"
@@ -126,12 +153,13 @@
<attribute name="Implementation-Title" value="${manifest.Implementation-Title}"/>
<attribute name="Implementation-Version" value="${manifest.Implementation-Version}.${build.number}"/>
<attribute name="Implementation-Vendor" value="${manifest.Implementation-Vendor}"/>
- <attribute name="Class-Path" value="falcon-mxmlc.jar falcon-compc.jar swfutils.jar"/>
+ <attribute name="Main-Class" value="flex2.tools.Mxmlc"/>
+ <attribute name="Class-Path" value="compiler.jar swfutils.jar ../js/lib/jsc.jar"/>
</manifest>
</jar>
</target>
- <target name="jar" depends="oem.jar"
+ <target name="jar" depends="oem.jar, compc.jar"
description="Creates JAR files"/>
<target name="sdk" depends="jar" description="Builds a Falcon SDK"/>
[11/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
function calls to FunctionCallEmitter.
Posted by ah...@apache.org.
- Refactored function calls to FunctionCallEmitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/62b62ec2
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/62b62ec2
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/62b62ec2
Branch: refs/heads/develop
Commit: 62b62ec2f342de90cbacb81af58266fd5b7bc734
Parents: 1b86402
Author: Michael Schmalle <ms...@apache.org>
Authored: Sat May 30 18:07:05 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:13 2015 +0100
----------------------------------------------------------------------
.../compiler/internal/codegen/as/ASEmitter.java | 2 +-
.../internal/codegen/js/JSSessionModel.java | 12 +-
.../internal/codegen/js/JSSubEmitter.java | 6 +
.../internal/codegen/js/amd/JSAMDEmitter.java | 2 +-
.../codegen/js/flexjs/JSFlexJSEmitter.java | 90 ++-----------
.../internal/codegen/js/goog/JSGoogEmitter.java | 20 ++-
.../codegen/js/jx/FunctionCallEmitter.java | 125 +++++++++++++++++++
.../codegen/js/vf2js/JSVF2JSEmitter.java | 15 +--
8 files changed, 165 insertions(+), 107 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
index 423571b..84d1ac5 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/as/ASEmitter.java
@@ -1144,7 +1144,7 @@ public class ASEmitter implements IASEmitter, IEmitter
return null;
}
- protected void walkArguments(IExpressionNode[] nodes)
+ public void walkArguments(IExpressionNode[] nodes)
{
int len = nodes.length;
for (int i = 0; i < len; i++)
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
index 97cc52b..ba8df11 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSessionModel.java
@@ -32,6 +32,10 @@ import org.apache.flex.compiler.tree.as.ISetterNode;
*/
public class JSSessionModel
{
+ public static final String CONSTRUCTOR_EMPTY = "emptyConstructor";
+ public static final String CONSTRUCTOR_FULL = "fullConstructor";
+ public static final String SUPER_FUNCTION_CALL = "replaceSuperFunction";
+
private IClassDefinition currentClass;
public static class PropertyNodes
@@ -41,9 +45,9 @@ public class JSSessionModel
}
private HashMap<String, PropertyNodes> propertyMap = new HashMap<String, PropertyNodes>();
-
+
private HashMap<String, PropertyNodes> staticPropertyMap = new HashMap<String, PropertyNodes>();
-
+
private ArrayList<String> bindableVars = new ArrayList<String>();
public IClassDefinition getCurrentClass()
@@ -60,12 +64,12 @@ public class JSSessionModel
{
return propertyMap;
}
-
+
public HashMap<String, PropertyNodes> getStaticPropertyMap()
{
return staticPropertyMap;
}
-
+
public boolean hasBindableVars()
{
return bindableVars.size() > 0;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
index 00ed207..e4a413f 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/JSSubEmitter.java
@@ -22,6 +22,7 @@ package org.apache.flex.compiler.internal.codegen.js;
import org.apache.flex.compiler.codegen.IEmitterTokens;
import org.apache.flex.compiler.codegen.js.IJSEmitter;
import org.apache.flex.compiler.projects.ICompilerProject;
+import org.apache.flex.compiler.visitor.IBlockWalker;
public class JSSubEmitter
{
@@ -32,6 +33,11 @@ public class JSSubEmitter
return emitter;
}
+ protected IBlockWalker getWalker()
+ {
+ return emitter.getWalker();
+ }
+
protected ICompilerProject getProject()
{
return emitter.getWalker().getProject();
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
index 8dcbb2c..3f77efc 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/amd/JSAMDEmitter.java
@@ -783,7 +783,7 @@ public class JSAMDEmitter extends JSEmitter implements IJSAMDEmitter
}
@Override
- protected void walkArguments(IExpressionNode[] nodes)
+ public void walkArguments(IExpressionNode[] nodes)
{
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index ec5c2db..4f5a57e 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -30,7 +30,6 @@ import java.util.Set;
import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
import org.apache.flex.compiler.clients.MXMLJSC;
import org.apache.flex.compiler.clients.MXMLJSC.JSOutputType;
-import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants;
import org.apache.flex.compiler.codegen.IDocEmitter;
import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
import org.apache.flex.compiler.common.ASModifier;
@@ -45,15 +44,16 @@ import org.apache.flex.compiler.definitions.IPackageDefinition;
import org.apache.flex.compiler.definitions.ITypeDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
import org.apache.flex.compiler.internal.definitions.ClassDefinition;
import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
-import org.apache.flex.compiler.internal.definitions.InterfaceDefinition;
import org.apache.flex.compiler.internal.definitions.ParameterDefinition;
import org.apache.flex.compiler.internal.definitions.VariableDefinition;
import org.apache.flex.compiler.internal.projects.CompilerProject;
@@ -113,6 +113,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
private ClassEmitter classEmitter;
private FieldEmitter fieldEmitter;
+ private FunctionCallEmitter functionCallEmitter;
public ClassEmitter getClassEmiter()
{
@@ -125,6 +126,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
classEmitter = new ClassEmitter(this);
fieldEmitter = new FieldEmitter(this);
+ functionCallEmitter = new FunctionCallEmitter(this);
}
@Override
@@ -228,83 +230,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitFunctionCall(IFunctionCallNode node)
{
- IASNode cnode = node.getChild(0);
-
- if (cnode.getNodeID() == ASTNodeID.MemberAccessExpressionID)
- cnode = cnode.getChild(0);
-
- ASTNodeID id = cnode.getNodeID();
- if (id != ASTNodeID.SuperID)
- {
- ICompilerProject project = null;
- IDefinition def = null;
-
- boolean isClassCast = false;
-
- if (node.isNewExpression())
- {
- writeToken(ASEmitterTokens.NEW);
- }
- else
- {
- if (project == null)
- project = getWalker().getProject();
-
- def = node.getNameNode().resolve(project);
-
- isClassCast = (def instanceof ClassDefinition || def instanceof InterfaceDefinition)
- && !(NativeUtils.isJSNative(def.getBaseName()));
- }
-
- if (node.isNewExpression())
- {
- if (project == null)
- project = getWalker().getProject();
-
- def = node.resolveCalledExpression(project);
- // all new calls to a class should be fully qualified names
- if (def instanceof ClassDefinition)
- write(formatQualifiedName(def.getQualifiedName()));
- else
- // I think we still need this for "new someVarOfTypeClass"
- getWalker().walk(node.getNameNode());
- write(ASEmitterTokens.PAREN_OPEN);
- walkArguments(node.getArgumentNodes());
- write(ASEmitterTokens.PAREN_CLOSE);
- }
- else if (!isClassCast)
- {
- if (def != null)
- {
- boolean isInt = def.getBaseName().equals(
- IASGlobalFunctionConstants._int);
- if (isInt
- || def.getBaseName().equals(
- IASGlobalFunctionConstants.trace)
- || def.getBaseName().equals(
- IASGlobalFunctionConstants.uint))
- {
- write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
- write(ASEmitterTokens.MEMBER_ACCESS);
- if (isInt)
- write(JSFlexJSEmitterTokens.UNDERSCORE);
- }
- }
- getWalker().walk(node.getNameNode());
- write(ASEmitterTokens.PAREN_OPEN);
- walkArguments(node.getArgumentNodes());
- write(ASEmitterTokens.PAREN_CLOSE);
- }
- else
- {
- emitIsAs(node.getArgumentNodes()[0], node.getNameNode(),
- ASTNodeID.Op_AsID, true);
- }
- }
- else
- {
- emitSuperCall(node, SUPER_FUNCTION_CALL);
- }
+ functionCallEmitter.emit(node);
}
//--------------------------------------------------------------------------
@@ -524,7 +450,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
//--------------------------------------------------------------------------
@Override
- protected void emitSuperCall(IASNode node, String type)
+ public void emitSuperCall(IASNode node, String type)
{
IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
: null;
@@ -533,7 +459,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
final IClassDefinition thisClass = getModel().getCurrentClass();
- if (type == SUPER_FUNCTION_CALL)
+ if (type == JSSessionModel.SUPER_FUNCTION_CALL)
{
if (fnode == null)
fnode = (IFunctionNode) fcnode
@@ -772,7 +698,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
}
- private void emitIsAs(IExpressionNode left, IExpressionNode right,
+ public void emitIsAs(IExpressionNode left, IExpressionNode right,
ASTNodeID id, boolean coercion)
{
// project is null in unit tests
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index db88672..530a381 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -40,6 +40,7 @@ import org.apache.flex.compiler.definitions.ITypeDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitter;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
import org.apache.flex.compiler.internal.codegen.js.utils.EmitterUtils;
import org.apache.flex.compiler.internal.definitions.ClassDefinition;
import org.apache.flex.compiler.internal.scopes.PackageScope;
@@ -82,11 +83,6 @@ import org.apache.flex.compiler.utils.ASNodeUtils;
*/
public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
{
-
- protected static final String CONSTRUCTOR_EMPTY = "emptyConstructor";
- protected static final String CONSTRUCTOR_FULL = "fullConstructor";
- protected static final String SUPER_FUNCTION_CALL = "replaceSuperFunction";
-
protected List<String> propertyNames = new ArrayList<String>();
public ICompilerProject project;
@@ -490,7 +486,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
write(ASEmitterTokens.SPACE);
write(ASEmitterTokens.BLOCK_OPEN);
if (hasSuperClass)
- emitSuperCall(node, CONSTRUCTOR_EMPTY);
+ emitSuperCall(node, JSSessionModel.CONSTRUCTOR_EMPTY);
writeNewline();
write(ASEmitterTokens.BLOCK_CLOSE);
}
@@ -536,7 +532,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
else
{
- emitSuperCall(node, SUPER_FUNCTION_CALL);
+ emitSuperCall(node, JSSessionModel.SUPER_FUNCTION_CALL);
}
}
@@ -624,7 +620,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
if (node.isConstructor() && hasSuperClass(node)
&& !hasSuperCall(node.getScopedNode()))
- emitSuperCall(node, CONSTRUCTOR_FULL);
+ emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
emitRestParameterCodeBlock(node);
@@ -647,13 +643,13 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
: null;
- if (type == CONSTRUCTOR_EMPTY)
+ if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
{
indentPush();
writeNewline();
indentPop();
}
- else if (type == SUPER_FUNCTION_CALL)
+ else if (type == JSSessionModel.SUPER_FUNCTION_CALL)
{
if (fnode == null)
fnode = (IFunctionNode) fcnode
@@ -722,12 +718,12 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
write(ASEmitterTokens.PAREN_CLOSE);
- if (type == CONSTRUCTOR_FULL)
+ if (type == JSSessionModel.CONSTRUCTOR_FULL)
{
write(ASEmitterTokens.SEMICOLON);
writeNewline();
}
- else if (type == CONSTRUCTOR_EMPTY)
+ else if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
{
write(ASEmitterTokens.SEMICOLON);
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
new file mode 100644
index 0000000..00bdf18
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/FunctionCallEmitter.java
@@ -0,0 +1,125 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.IASGlobalFunctionConstants;
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.definitions.ClassDefinition;
+import org.apache.flex.compiler.internal.definitions.InterfaceDefinition;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IFunctionCallNode;
+import org.apache.flex.compiler.utils.NativeUtils;
+
+public class FunctionCallEmitter extends JSSubEmitter implements
+ ISubEmitter<IFunctionCallNode>
+{
+
+ public FunctionCallEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IFunctionCallNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ IASNode cnode = node.getChild(0);
+
+ if (cnode.getNodeID() == ASTNodeID.MemberAccessExpressionID)
+ cnode = cnode.getChild(0);
+
+ ASTNodeID id = cnode.getNodeID();
+ if (id != ASTNodeID.SuperID)
+ {
+ IDefinition def = null;
+
+ boolean isClassCast = false;
+
+ if (node.isNewExpression())
+ {
+ writeToken(ASEmitterTokens.NEW);
+ }
+ else
+ {
+ def = node.getNameNode().resolve(getProject());
+
+ isClassCast = (def instanceof ClassDefinition || def instanceof InterfaceDefinition)
+ && !(NativeUtils.isJSNative(def.getBaseName()));
+ }
+
+ if (node.isNewExpression())
+ {
+ def = node.resolveCalledExpression(getProject());
+ // all new calls to a class should be fully qualified names
+ if (def instanceof ClassDefinition)
+ write(fjs.formatQualifiedName(def.getQualifiedName()));
+ else
+ // I think we still need this for "new someVarOfTypeClass"
+ fjs.getWalker().walk(node.getNameNode());
+ write(ASEmitterTokens.PAREN_OPEN);
+ fjs.walkArguments(node.getArgumentNodes());
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+ else if (!isClassCast)
+ {
+ if (def != null)
+ {
+ boolean isInt = def.getBaseName().equals(
+ IASGlobalFunctionConstants._int);
+ if (isInt
+ || def.getBaseName().equals(
+ IASGlobalFunctionConstants.trace)
+ || def.getBaseName().equals(
+ IASGlobalFunctionConstants.uint))
+ {
+ write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ if (isInt)
+ write(JSFlexJSEmitterTokens.UNDERSCORE);
+ }
+ }
+ getWalker().walk(node.getNameNode());
+ write(ASEmitterTokens.PAREN_OPEN);
+ fjs.walkArguments(node.getArgumentNodes());
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+ else
+ {
+ fjs.emitIsAs(node.getArgumentNodes()[0], node.getNameNode(),
+ ASTNodeID.Op_AsID, true);
+ }
+ }
+ else
+ {
+ fjs.emitSuperCall(node, JSSessionModel.SUPER_FUNCTION_CALL);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/62b62ec2/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index 033215a..b11193b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -44,6 +44,7 @@ import org.apache.flex.compiler.definitions.IParameterDefinition;
import org.apache.flex.compiler.definitions.ITypeDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel;
import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
@@ -281,7 +282,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
if (node.isConstructor()
&& hasSuperClass(node) && !hasSuperCall(node.getScopedNode()))
- emitSuperCall(node, CONSTRUCTOR_FULL);
+ emitSuperCall(node, JSSessionModel.CONSTRUCTOR_FULL);
}
private void emitVarNonLiteralAssignments()
@@ -542,7 +543,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
emitVarNonLiteralAssignments();
if (hasSuperClass)
{
- emitSuperCall(node, CONSTRUCTOR_EMPTY);
+ emitSuperCall(node, JSSessionModel.CONSTRUCTOR_EMPTY);
writeNewline();
}
write(ASEmitterTokens.BLOCK_CLOSE);
@@ -669,7 +670,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
}
else
{
- emitSuperCall(node, SUPER_FUNCTION_CALL);
+ emitSuperCall(node, JSSessionModel.SUPER_FUNCTION_CALL);
}
}
@@ -1002,13 +1003,13 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
: null;
- if (type == CONSTRUCTOR_EMPTY)
+ if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
{
indentPush();
writeNewline();
indentPop();
}
- else if (type == SUPER_FUNCTION_CALL)
+ else if (type == JSSessionModel.SUPER_FUNCTION_CALL)
{
if (fnode == null)
fnode = (IFunctionNode) fcnode
@@ -1141,12 +1142,12 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
write(ASEmitterTokens.PAREN_CLOSE);
- if (type == CONSTRUCTOR_FULL)
+ if (type == JSSessionModel.CONSTRUCTOR_FULL)
{
write(ASEmitterTokens.SEMICOLON);
writeNewline();
}
- else if (type == CONSTRUCTOR_EMPTY)
+ else if (type == JSSessionModel.CONSTRUCTOR_EMPTY)
{
write(ASEmitterTokens.SEMICOLON);
}
[07/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
Class emitting into shared jx package for future use. - Refactored Bindable
class level emittion;
- Refactored GetSet class level emition - Created a shared model for each
emitter sess
Posted by ah...@apache.org.
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
new file mode 100644
index 0000000..1800afa
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ClassEmitter.java
@@ -0,0 +1,156 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.asdoc.flexjs.ASDocComment;
+import org.apache.flex.compiler.clients.MXMLJSC;
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.utils.DocEmitterUtils;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
+import org.apache.flex.compiler.tree.as.IClassNode;
+import org.apache.flex.compiler.tree.as.IDefinitionNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+
+public class ClassEmitter extends JSSubEmitter implements
+ ISubEmitter<IClassNode>
+{
+ private BindableEmitter bindableEmitter;
+ private GetSetEmitter getSetEmitter;
+
+ public BindableEmitter getBindableEmitter()
+ {
+ return bindableEmitter;
+ }
+
+ public GetSetEmitter getGetSetEmitter()
+ {
+ return getSetEmitter;
+ }
+
+ public ClassEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+
+ bindableEmitter = new BindableEmitter(emitter);
+ getSetEmitter = new GetSetEmitter(emitter);
+ }
+
+ @Override
+ public void emit(IClassNode node)
+ {
+ getModel().setCurrentClass(node.getDefinition());
+
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ ASDocComment asDoc = (ASDocComment) node.getASDocComment();
+ if (asDoc != null && MXMLJSC.keepASDoc)
+ DocEmitterUtils.loadImportIgnores(fjs, asDoc.commentNoEnd());
+
+ IClassDefinition definition = node.getDefinition();
+
+ IFunctionDefinition ctorDefinition = definition.getConstructor();
+
+ // Static-only (Singleton) classes may not have a constructor
+ if (ctorDefinition != null)
+ {
+ IFunctionNode ctorNode = (IFunctionNode) ctorDefinition.getNode();
+ if (ctorNode != null)
+ {
+ // constructor
+ getEmitter().emitMethod(ctorNode);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ else
+ {
+ String qname = definition.getQualifiedName();
+ if (qname != null && !qname.equals(""))
+ {
+ write(fjs.formatQualifiedName(qname));
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ }
+ }
+
+ IDefinitionNode[] dnodes = node.getAllMemberNodes();
+ for (IDefinitionNode dnode : dnodes)
+ {
+ if (dnode.getNodeID() == ASTNodeID.VariableID)
+ {
+ writeNewline();
+ writeNewline();
+ writeNewline();
+ getEmitter().emitField((IVariableNode) dnode);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ else if (dnode.getNodeID() == ASTNodeID.FunctionID)
+ {
+ if (!((IFunctionNode) dnode).isConstructor())
+ {
+ writeNewline();
+ writeNewline();
+ writeNewline();
+ getEmitter().emitMethod((IFunctionNode) dnode);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ }
+ else if (dnode.getNodeID() == ASTNodeID.GetterID
+ || dnode.getNodeID() == ASTNodeID.SetterID)
+ {
+ //writeNewline();
+ //writeNewline();
+ //writeNewline();
+ fjs.emitAccessors((IAccessorNode) dnode);
+ //this shouldn't write anything, just set up
+ //a data structure for emitASGettersAndSetters
+ //write(ASEmitterTokens.SEMICOLON);
+ }
+ else if (dnode.getNodeID() == ASTNodeID.BindableVariableID)
+ {
+ writeNewline();
+ writeNewline();
+ writeNewline();
+ getEmitter().emitField((IVariableNode) dnode);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ }
+
+ bindableEmitter.emit(definition);
+
+ getSetEmitter.emit(definition);
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
new file mode 100644
index 0000000..c4db6fa
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/GetSetEmitter.java
@@ -0,0 +1,195 @@
+/*
+ *
+ * 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.js.jx;
+
+import java.util.Set;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+
+public class GetSetEmitter extends JSSubEmitter implements
+ ISubEmitter<IClassDefinition>
+{
+
+ public GetSetEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IClassDefinition definition)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ if (!getModel().getPropertyMap().isEmpty())
+ {
+ writeNewline();
+ writeNewline();
+ writeNewline();
+ write(JSGoogEmitterTokens.OBJECT);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.DEFINE_PROPERTIES);
+ write(ASEmitterTokens.PAREN_OPEN);
+ String qname = definition.getQualifiedName();
+ write(fjs.formatQualifiedName(qname));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ write(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SPACE);
+ write("/** @lends {" + fjs.formatQualifiedName(qname)
+ + ".prototype} */ ");
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+ Set<String> propertyNames = getModel().getPropertyMap().keySet();
+ boolean firstTime = true;
+ for (String propName : propertyNames)
+ {
+ if (firstTime)
+ firstTime = false;
+ else
+ writeNewline(ASEmitterTokens.COMMA);
+
+ PropertyNodes p = getModel().getPropertyMap().get(propName);
+ writeNewline("/** @expose */");
+ write(propName);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+ if (p.getter != null)
+ {
+ write(ASEmitterTokens.GET);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ write(JSDocEmitterTokens.JSDOC_OPEN);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.ATSIGN);
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ write(fjs.formatQualifiedName(qname));
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(JSDocEmitterTokens.JSDOC_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(p.getter.getParameterNodes());
+
+ fjs.emitDefinePropertyFunction(p.getter);
+ }
+ if (p.setter != null)
+ {
+ if (p.getter != null)
+ writeNewline(ASEmitterTokens.COMMA);
+
+ write(ASEmitterTokens.SET);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ write(JSDocEmitterTokens.JSDOC_OPEN);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.ATSIGN);
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ write(fjs.formatQualifiedName(qname));
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(JSDocEmitterTokens.JSDOC_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(p.setter.getParameterNodes());
+
+ fjs.emitDefinePropertyFunction(p.setter);
+ }
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ }
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ if (!getModel().getStaticPropertyMap().isEmpty())
+ {
+ write(JSGoogEmitterTokens.OBJECT);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.DEFINE_PROPERTIES);
+ write(ASEmitterTokens.PAREN_OPEN);
+ String qname = definition.getQualifiedName();
+ write(fjs.formatQualifiedName(qname));
+ write(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SPACE);
+ write("/** @lends {" + fjs.formatQualifiedName(qname) + "} */ ");
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+ Set<String> propertyNames = getModel().getStaticPropertyMap()
+ .keySet();
+ boolean firstTime = true;
+ for (String propName : propertyNames)
+ {
+ if (firstTime)
+ firstTime = false;
+ else
+ writeNewline(ASEmitterTokens.COMMA);
+
+ PropertyNodes p = getModel().getStaticPropertyMap().get(
+ propName);
+ writeNewline("/** @expose */");
+ write(propName);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+ if (p.getter != null)
+ {
+ write(ASEmitterTokens.GET);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(p.getter.getParameterNodes());
+
+ fjs.emitDefinePropertyFunction(p.getter);
+ }
+ if (p.setter != null)
+ {
+ if (p.getter != null)
+ writeNewline(ASEmitterTokens.COMMA);
+
+ write(ASEmitterTokens.SET);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(p.setter.getParameterNodes());
+
+ fjs.emitDefinePropertyFunction(p.setter);
+ }
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ }
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/DocEmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/DocEmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/DocEmitterUtils.java
new file mode 100644
index 0000000..7d7bf16
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/DocEmitterUtils.java
@@ -0,0 +1,49 @@
+/*
+ *
+ * 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.js.utils;
+
+import java.util.ArrayList;
+
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSDocEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitterTokens;
+
+public class DocEmitterUtils
+{
+ public static void loadImportIgnores(JSFlexJSEmitter emitter, String doc)
+ {
+ ArrayList<String> ignoreList = new ArrayList<String>();
+ String ignoreToken = JSFlexJSEmitterTokens.IGNORE_IMPORT.getToken();
+ int index = doc.indexOf(ignoreToken);
+ while (index != -1)
+ {
+ String ignorable = doc.substring(index + ignoreToken.length());
+ int endIndex = ignorable.indexOf("\n");
+ ignorable = ignorable.substring(0, endIndex);
+ ignorable = ignorable.trim();
+ ignoreList.add(ignorable);
+ System.out.println("Found ignorable: " + ignorable);
+ index = doc.indexOf(ignoreToken, index + endIndex);
+ }
+
+ // TODO (mschmalle)
+ ((JSFlexJSDocEmitter)emitter.getDocEmitter()).setClassIgnoreList(ignoreList);
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
new file mode 100644
index 0000000..94a2120
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/utils/EmitterUtils.java
@@ -0,0 +1,121 @@
+/*
+ *
+ * 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.js.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.flex.compiler.constants.IASLanguageConstants;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.definitions.IDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.internal.definitions.ClassDefinition;
+import org.apache.flex.compiler.projects.ICompilerProject;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IASNode;
+import org.apache.flex.compiler.tree.as.IDefinitionNode;
+import org.apache.flex.compiler.tree.as.IFunctionNode;
+import org.apache.flex.compiler.tree.as.IScopedNode;
+
+/**
+ * Various static methods used in shared emitter logic.
+ */
+public class EmitterUtils
+{
+ public static boolean isSameClass(IDefinition pdef, IDefinition thisClass,
+ ICompilerProject project)
+ {
+ if (pdef == thisClass)
+ return true;
+
+ IDefinition cdef = ((ClassDefinition) thisClass)
+ .resolveBaseClass(project);
+ while (cdef != null)
+ {
+ // needs to be a loop
+ if (cdef == pdef)
+ return true;
+ cdef = ((ClassDefinition) cdef).resolveBaseClass(project);
+ }
+ return false;
+ }
+
+ public static boolean hasSuperClass(ICompilerProject project,
+ IDefinitionNode node)
+ {
+ IClassDefinition superClassDefinition = getSuperClassDefinition(node,
+ project);
+ // XXX (mschmalle) this is nulling for MXML super class, figure out why
+ if (superClassDefinition == null)
+ return false;
+ String qname = superClassDefinition.getQualifiedName();
+ return superClassDefinition != null
+ && !qname.equals(IASLanguageConstants.Object);
+ }
+
+ public static boolean hasSuperCall(IScopedNode node)
+ {
+ for (int i = node.getChildCount() - 1; i > -1; i--)
+ {
+ IASNode cnode = node.getChild(i);
+ if (cnode.getNodeID() == ASTNodeID.FunctionCallID
+ && cnode.getChild(0).getNodeID() == ASTNodeID.SuperID)
+ return true;
+ }
+
+ return false;
+ }
+
+ public static boolean hasBody(IFunctionNode node)
+ {
+ IScopedNode scope = node.getScopedNode();
+ return scope.getChildCount() > 0;
+ }
+
+ public static IClassDefinition getSuperClassDefinition(
+ IDefinitionNode node, ICompilerProject project)
+ {
+ IClassDefinition parent = (IClassDefinition) node.getDefinition()
+ .getParent();
+ IClassDefinition superClass = parent.resolveBaseClass(project);
+ return superClass;
+ }
+
+ public static List<String> resolveImports(ITypeDefinition type)
+ {
+ ArrayList<String> list = new ArrayList<String>();
+ IScopedNode scopeNode = type.getContainedScope().getScopeNode();
+ if (scopeNode != null)
+ {
+ scopeNode.getAllImports(list);
+ }
+ else
+ {
+ // MXML
+ ClassDefinition cdefinition = (ClassDefinition) type;
+ String[] implicitImports = cdefinition.getImplicitImports();
+ for (String imp : implicitImports)
+ {
+ list.add(imp);
+ }
+ }
+ return list;
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
index 9a9a2c5..ea68760 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/vf2js/JSVF2JSEmitter.java
@@ -111,8 +111,6 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
super(out);
}
- public IDefinition thisClass;
-
@Override
protected String getIndent(int numIndent)
{
@@ -131,12 +129,11 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
@Override
public void emitClass(IClassNode node)
{
- thisClass = node.getDefinition();
+ IClassDefinition definition = node.getDefinition();
+ getModel().setCurrentClass(definition);
project = getWalker().getProject();
- IClassDefinition definition = node.getDefinition();
-
IFunctionDefinition ctorDefinition = definition.getConstructor();
// Static-only (Singleton) classes may not have a constructor
@@ -291,7 +288,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
// (erikdebruin): If the initial value of a variable is set using
// a method, JS needs this initialization to be done
// in the constructor
- IClassNode cdnode = (IClassNode) thisClass.getNode();
+ IClassNode cdnode = (IClassNode) getModel().getCurrentClass().getNode();
IDefinitionNode[] dnodes = cdnode.getAllMemberNodes();
for (IDefinitionNode dnode : dnodes)
{
@@ -697,6 +694,7 @@ public class JSVF2JSEmitter extends JSGoogEmitter implements IJSVF2JSEmitter
ASTNodeID parentNodeId = parentNode.getNodeID();
IASNode firstChild = parentNode.getChild(0);
+ IClassDefinition thisClass = getModel().getCurrentClass();
boolean identifierIsMemberAccess = parentNodeId == ASTNodeID.MemberAccessExpressionID;
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
index f7d9c55..4efa7a6 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSEmitter.java
@@ -114,7 +114,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
private StringBuilder subDocuments = new StringBuilder();
private ArrayList<String> subDocumentNames = new ArrayList<String>();
-
+
/**
* This keeps track of the entries in our temporary array of
* DeferredInstanceFromFunction objects that we CG to help with
@@ -184,7 +184,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
classDefinition = cdef;
IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
.getASEmitter();
- ((JSFlexJSEmitter) asEmitter).thisClass = cdef;
+ ((JSFlexJSEmitter) asEmitter).getModel().setCurrentClass(cdef);
// visit tags
final int len = node.getChildCount();
@@ -210,8 +210,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
emitScripts();
- ((JSFlexJSEmitter)asEmitter).emitBindableVariables(cdef);
- ((JSFlexJSEmitter)asEmitter).emitASGettersAndSetters(cdef);
+ ((JSFlexJSEmitter)asEmitter).getClassEmiter().getBindableEmitter().emit(cdef);
+ ((JSFlexJSEmitter)asEmitter).getClassEmiter().getGetSetEmitter().emit(cdef);
emitEvents(cname);
@@ -267,8 +267,8 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
classDefinition = cdef;
IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
.getASEmitter();
- IDefinition oldThisClass = ((JSFlexJSEmitter) asEmitter).thisClass;
- ((JSFlexJSEmitter) asEmitter).thisClass = cdef;
+ IClassDefinition oldThisClass = ((JSFlexJSEmitter) asEmitter).getModel().getCurrentClass();
+ ((JSFlexJSEmitter) asEmitter).getModel().setCurrentClass(cdef);
IASNode classNode = node.getContainedClassDefinitionNode();
// visit tags
@@ -312,7 +312,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
idCounter = oldIdCounter;
inMXMLContent = oldInMXMLContent;
classDefinition = oldClassDef;
- ((JSFlexJSEmitter) asEmitter).thisClass = oldThisClass;
+ ((JSFlexJSEmitter) asEmitter).getModel().setCurrentClass(oldThisClass);
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
index 60702a8..5c2aae0 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
@@ -144,7 +144,7 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
IClassDefinition cdef = node.getClassDefinition();
IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
.getASEmitter();
- ((JSVF2JSEmitter) asEmitter).thisClass = cdef;
+ ((JSVF2JSEmitter) asEmitter).getModel().setCurrentClass(cdef);
// visit tags
final int len = node.getChildCount();
@@ -218,7 +218,7 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
IClassDefinition cdef = node.getContainedClassDefinition();
IASEmitter asEmitter = ((IMXMLBlockWalker) getMXMLWalker())
.getASEmitter();
- ((JSVF2JSEmitter) asEmitter).thisClass = cdef;
+ ((JSVF2JSEmitter) asEmitter).getModel().setCurrentClass(cdef);
IASNode classNode = node.getContainedClassDefinitionNode();
// visit tags
[33/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
define property function into emitter. - Refactored object define property
into emitter.
Posted by ah...@apache.org.
- Refactored define property function into emitter.
- Refactored object define property into emitter.
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/0ca46d2a
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/0ca46d2a
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/0ca46d2a
Branch: refs/heads/develop
Commit: 0ca46d2aac7fe728c455e3cd1ee561cbd71d18af
Parents: e11ef01
Author: Michael Schmalle <ms...@apache.org>
Authored: Sun May 31 15:29:52 2015 -0400
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:41:28 2015 +0100
----------------------------------------------------------------------
.../codegen/js/flexjs/JSFlexJSEmitter.java | 138 ++-------------
.../internal/codegen/js/goog/JSGoogEmitter.java | 2 +
.../js/jx/DefinePropertyFunctionEmitter.java | 120 ++++++++++++++
.../js/jx/ObjectDefinePropertyEmitter.java | 166 +++++++++++++++++++
4 files changed, 299 insertions(+), 127 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0ca46d2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index 66a5731..78f1f0b 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -23,13 +23,8 @@ import java.io.FilterWriter;
import org.apache.flex.compiler.codegen.js.flexjs.IJSFlexJSEmitter;
import org.apache.flex.compiler.codegen.js.goog.IJSGoogDocEmitter;
-import org.apache.flex.compiler.common.ASModifier;
-import org.apache.flex.compiler.common.IMetaInfo;
-import org.apache.flex.compiler.definitions.IFunctionDefinition;
import org.apache.flex.compiler.definitions.IPackageDefinition;
-import org.apache.flex.compiler.definitions.ITypeDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.jx.AccessorEmitter;
@@ -37,6 +32,7 @@ import org.apache.flex.compiler.internal.codegen.js.jx.AsIsEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.BinaryOperatorEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.BindableEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.DefinePropertyFunctionEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FieldEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.ForEachEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.FunctionCallEmitter;
@@ -44,13 +40,12 @@ import org.apache.flex.compiler.internal.codegen.js.jx.IdentifierEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.InterfaceEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.MemberAccessEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.MethodEmitter;
+import org.apache.flex.compiler.internal.codegen.js.jx.ObjectDefinePropertyEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.PackageFooterEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.PackageHeaderEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.SuperCallEmitter;
import org.apache.flex.compiler.internal.codegen.js.jx.VarDeclarationEmitter;
-import org.apache.flex.compiler.internal.tree.as.FunctionNode;
import org.apache.flex.compiler.internal.tree.as.RegExpLiteralNode;
-import org.apache.flex.compiler.internal.tree.as.SetterNode;
import org.apache.flex.compiler.tree.ASTNodeID;
import org.apache.flex.compiler.tree.as.IASNode;
import org.apache.flex.compiler.tree.as.IAccessorNode;
@@ -67,7 +62,6 @@ import org.apache.flex.compiler.tree.as.IInterfaceNode;
import org.apache.flex.compiler.tree.as.ILiteralNode;
import org.apache.flex.compiler.tree.as.ILiteralNode.LiteralType;
import org.apache.flex.compiler.tree.as.IMemberAccessExpressionNode;
-import org.apache.flex.compiler.tree.as.IParameterNode;
import org.apache.flex.compiler.tree.as.ISetterNode;
import org.apache.flex.compiler.tree.as.ITypedExpressionNode;
import org.apache.flex.compiler.tree.as.IVariableNode;
@@ -100,10 +94,13 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
private SuperCallEmitter superCallEmitter;
private ForEachEmitter forEachEmitter;
private MemberAccessEmitter memberAccessEmitter;
- private AsIsEmitter asIsEmitter;
private BinaryOperatorEmitter binaryOperatorEmitter;
private IdentifierEmitter identifierEmitter;
+ private AsIsEmitter asIsEmitter;
+ private ObjectDefinePropertyEmitter objectDefinePropertyEmitter;
+ private DefinePropertyFunctionEmitter definePropertyFunctionEmitter;
+
public BindableEmitter getBindableEmitter()
{
return bindableEmitter;
@@ -152,6 +149,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
asIsEmitter = new AsIsEmitter(this);
binaryOperatorEmitter = new BinaryOperatorEmitter(this);
identifierEmitter = new IdentifierEmitter(this);
+
+ objectDefinePropertyEmitter = new ObjectDefinePropertyEmitter(this);
+ definePropertyFunctionEmitter = new DefinePropertyFunctionEmitter(this);
}
@Override
@@ -384,128 +384,12 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
protected void emitObjectDefineProperty(IAccessorNode node)
{
- //TODO: ajh is this method needed anymore?
-
- FunctionNode fn = (FunctionNode) node;
- fn.parseFunctionBody(getProblems());
-
- IFunctionDefinition definition = node.getDefinition();
- ITypeDefinition type = (ITypeDefinition) definition.getParent();
-
- // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
- if (type == null)
- return;
-
- boolean isBindableSetter = false;
- if (node instanceof SetterNode)
- {
- IMetaInfo[] metaInfos = null;
- metaInfos = node.getMetaInfos();
- for (IMetaInfo metaInfo : metaInfos)
- {
- String name = metaInfo.getTagName();
- if (name.equals("Bindable")
- && metaInfo.getAllAttributes().length == 0)
- {
- isBindableSetter = true;
- break;
- }
- }
- }
- if (isBindableSetter)
- {
- getDocEmitter().emitMethodDoc(fn, getWalker().getProject());
- write(formatQualifiedName(type.getQualifiedName()));
- if (!node.hasModifier(ASModifier.STATIC))
- {
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.PROTOTYPE);
- }
-
- write(ASEmitterTokens.MEMBER_ACCESS);
- write("__bindingWrappedSetter__");
- writeToken(node.getName());
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.FUNCTION);
- emitParameters(node.getParameterNodes());
- //writeNewline();
- emitMethodScope(node.getScopedNode());
- }
- super.emitObjectDefineProperty(node);
+ objectDefinePropertyEmitter.emit(node);
}
@Override
public void emitDefinePropertyFunction(IAccessorNode node)
{
- boolean isBindableSetter = false;
- if (node instanceof SetterNode)
- {
- IMetaInfo[] metaInfos = null;
- metaInfos = node.getMetaInfos();
- for (IMetaInfo metaInfo : metaInfos)
- {
- String name = metaInfo.getTagName();
- if (name.equals("Bindable")
- && metaInfo.getAllAttributes().length == 0)
- {
- isBindableSetter = true;
- break;
- }
- }
- }
- if (isBindableSetter)
- {
- //write(ASEmitterTokens.FUNCTION);
- //emitParameters(node.getParameterNodes());
- write(ASEmitterTokens.SPACE);
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
- write(ASEmitterTokens.VAR);
- write(ASEmitterTokens.SPACE);
- write("oldValue");
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(node.getName());
- //write(ASEmitterTokens.PAREN_OPEN);
- //write(ASEmitterTokens.PAREN_CLOSE);
- writeNewline(ASEmitterTokens.SEMICOLON);
-
- // add change check
- write(ASEmitterTokens.IF);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.PAREN_OPEN);
- write("oldValue");
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.STRICT_EQUAL);
- write(ASEmitterTokens.SPACE);
- IParameterNode[] params = node.getParameterNodes();
- write(params[0].getName());
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.RETURN);
- writeNewline(ASEmitterTokens.SEMICOLON);
-
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write("__bindingWrappedSetter__" + node.getName());
- write(ASEmitterTokens.PAREN_OPEN);
- write(params[0].getName());
- write(ASEmitterTokens.PAREN_CLOSE);
- writeNewline(ASEmitterTokens.SEMICOLON);
-
- // add dispatch of change event
- writeNewline(" this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
- writeNewline(" this, \"" + node.getName()
- + "\", oldValue, " + params[0].getName() + "));");
- write(ASEmitterTokens.BLOCK_CLOSE);
- //writeNewline(ASEmitterTokens.SEMICOLON);
- writeNewline();
- writeNewline();
- }
- else
- super.emitDefinePropertyFunction(node);
+ definePropertyFunctionEmitter.emit(node);
}
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0ca46d2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index df64740..12bfb7e 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -912,6 +912,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
super(out);
}
+ // XXX Dead
protected void emitObjectDefineProperty(IAccessorNode node)
{
/*
@@ -972,6 +973,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
write(ASEmitterTokens.PAREN_CLOSE);
}
+ // XXX Dead
protected void emitDefinePropertyFunction(IAccessorNode node)
{
emitMethodScope(node.getScopedNode());
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0ca46d2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/DefinePropertyFunctionEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/DefinePropertyFunctionEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/DefinePropertyFunctionEmitter.java
new file mode 100644
index 0000000..2d61ed8
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/DefinePropertyFunctionEmitter.java
@@ -0,0 +1,120 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.common.IMetaInfo;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.tree.as.SetterNode;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
+import org.apache.flex.compiler.tree.as.IParameterNode;
+
+public class DefinePropertyFunctionEmitter extends JSSubEmitter implements
+ ISubEmitter<IAccessorNode>
+{
+
+ public DefinePropertyFunctionEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IAccessorNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ boolean isBindableSetter = false;
+ if (node instanceof SetterNode)
+ {
+ IMetaInfo[] metaInfos = null;
+ metaInfos = node.getMetaInfos();
+ for (IMetaInfo metaInfo : metaInfos)
+ {
+ String name = metaInfo.getTagName();
+ if (name.equals("Bindable")
+ && metaInfo.getAllAttributes().length == 0)
+ {
+ isBindableSetter = true;
+ break;
+ }
+ }
+ }
+ if (isBindableSetter)
+ {
+ //write(ASEmitterTokens.FUNCTION);
+ //emitParameters(node.getParameterNodes());
+ write(ASEmitterTokens.SPACE);
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+ write(ASEmitterTokens.VAR);
+ write(ASEmitterTokens.SPACE);
+ write("oldValue");
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(node.getName());
+ //write(ASEmitterTokens.PAREN_OPEN);
+ //write(ASEmitterTokens.PAREN_CLOSE);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+
+ // add change check
+ write(ASEmitterTokens.IF);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write("oldValue");
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.STRICT_EQUAL);
+ write(ASEmitterTokens.SPACE);
+ IParameterNode[] params = node.getParameterNodes();
+ write(params[0].getName());
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.RETURN);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+
+ write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write("__bindingWrappedSetter__" + node.getName());
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(params[0].getName());
+ write(ASEmitterTokens.PAREN_CLOSE);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+
+ // add dispatch of change event
+ writeNewline(" this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
+ writeNewline(" this, \"" + node.getName()
+ + "\", oldValue, " + params[0].getName() + "));");
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ //writeNewline(ASEmitterTokens.SEMICOLON);
+ writeNewline();
+ writeNewline();
+ }
+ else
+ {
+ fjs.emitMethodScope(node.getScopedNode());
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/0ca46d2a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ObjectDefinePropertyEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ObjectDefinePropertyEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ObjectDefinePropertyEmitter.java
new file mode 100644
index 0000000..2a20f6a
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/ObjectDefinePropertyEmitter.java
@@ -0,0 +1,166 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.common.ASModifier;
+import org.apache.flex.compiler.common.IMetaInfo;
+import org.apache.flex.compiler.definitions.IFunctionDefinition;
+import org.apache.flex.compiler.definitions.ITypeDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.tree.as.FunctionNode;
+import org.apache.flex.compiler.internal.tree.as.SetterNode;
+import org.apache.flex.compiler.tree.ASTNodeID;
+import org.apache.flex.compiler.tree.as.IAccessorNode;
+
+public class ObjectDefinePropertyEmitter extends JSSubEmitter implements
+ ISubEmitter<IAccessorNode>
+{
+
+ public ObjectDefinePropertyEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IAccessorNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ //TODO: ajh is this method needed anymore?
+
+ FunctionNode fn = (FunctionNode) node;
+ fn.parseFunctionBody(fjs.getProblems());
+
+ IFunctionDefinition definition = node.getDefinition();
+ ITypeDefinition type = (ITypeDefinition) definition.getParent();
+
+ // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
+ if (type == null)
+ return;
+
+ boolean isBindableSetter = false;
+ if (node instanceof SetterNode)
+ {
+ IMetaInfo[] metaInfos = null;
+ metaInfos = node.getMetaInfos();
+ for (IMetaInfo metaInfo : metaInfos)
+ {
+ String name = metaInfo.getTagName();
+ if (name.equals("Bindable")
+ && metaInfo.getAllAttributes().length == 0)
+ {
+ isBindableSetter = true;
+ break;
+ }
+ }
+ }
+ if (isBindableSetter)
+ {
+ fjs.getDocEmitter().emitMethodDoc(fn, getWalker().getProject());
+ write(fjs.formatQualifiedName(type.getQualifiedName()));
+ if (!node.hasModifier(ASModifier.STATIC))
+ {
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ }
+
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write("__bindingWrappedSetter__");
+ writeToken(node.getName());
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(node.getParameterNodes());
+ //writeNewline();
+ fjs.emitMethodScope(node.getScopedNode());
+ }
+
+ super_emitObjectDefineProperty(node);
+ }
+
+ protected void super_emitObjectDefineProperty(IAccessorNode node)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ /*
+ Object.defineProperty(
+ A.prototype,
+ 'foo',
+ {get: function() {return -1;},
+ configurable: true}
+ );
+ */
+
+ FunctionNode fn = (FunctionNode) node;
+ fn.parseFunctionBody(fjs.getProblems());
+
+ // head
+ write(JSGoogEmitterTokens.OBJECT);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.DEFINE_PROPERTY);
+ fjs.writeNewline(ASEmitterTokens.PAREN_OPEN, true);
+
+ // Type
+ IFunctionDefinition definition = node.getDefinition();
+ ITypeDefinition type = (ITypeDefinition) definition.getParent();
+ write(type.getQualifiedName());
+ if (!node.hasModifier(ASModifier.STATIC))
+ {
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ }
+ writeToken(ASEmitterTokens.COMMA);
+ writeNewline();
+
+ // name
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(definition.getBaseName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ writeToken(ASEmitterTokens.COMMA);
+ writeNewline();
+
+ // info object
+ // declaration
+ write(ASEmitterTokens.BLOCK_OPEN);
+ write(node.getNodeID() == ASTNodeID.GetterID ? ASEmitterTokens.GET
+ : ASEmitterTokens.SET);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.FUNCTION);
+ fjs.emitParameters(node.getParameterNodes());
+
+ fjs.emitDefinePropertyFunction(node);
+
+ writeToken(ASEmitterTokens.COMMA);
+ write(JSEmitterTokens.CONFIGURABLE);
+ write(ASEmitterTokens.COLON);
+ write(ASEmitterTokens.TRUE);
+ fjs.writeNewline(ASEmitterTokens.BLOCK_CLOSE, false);
+
+ // tail, no colon; parent container will add it
+ write(ASEmitterTokens.PAREN_CLOSE);
+ }
+}
[20/42] git commit: [flex-falcon] [refs/heads/develop] - Add null
check
Posted by ah...@apache.org.
Add null check
Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/fcbdf11d
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/fcbdf11d
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/fcbdf11d
Branch: refs/heads/develop
Commit: fcbdf11dd75b8cfc14ce337efa4c89ea1883a4b7
Parents: cfc1a33
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Mon Feb 16 12:52:44 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:43 2015 +0100
----------------------------------------------------------------------
.../internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/fcbdf11d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
index d18f626..209916a 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/vf2js/MXMLVF2JSEmitter.java
@@ -1391,10 +1391,13 @@ public class MXMLVF2JSEmitter extends MXMLEmitter implements
public void emitComponent(IMXMLComponentNode node)
{
MXMLVF2JSDescriptorSpecifier ps = getCurrentDescriptor("ps");
- ps.value = "new mx.core.ClassFactory(";
+ if (ps != null)
+ {
+ ps.value = "new mx.core.ClassFactory(";
- ps.value += node.getName();
- ps.value += ")";
+ ps.value += node.getName();
+ ps.value += ")";
+ }
setBufferWrite(true);
emitSubDocument(node);
[08/42] git commit: [flex-falcon] [refs/heads/develop] - - Refactored
Class emitting into shared jx package for future use. - Refactored Bindable
class level emittion;
- Refactored GetSet class level emition - Created a shared model for each
emitter sess
Posted by ah...@apache.org.
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
index ff44ab3..c6ba8d8 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/flexjs/JSFlexJSEmitter.java
@@ -44,10 +44,11 @@ import org.apache.flex.compiler.definitions.INamespaceDefinition;
import org.apache.flex.compiler.definitions.IPackageDefinition;
import org.apache.flex.compiler.definitions.ITypeDefinition;
import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
-import org.apache.flex.compiler.internal.codegen.js.JSDocEmitterTokens;
import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSessionModel.PropertyNodes;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitter;
import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.jx.ClassEmitter;
import org.apache.flex.compiler.internal.definitions.AccessorDefinition;
import org.apache.flex.compiler.internal.definitions.ClassDefinition;
import org.apache.flex.compiler.internal.definitions.FunctionDefinition;
@@ -108,29 +109,28 @@ import org.apache.flex.compiler.utils.NativeUtils;
public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
{
- public JSFlexJSEmitter(FilterWriter out)
+ private int foreachLoopCounter = 0;
+
+ private ClassEmitter classEmitter;
+
+ public ClassEmitter getClassEmiter()
{
- super(out);
+ return classEmitter;
}
- public IDefinition thisClass;
-
- class PropertyNodes
+ public JSFlexJSEmitter(FilterWriter out)
{
- public IGetterNode getter;
- public ISetterNode setter;
+ super(out);
+
+ classEmitter = new ClassEmitter(this);
}
-
- HashMap<String, PropertyNodes> propertyMap = new HashMap<String, PropertyNodes>();
- HashMap<String, PropertyNodes> staticPropertyMap = new HashMap<String, PropertyNodes>();
- ArrayList<String> bindableVars = new ArrayList<String>();
-
+
@Override
protected void writeIndent()
{
write(JSFlexJSEmitterTokens.INDENT);
}
-
+
@Override
protected String getIndent(int numIndent)
{
@@ -149,318 +149,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
@Override
public void emitClass(IClassNode node)
{
- thisClass = node.getDefinition();
-
- ASDocComment asDoc = (ASDocComment) node.getASDocComment();
- if (asDoc != null && MXMLJSC.keepASDoc)
- loadImportIgnores(asDoc.commentNoEnd());
-
- project = getWalker().getProject();
-
- IClassDefinition definition = node.getDefinition();
-
- IFunctionDefinition ctorDefinition = definition.getConstructor();
-
- // Static-only (Singleton) classes may not have a constructor
- if (ctorDefinition != null)
- {
- IFunctionNode ctorNode = (IFunctionNode) ctorDefinition.getNode();
- if (ctorNode != null)
- {
- // constructor
- emitMethod(ctorNode);
- write(ASEmitterTokens.SEMICOLON);
- }
- else
- {
- String qname = definition.getQualifiedName();
- if (qname != null && !qname.equals(""))
- {
- write(formatQualifiedName(qname));
- write(ASEmitterTokens.SPACE);
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.FUNCTION);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- writeNewline();
- write(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- }
- }
- }
-
- IDefinitionNode[] dnodes = node.getAllMemberNodes();
- for (IDefinitionNode dnode : dnodes)
- {
- if (dnode.getNodeID() == ASTNodeID.VariableID)
- {
- writeNewline();
- writeNewline();
- writeNewline();
- emitField((IVariableNode) dnode);
- write(ASEmitterTokens.SEMICOLON);
- }
- else if (dnode.getNodeID() == ASTNodeID.FunctionID)
- {
- if (!((IFunctionNode) dnode).isConstructor())
- {
- writeNewline();
- writeNewline();
- writeNewline();
- emitMethod((IFunctionNode) dnode);
- write(ASEmitterTokens.SEMICOLON);
- }
- }
- else if (dnode.getNodeID() == ASTNodeID.GetterID
- || dnode.getNodeID() == ASTNodeID.SetterID)
- {
- //writeNewline();
- //writeNewline();
- //writeNewline();
- emitAccessors((IAccessorNode) dnode);
- //this shouldn't write anything, just set up
- //a data structure for emitASGettersAndSetters
- //write(ASEmitterTokens.SEMICOLON);
- }
- else if (dnode.getNodeID() == ASTNodeID.BindableVariableID)
- {
- writeNewline();
- writeNewline();
- writeNewline();
- emitField((IVariableNode) dnode);
- write(ASEmitterTokens.SEMICOLON);
- }
- }
-
- emitBindableVariables(node.getDefinition());
-
- emitASGettersAndSetters(node.getDefinition());
+ classEmitter.emit(node);
}
-
- public void emitASGettersAndSetters(IClassDefinition definition)
- {
- if (!propertyMap.isEmpty())
- {
- writeNewline();
- writeNewline();
- writeNewline();
- write(JSGoogEmitterTokens.OBJECT);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.DEFINE_PROPERTIES);
- write(ASEmitterTokens.PAREN_OPEN);
- String qname = definition.getQualifiedName();
- write(formatQualifiedName(qname));
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.PROTOTYPE);
- write(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SPACE);
- write("/** @lends {" + formatQualifiedName(qname) + ".prototype} */ ");
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
- Set<String> propertyNames = propertyMap.keySet();
- boolean firstTime = true;
- for (String propName : propertyNames)
- {
- if (firstTime)
- firstTime = false;
- else
- writeNewline(ASEmitterTokens.COMMA);
-
- PropertyNodes p = propertyMap.get(propName);
- writeNewline("/** @expose */");
- write(propName);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
- if (p.getter != null)
- {
- write(ASEmitterTokens.GET);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- write(JSDocEmitterTokens.JSDOC_OPEN);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.ATSIGN);
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- write(formatQualifiedName(qname));
- write(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(JSDocEmitterTokens.JSDOC_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.FUNCTION);
- emitParameters(p.getter.getParameterNodes());
-
- emitDefinePropertyFunction(p.getter);
- }
- if (p.setter != null)
- {
- if (p.getter != null)
- writeNewline(ASEmitterTokens.COMMA);
-
- write(ASEmitterTokens.SET);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- write(JSDocEmitterTokens.JSDOC_OPEN);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.ATSIGN);
- write(ASEmitterTokens.THIS);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- write(formatQualifiedName(qname));
- write(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(JSDocEmitterTokens.JSDOC_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.FUNCTION);
- emitParameters(p.setter.getParameterNodes());
-
- emitDefinePropertyFunction(p.setter);
- }
- write(ASEmitterTokens.BLOCK_CLOSE);
- }
- writeNewline(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- }
- if (!staticPropertyMap.isEmpty())
- {
- write(JSGoogEmitterTokens.OBJECT);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.DEFINE_PROPERTIES);
- write(ASEmitterTokens.PAREN_OPEN);
- String qname = definition.getQualifiedName();
- write(formatQualifiedName(qname));
- write(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SPACE);
- write("/** @lends {" + formatQualifiedName(qname) + "} */ ");
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
- Set<String> propertyNames = staticPropertyMap.keySet();
- boolean firstTime = true;
- for (String propName : propertyNames)
- {
- if (firstTime)
- firstTime = false;
- else
- writeNewline(ASEmitterTokens.COMMA);
-
- PropertyNodes p = staticPropertyMap.get(propName);
- writeNewline("/** @expose */");
- write(propName);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
- if (p.getter != null)
- {
- write(ASEmitterTokens.GET);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.FUNCTION);
- emitParameters(p.getter.getParameterNodes());
-
- emitDefinePropertyFunction(p.getter);
- }
- if (p.setter != null)
- {
- if (p.getter != null)
- writeNewline(ASEmitterTokens.COMMA);
-
- write(ASEmitterTokens.SET);
- write(ASEmitterTokens.COLON);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.FUNCTION);
- emitParameters(p.setter.getParameterNodes());
-
- emitDefinePropertyFunction(p.setter);
- }
- write(ASEmitterTokens.BLOCK_CLOSE);
- }
- writeNewline(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- }
- }
-
- private void loadImportIgnores(String doc)
- {
- ArrayList<String> ignoreList = new ArrayList<String>();
- String ignoreToken = JSFlexJSEmitterTokens.IGNORE_IMPORT.getToken();
- int index = doc.indexOf(ignoreToken);
- while (index != -1)
- {
- String ignorable = doc.substring(index + ignoreToken.length());
- int endIndex = ignorable.indexOf("\n");
- ignorable = ignorable.substring(0, endIndex);
- ignorable = ignorable.trim();
- ignoreList.add(ignorable);
- System.out.println("Found ignorable: " + ignorable);
- index = doc.indexOf(ignoreToken, index + endIndex);
- }
- this.getDocEmitter();
- docEmitter.classIgnoreList = ignoreList;
- }
-
- /*
- @Override
- public void emitInterface(IInterfaceNode node)
- {
- ICompilerProject project = getWalker().getProject();
-
- getDoc().emitInterfaceDoc(node, project);
-
- String qname = node.getQualifiedName();
- if (qname != null && !qname.equals(""))
- {
- write(formatQualifiedName(qname));
- write(ASEmitterTokens.SPACE);
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.FUNCTION);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- writeNewline();
- write(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- }
-
- final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
- for (IDefinitionNode mnode : members)
- {
- boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
- || mnode.getNodeID() == ASTNodeID.SetterID;
-
- writeNewline();
- writeNewline();
- writeNewline();
-
- getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
-
- write(formatQualifiedName(qname));
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.PROTOTYPE);
- write(ASEmitterTokens.MEMBER_ACCESS);
- if (isAccessor)
- {
- writeGetSetPrefix(mnode.getNodeID() == ASTNodeID.GetterID);
- }
- write(mnode.getQualifiedName());
- write(ASEmitterTokens.SPACE);
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.FUNCTION);
- emitParameters(((IFunctionNode) mnode).getParameterNodes());
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- write(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
- }
- }
- */
-
@Override
public void emitField(IVariableNode node)
{
@@ -519,85 +210,64 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
if (node.getNodeID() == ASTNodeID.BindableVariableID)
{
- bindableVars.add(node.getName());
+ getModel().getBindableVars().add(node.getName());
}
}
- public void emitBindableVariables(IClassDefinition cdef)
+ public void emitBindableVarDefineProperty(String name, IClassDefinition cdef)
{
- if (bindableVars.size() > 0)
- {
- write(JSGoogEmitterTokens.OBJECT);
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.DEFINE_PROPERTIES);
- write(ASEmitterTokens.PAREN_OPEN);
- String qname = cdef.getQualifiedName();
- write(formatQualifiedName(qname));
- write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSEmitterTokens.PROTOTYPE);
- write(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SPACE);
- write("/** @lends {" + formatQualifiedName(qname) + ".prototype} */ ");
- writeNewline(ASEmitterTokens.BLOCK_OPEN);
-
- boolean firstTime = true;
- for (String varName : bindableVars)
- {
- if (firstTime)
- firstTime = false;
- else
- write(ASEmitterTokens.COMMA);
-
- emitBindableVarDefineProperty(varName, cdef);
- }
- writeNewline(ASEmitterTokens.BLOCK_CLOSE);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(ASEmitterTokens.SEMICOLON);
-
- }
- }
-
- private void emitBindableVarDefineProperty(String name, IClassDefinition cdef)
- {
- // 'PropName': {
- writeNewline("/** @expose */");
- writeNewline(name +
- ASEmitterTokens.COLON.getToken() +
- ASEmitterTokens.SPACE.getToken() +
- ASEmitterTokens.BLOCK_OPEN.getToken());
- indentPush();
- writeNewline("/** @this {" + formatQualifiedName(cdef.getQualifiedName()) + "} */");
- writeNewline(ASEmitterTokens.GET.getToken() + ASEmitterTokens.COLON.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.FUNCTION.getToken()
- + ASEmitterTokens.PAREN_OPEN.getToken() + ASEmitterTokens.PAREN_CLOSE.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.BLOCK_OPEN.getToken());
- writeNewline(ASEmitterTokens.RETURN.getToken() + ASEmitterTokens.SPACE.getToken()
- + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
- + name + "_" + ASEmitterTokens.SEMICOLON.getToken());
- indentPop();
- writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken() + ASEmitterTokens.COMMA.getToken());
- writeNewline();
- writeNewline("/** @this {" + formatQualifiedName(cdef.getQualifiedName()) + "} */");
- writeNewline(ASEmitterTokens.SET.getToken() + ASEmitterTokens.COLON.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.FUNCTION.getToken()
- + ASEmitterTokens.PAREN_OPEN.getToken() + "value" + ASEmitterTokens.PAREN_CLOSE.getToken()
- + ASEmitterTokens.SPACE.getToken() + ASEmitterTokens.BLOCK_OPEN.getToken());
- writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
- + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_) {");
- writeNewline(" var oldValue = "
- + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
- + name + "_" + ASEmitterTokens.SEMICOLON.getToken());
- writeNewline(" " + ASEmitterTokens.THIS.getToken() + ASEmitterTokens.MEMBER_ACCESS.getToken()
- + name + "_ = value;");
- writeNewline(" this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
- writeNewline(" this, \"" + name + "\", oldValue, value));");
- writeNewline("}");
- write(ASEmitterTokens.BLOCK_CLOSE.getToken());
- write(ASEmitterTokens.BLOCK_CLOSE.getToken());
+ // 'PropName': {
+ writeNewline("/** @expose */");
+ writeNewline(name + ASEmitterTokens.COLON.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.BLOCK_OPEN.getToken());
+ indentPush();
+ writeNewline("/** @this {"
+ + formatQualifiedName(cdef.getQualifiedName()) + "} */");
+ writeNewline(ASEmitterTokens.GET.getToken()
+ + ASEmitterTokens.COLON.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.FUNCTION.getToken()
+ + ASEmitterTokens.PAREN_OPEN.getToken()
+ + ASEmitterTokens.PAREN_CLOSE.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.BLOCK_OPEN.getToken());
+ writeNewline(ASEmitterTokens.RETURN.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
+ + ASEmitterTokens.SEMICOLON.getToken());
+ indentPop();
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE.getToken()
+ + ASEmitterTokens.COMMA.getToken());
+ writeNewline();
+ writeNewline("/** @this {"
+ + formatQualifiedName(cdef.getQualifiedName()) + "} */");
+ writeNewline(ASEmitterTokens.SET.getToken()
+ + ASEmitterTokens.COLON.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.FUNCTION.getToken()
+ + ASEmitterTokens.PAREN_OPEN.getToken() + "value"
+ + ASEmitterTokens.PAREN_CLOSE.getToken()
+ + ASEmitterTokens.SPACE.getToken()
+ + ASEmitterTokens.BLOCK_OPEN.getToken());
+ writeNewline("if (value != " + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_) {");
+ writeNewline(" var oldValue = " + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + name + "_"
+ + ASEmitterTokens.SEMICOLON.getToken());
+ writeNewline(" " + ASEmitterTokens.THIS.getToken()
+ + ASEmitterTokens.MEMBER_ACCESS.getToken() + name
+ + "_ = value;");
+ writeNewline(" this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
+ writeNewline(" this, \"" + name + "\", oldValue, value));");
+ writeNewline("}");
+ write(ASEmitterTokens.BLOCK_CLOSE.getToken());
+ write(ASEmitterTokens.BLOCK_CLOSE.getToken());
}
@Override
- protected void emitAccessors(IAccessorNode node)
+ public void emitAccessors(IAccessorNode node)
{
if (node.getNodeID() == ASTNodeID.GetterID)
{
@@ -608,73 +278,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
emitSetAccessor((ISetterNode) node);
}
}
-
- /*
- @Override
- public void emitMethod(IFunctionNode node)
- {
- FunctionNode fn = (FunctionNode) node;
- fn.parseFunctionBody(getProblems());
-
- ICompilerProject project = getWalker().getProject();
-
- getDoc().emitMethodDoc(node, project);
-
- boolean isConstructor = node.isConstructor();
-
- String qname = getTypeDefinition(node).getQualifiedName();
- if (qname != null && !qname.equals(""))
- {
- write(formatQualifiedName(qname));
- if (!isConstructor)
- {
- write(ASEmitterTokens.MEMBER_ACCESS);
- if (!fn.hasModifier(ASModifier.STATIC))
- {
- write(JSEmitterTokens.PROTOTYPE);
- write(ASEmitterTokens.MEMBER_ACCESS);
- }
- }
- }
-
- if (!isConstructor)
- emitMemberName(node);
-
- write(ASEmitterTokens.SPACE);
- writeToken(ASEmitterTokens.EQUAL);
- write(ASEmitterTokens.FUNCTION);
-
- emitParameters(node.getParameterNodes());
-
- boolean hasSuperClass = hasSuperClass(node);
-
- if (isConstructor && node.getScopedNode().getChildCount() == 0)
- {
- write(ASEmitterTokens.SPACE);
- write(ASEmitterTokens.BLOCK_OPEN);
- if (hasSuperClass)
- emitSuperCall(node, CONSTRUCTOR_EMPTY);
- writeNewline();
- write(ASEmitterTokens.BLOCK_CLOSE);
- }
-
- if (!isConstructor || node.getScopedNode().getChildCount() > 0)
- emitMethodScope(node.getScopedNode());
-
- if (isConstructor && hasSuperClass)
- {
- writeNewline(ASEmitterTokens.SEMICOLON);
- write(JSGoogEmitterTokens.GOOG_INHERITS);
- write(ASEmitterTokens.PAREN_OPEN);
- write(formatQualifiedName(qname));
- writeToken(ASEmitterTokens.COMMA);
- String sname = getSuperClassDefinition(node, project)
- .getQualifiedName();
- write(formatQualifiedName(sname));
- write(ASEmitterTokens.PAREN_CLOSE);
- }
- }
- */
@Override
public void emitFunctionCall(IFunctionCallNode node)
@@ -703,9 +306,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
def = node.getNameNode().resolve(project);
- isClassCast = (def instanceof ClassDefinition ||
- def instanceof InterfaceDefinition) &&
- !(NativeUtils.isJSNative(def.getBaseName()));
+ isClassCast = (def instanceof ClassDefinition || def instanceof InterfaceDefinition)
+ && !(NativeUtils.isJSNative(def.getBaseName()));
}
if (node.isNewExpression())
@@ -728,15 +330,18 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
{
if (def != null)
{
- boolean isInt = def.getBaseName().equals(IASGlobalFunctionConstants._int);
- if (isInt ||
- def.getBaseName().equals(IASGlobalFunctionConstants.trace) ||
- def.getBaseName().equals(IASGlobalFunctionConstants.uint))
+ boolean isInt = def.getBaseName().equals(
+ IASGlobalFunctionConstants._int);
+ if (isInt
+ || def.getBaseName().equals(
+ IASGlobalFunctionConstants.trace)
+ || def.getBaseName().equals(
+ IASGlobalFunctionConstants.uint))
{
write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
write(ASEmitterTokens.MEMBER_ACCESS);
if (isInt)
- write(JSFlexJSEmitterTokens.UNDERSCORE);
+ write(JSFlexJSEmitterTokens.UNDERSCORE);
}
}
getWalker().walk(node.getNameNode());
@@ -746,7 +351,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
else
{
- emitIsAs(node.getArgumentNodes()[0], node.getNameNode(), ASTNodeID.Op_AsID, true);
+ emitIsAs(node.getArgumentNodes()[0], node.getNameNode(),
+ ASTNodeID.Op_AsID, true);
}
}
else
@@ -761,9 +367,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
protected void emitSelfReference(IFunctionNode node)
{
// we don't want 'var self = this;' in FlexJS
- // unless there are anonymous functions
- if (node.containsAnonymousFunctions())
- super.emitSelfReference(node);
+ // unless there are anonymous functions
+ if (node.containsAnonymousFunctions())
+ super.emitSelfReference(node);
}
private boolean writeThis(IIdentifierNode node)
@@ -778,13 +384,15 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
IASNode firstChild = parentNode.getChild(0);
+ final IClassDefinition thisClass = getModel().getCurrentClass();
+
boolean identifierIsMemberAccess = parentNodeId == ASTNodeID.MemberAccessExpressionID;
if (classNode == null) // script in MXML and AS interface definitions
{
if (nodeDef instanceof ParameterDefinition)
return false;
-
+
if (nodeDef instanceof VariableDefinition)
{
IDefinition pdef = ((VariableDefinition) nodeDef).getParent();
@@ -825,8 +433,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
else
{
- if (nodeDef != null
- && !nodeDef.isInternal()
+ if (nodeDef != null && !nodeDef.isInternal()
&& isClassMember(nodeDef, classNode))
{
if (identifierIsMemberAccess)
@@ -876,7 +483,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
if (pdef == thisClass)
return true;
- IDefinition cdef = ((ClassDefinition) thisClass).resolveBaseClass(project);
+ IDefinition cdef = ((ClassDefinition) thisClass)
+ .resolveBaseClass(project);
while (cdef != null)
{
// needs to be a loop
@@ -904,8 +512,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
boolean emitName = true;
- if (nodeDef != null
- && nodeDef.isStatic())
+ if (nodeDef != null && nodeDef.isStatic())
{
String sname = nodeDef.getParent().getQualifiedName();
if (sname.length() > 0)
@@ -932,13 +539,14 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
if (writeThis(node))
{
- IFunctionObjectNode functionObjectNode = (IFunctionObjectNode) node.getParent()
- .getAncestorOfType(IFunctionObjectNode.class);
+ IFunctionObjectNode functionObjectNode = (IFunctionObjectNode) node
+ .getParent().getAncestorOfType(
+ IFunctionObjectNode.class);
if (functionObjectNode != null)
- write(JSGoogEmitterTokens.SELF);
+ write(JSGoogEmitterTokens.SELF);
else
- write(ASEmitterTokens.THIS);
+ write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
}
@@ -955,13 +563,12 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
}
-
//IDefinition parentDef = (nodeDef != null) ? nodeDef.getParent() : null;
//boolean isNative = (parentDef != null)
// && NativeUtils.isNative(parentDef.getBaseName());
if (emitName)
{
- if (nodeDef != null)
+ if (nodeDef != null)
write(formatQualifiedName(nodeDef.getQualifiedName()));
else
write(node.getName());
@@ -969,8 +576,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
//--------------------------------------------------------------------------
-
- @Override
+
+ @Override
protected void emitSuperCall(IASNode node, String type)
{
IFunctionNode fnode = (node instanceof IFunctionNode) ? (IFunctionNode) node
@@ -978,6 +585,8 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
IFunctionCallNode fcnode = (node instanceof IFunctionCallNode) ? (FunctionCallNode) node
: null;
+ final IClassDefinition thisClass = getModel().getCurrentClass();
+
if (type == SUPER_FUNCTION_CALL)
{
if (fnode == null)
@@ -987,145 +596,81 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
if (fnode != null && fnode.isConstructor() && !hasSuperClass(fnode))
return;
- IClassNode cnode = (IClassNode) node
- .getAncestorOfType(IClassNode.class);
-
- // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
- if (cnode == null && MXMLJSC.jsOutputType == JSOutputType.VF2JS)
- return;
-
- if (fnode != null && (fnode.getNodeID() == ASTNodeID.GetterID
- || fnode.getNodeID() == ASTNodeID.SetterID))
- {
- write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
- write(ASEmitterTokens.MEMBER_ACCESS);
- if (fnode.getNodeID() == ASTNodeID.GetterID)
- write(JSFlexJSEmitterTokens.SUPERGETTER);
- else
- write(JSFlexJSEmitterTokens.SUPERSETTER);
- write(ASEmitterTokens.PAREN_OPEN);
- if (cnode == null && thisClass != null)
- write(formatQualifiedName(thisClass.getQualifiedName()));
- else
- write(formatQualifiedName(cnode.getQualifiedName()));
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.THIS);
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(fnode.getName());
- write(ASEmitterTokens.SINGLE_QUOTE);
-
- IASNode[] anodes = null;
- boolean writeArguments = false;
- if (fcnode != null)
- {
- anodes = fcnode.getArgumentNodes();
-
- writeArguments = anodes.length > 0;
- }
- else if (fnode != null && fnode.isConstructor())
- {
- anodes = fnode.getParameterNodes();
-
- writeArguments = (anodes != null && anodes.length > 0);
- }
- else if (node instanceof IFunctionNode && node instanceof BinaryOperatorAssignmentNode)
- {
- BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
-
- IFunctionNode pnode = (IFunctionNode) bnode.getAncestorOfType(IFunctionNode.class);
-
- if (pnode.getNodeID() == ASTNodeID.SetterID)
- {
- writeToken(ASEmitterTokens.COMMA);
- getWalker().walk(bnode.getRightOperandNode());
- }
- }
-
- if (writeArguments)
- {
- int len = anodes.length;
- for (int i = 0; i < len; i++)
- {
- writeToken(ASEmitterTokens.COMMA);
-
- getWalker().walk(anodes[i]);
- }
- }
-
- write(ASEmitterTokens.PAREN_CLOSE);
- return;
- }
- }
- super.emitSuperCall(node, type);
- }
-
- /*
- @Override
- protected void emitDefaultParameterCodeBlock(IFunctionNode node)
- {
- IParameterNode[] pnodes = node.getParameterNodes();
- if (pnodes.length == 0)
- return;
-
- Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
+ IClassNode cnode = (IClassNode) node
+ .getAncestorOfType(IClassNode.class);
- if (defaults != null)
- {
- final StringBuilder code = new StringBuilder();
+ // ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
+ if (cnode == null && MXMLJSC.jsOutputType == JSOutputType.VF2JS)
+ return;
- if (!hasBody(node))
+ if (fnode != null
+ && (fnode.getNodeID() == ASTNodeID.GetterID || fnode
+ .getNodeID() == ASTNodeID.SetterID))
{
- indentPush();
- write(JSFlexJSEmitterTokens.INDENT);
- }
+ write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ if (fnode.getNodeID() == ASTNodeID.GetterID)
+ write(JSFlexJSEmitterTokens.SUPERGETTER);
+ else
+ write(JSFlexJSEmitterTokens.SUPERSETTER);
+ write(ASEmitterTokens.PAREN_OPEN);
+ if (cnode == null && thisClass != null)
+ write(formatQualifiedName(thisClass.getQualifiedName()));
+ else
+ write(formatQualifiedName(cnode.getQualifiedName()));
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.THIS);
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(fnode.getName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+
+ IASNode[] anodes = null;
+ boolean writeArguments = false;
+ if (fcnode != null)
+ {
+ anodes = fcnode.getArgumentNodes();
- List<IParameterNode> parameters = new ArrayList<IParameterNode>(
- defaults.values());
+ writeArguments = anodes.length > 0;
+ }
+ else if (fnode != null && fnode.isConstructor())
+ {
+ anodes = fnode.getParameterNodes();
- for (int i = 0, n = parameters.size(); i < n; i++)
- {
- IParameterNode pnode = parameters.get(i);
+ writeArguments = (anodes != null && anodes.length > 0);
+ }
+ else if (node instanceof IFunctionNode
+ && node instanceof BinaryOperatorAssignmentNode)
+ {
+ BinaryOperatorAssignmentNode bnode = (BinaryOperatorAssignmentNode) node;
- if (pnode != null)
+ IFunctionNode pnode = (IFunctionNode) bnode
+ .getAncestorOfType(IFunctionNode.class);
+
+ if (pnode.getNodeID() == ASTNodeID.SetterID)
+ {
+ writeToken(ASEmitterTokens.COMMA);
+ getWalker().walk(bnode.getRightOperandNode());
+ }
+ }
+
+ if (writeArguments)
{
- code.setLength(0);
-
- // x = typeof y !== 'undefined' ? y : z;\n
- code.append(pnode.getName());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.EQUAL.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.TYPEOF.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(pnode.getName());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.STRICT_NOT_EQUAL.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
- code.append(ASEmitterTokens.UNDEFINED.getToken());
- code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.TERNARY.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(pnode.getName());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(ASEmitterTokens.COLON.getToken());
- code.append(ASEmitterTokens.SPACE.getToken());
- code.append(pnode.getDefaultValue());
- code.append(ASEmitterTokens.SEMICOLON.getToken());
-
- write(code.toString());
-
- if (i == n - 1 && !hasBody(node))
- indentPop();
+ int len = anodes.length;
+ for (int i = 0; i < len; i++)
+ {
+ writeToken(ASEmitterTokens.COMMA);
- writeNewline();
+ getWalker().walk(anodes[i]);
+ }
}
+
+ write(ASEmitterTokens.PAREN_CLOSE);
+ return;
}
}
+ super.emitSuperCall(node, type);
}
- */
@Override
public void emitBinaryOperator(IBinaryOperatorNode node)
@@ -1138,9 +683,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
{
super.emitBinaryOperator(node);
}
- else */ if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
+ else */if (id == ASTNodeID.Op_IsID || id == ASTNodeID.Op_AsID)
{
- emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id, false);
+ emitIsAs(node.getLeftOperandNode(), node.getRightOperandNode(), id,
+ false);
}
else if (id == ASTNodeID.Op_InstanceOfID)
{
@@ -1148,7 +694,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
write(ASEmitterTokens.SPACE);
writeToken(ASEmitterTokens.INSTANCEOF);
-
+
IDefinition dnode = (node.getRightOperandNode()).resolve(project);
if (dnode != null)
write(formatQualifiedName(dnode.getQualifiedName()));
@@ -1162,56 +708,57 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
{
IASNode lnode = leftSide.getChild(0);
IASNode rnode = leftSide.getChild(1);
- IDefinition rnodeDef = ((IIdentifierNode) rnode).resolve(getWalker().getProject());
- if (lnode.getNodeID() == ASTNodeID.SuperID &&
- rnodeDef instanceof AccessorDefinition)
+ IDefinition rnodeDef = ((IIdentifierNode) rnode)
+ .resolve(getWalker().getProject());
+ if (lnode.getNodeID() == ASTNodeID.SuperID
+ && rnodeDef instanceof AccessorDefinition)
{
String op = node.getOperator().getOperatorText();
- boolean isAssignment = op.contains("=") && !op.contains("==") &&
- !(op.startsWith("<") ||
- op.startsWith(">") ||
- op.startsWith("!"));
- if (isAssignment)
- {
+ boolean isAssignment = op.contains("=")
+ && !op.contains("==")
+ && !(op.startsWith("<") || op.startsWith(">") || op
+ .startsWith("!"));
+ if (isAssignment)
+ {
write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSFlexJSEmitterTokens.SUPERSETTER);
- write(ASEmitterTokens.PAREN_OPEN);
- IClassNode cnode = (IClassNode) node
- .getAncestorOfType(IClassNode.class);
- write(formatQualifiedName(cnode.getQualifiedName()));
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.THIS);
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(rnodeDef.getBaseName());
- write(ASEmitterTokens.SINGLE_QUOTE);
- writeToken(ASEmitterTokens.COMMA);
-
- if (op.length() > 1) // += and things like that
- {
+ write(JSFlexJSEmitterTokens.SUPERSETTER);
+ write(ASEmitterTokens.PAREN_OPEN);
+ IClassNode cnode = (IClassNode) node
+ .getAncestorOfType(IClassNode.class);
+ write(formatQualifiedName(cnode.getQualifiedName()));
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.THIS);
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(rnodeDef.getBaseName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ writeToken(ASEmitterTokens.COMMA);
+
+ if (op.length() > 1) // += and things like that
+ {
write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSFlexJSEmitterTokens.SUPERSETTER);
- write(ASEmitterTokens.PAREN_OPEN);
- write(formatQualifiedName(cnode.getQualifiedName()));
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.THIS);
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(rnodeDef.getBaseName());
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- write(op.substring(0, 1));
- }
+ write(JSFlexJSEmitterTokens.SUPERSETTER);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(formatQualifiedName(cnode.getQualifiedName()));
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.THIS);
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(rnodeDef.getBaseName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(op.substring(0, 1));
+ }
getWalker().walk(node.getRightOperandNode());
- write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.PAREN_CLOSE);
return;
- }
+ }
}
}
-
+
super.emitBinaryOperator(node);
/*
IExpressionNode leftSide = node.getLeftOperandNode();
@@ -1279,47 +826,51 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
}
- private void emitIsAs(IExpressionNode left, IExpressionNode right,
+ private void emitIsAs(IExpressionNode left, IExpressionNode right,
ASTNodeID id, boolean coercion)
{
- // project is null in unit tests
+ // project is null in unit tests
IDefinition dnode = project != null ? (right).resolve(project) : null;
- if (id != ASTNodeID.Op_IsID && dnode != null)
- {
- // find the function node
+ if (id != ASTNodeID.Op_IsID && dnode != null)
+ {
+ // find the function node
IFunctionNode functionNode = (IFunctionNode) left
- .getAncestorOfType(IFunctionNode.class);
+ .getAncestorOfType(IFunctionNode.class);
if (functionNode != null) // can be null in synthesized binding code
{
- ASDocComment asDoc = (ASDocComment) functionNode.getASDocComment();
- if (asDoc != null)
- {
- String asDocString = asDoc.commentNoEnd();
- String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION.getToken();
- boolean ignore = false;
- int ignoreIndex = asDocString.indexOf(ignoreToken);
- while (ignoreIndex != -1)
- {
- String ignorable = asDocString.substring(ignoreIndex + ignoreToken.length());
- int endIndex = ignorable.indexOf("\n");
- ignorable = ignorable.substring(0, endIndex);
- ignorable = ignorable.trim();
- String rightSide = dnode.getQualifiedName();
- if (ignorable.equals(rightSide))
- {
- ignore = true;
- break;
- }
- ignoreIndex = asDocString.indexOf(ignoreToken, ignoreIndex + ignoreToken.length());
- }
- if (ignore)
- {
- getWalker().walk(left);
- return;
- }
- }
+ ASDocComment asDoc = (ASDocComment) functionNode
+ .getASDocComment();
+ if (asDoc != null)
+ {
+ String asDocString = asDoc.commentNoEnd();
+ String ignoreToken = JSFlexJSEmitterTokens.IGNORE_COERCION
+ .getToken();
+ boolean ignore = false;
+ int ignoreIndex = asDocString.indexOf(ignoreToken);
+ while (ignoreIndex != -1)
+ {
+ String ignorable = asDocString.substring(ignoreIndex
+ + ignoreToken.length());
+ int endIndex = ignorable.indexOf("\n");
+ ignorable = ignorable.substring(0, endIndex);
+ ignorable = ignorable.trim();
+ String rightSide = dnode.getQualifiedName();
+ if (ignorable.equals(rightSide))
+ {
+ ignore = true;
+ break;
+ }
+ ignoreIndex = asDocString.indexOf(ignoreToken,
+ ignoreIndex + ignoreToken.length());
+ }
+ if (ignore)
+ {
+ getWalker().walk(left);
+ return;
+ }
+ }
}
- }
+ }
write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
write(ASEmitterTokens.MEMBER_ACCESS);
if (id == ASTNodeID.Op_IsID)
@@ -1334,22 +885,22 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
write(formatQualifiedName(dnode.getQualifiedName()));
else
getWalker().walk(right);
-
- if (coercion)
+
+ if (coercion)
{
writeToken(ASEmitterTokens.COMMA);
write(ASEmitterTokens.TRUE);
}
-
+
write(ASEmitterTokens.PAREN_CLOSE);
}
-
+
@Override
public void emitMemberAccessExpression(IMemberAccessExpressionNode node)
{
if (ASNodeUtils.hasParenOpen(node))
write(ASEmitterTokens.PAREN_OPEN);
-
+
IASNode leftNode = node.getLeftOperandNode();
IASNode rightNode = node.getRightOperandNode();
@@ -1365,16 +916,16 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
if (!isStatic)
{
if (!(leftNode instanceof ILanguageIdentifierNode && ((ILanguageIdentifierNode) leftNode)
- .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
+ .getKind() == ILanguageIdentifierNode.LanguageIdentifierKind.THIS))
{
IDefinition rightDef = null;
if (rightNode instanceof IIdentifierNode)
- rightDef = ((IIdentifierNode) rightNode).resolve(project);
-
- if (rightNode instanceof UnaryOperatorAtNode)
+ rightDef = ((IIdentifierNode) rightNode).resolve(project);
+
+ if (rightNode instanceof UnaryOperatorAtNode)
{
- // ToDo (erikdebruin): properly handle E4X
-
+ // ToDo (erikdebruin): properly handle E4X
+
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
getWalker().walk(node.getLeftOperandNode());
@@ -1385,10 +936,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
write(ASEmitterTokens.SQUARE_CLOSE);
continueWalk = false;
}
- else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
- {
- // ToDo (erikdebruin): properly handle E4X
-
+ else if (node.getNodeID() == ASTNodeID.Op_DescendantsID)
+ {
+ // ToDo (erikdebruin): properly handle E4X
+
write(ASEmitterTokens.THIS);
write(ASEmitterTokens.MEMBER_ACCESS);
getWalker().walk(node.getLeftOperandNode());
@@ -1398,118 +949,105 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.SQUARE_CLOSE);
continueWalk = false;
- }
- else if (leftNode.getNodeID() != ASTNodeID.SuperID)
+ }
+ else if (leftNode.getNodeID() != ASTNodeID.SuperID)
{
getWalker().walk(node.getLeftOperandNode());
write(node.getOperator().getOperatorText());
}
- else if (leftNode.getNodeID() == ASTNodeID.SuperID &&
- (rightNode.getNodeID() == ASTNodeID.GetterID ||
- (rightDef != null && rightDef instanceof AccessorDefinition)))
- {
- // setter is handled in binaryOperator
+ else if (leftNode.getNodeID() == ASTNodeID.SuperID
+ && (rightNode.getNodeID() == ASTNodeID.GetterID || (rightDef != null && rightDef instanceof AccessorDefinition)))
+ {
+ // setter is handled in binaryOperator
write(JSFlexJSEmitterTokens.LANGUAGE_QNAME);
write(ASEmitterTokens.MEMBER_ACCESS);
- write(JSFlexJSEmitterTokens.SUPERGETTER);
- write(ASEmitterTokens.PAREN_OPEN);
- IClassNode cnode = (IClassNode) node
- .getAncestorOfType(IClassNode.class);
- write(formatQualifiedName(cnode.getQualifiedName()));
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.THIS);
- writeToken(ASEmitterTokens.COMMA);
- write(ASEmitterTokens.SINGLE_QUOTE);
- if (rightDef != null)
- write(rightDef.getBaseName());
- else
- write(((GetterNode)rightNode).getName());
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- continueWalk = false;
- }
+ write(JSFlexJSEmitterTokens.SUPERGETTER);
+ write(ASEmitterTokens.PAREN_OPEN);
+ IClassNode cnode = (IClassNode) node
+ .getAncestorOfType(IClassNode.class);
+ write(formatQualifiedName(cnode.getQualifiedName()));
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.THIS);
+ writeToken(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ if (rightDef != null)
+ write(rightDef.getBaseName());
+ else
+ write(((GetterNode) rightNode).getName());
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ continueWalk = false;
+ }
}
else
{
write(ASEmitterTokens.THIS);
write(node.getOperator().getOperatorText());
}
-
+
}
-
+
if (continueWalk)
- getWalker().walk(node.getRightOperandNode());
-
+ getWalker().walk(node.getRightOperandNode());
+
if (ASNodeUtils.hasParenClose(node))
write(ASEmitterTokens.PAREN_CLOSE);
}
- /*
- private static ITypeDefinition getTypeDefinition(IDefinitionNode node)
- {
- ITypeNode tnode = (ITypeNode) node.getAncestorOfType(ITypeNode.class);
- return (ITypeDefinition) tnode.getDefinition();
- }
-
- private static IClassDefinition getSuperClassDefinition(
- IDefinitionNode node, ICompilerProject project)
- {
- IClassDefinition parent = (IClassDefinition) node.getDefinition()
- .getParent();
- IClassDefinition superClass = parent.resolveBaseClass(project);
- return superClass;
- }
- */
-
@Override
public void emitGetAccessor(IGetterNode node)
{
ModifiersSet modifierSet = node.getDefinition().getModifiers();
- boolean isStatic = (modifierSet != null && modifierSet.hasModifier(ASModifier.STATIC));
- HashMap<String, PropertyNodes> map = isStatic ? staticPropertyMap : propertyMap;
- String name = node.getName();
- PropertyNodes p = map.get(name);
- if (p == null)
- {
- p = new PropertyNodes();
- map.put(name, p);
- }
- p.getter = node;
+ boolean isStatic = (modifierSet != null && modifierSet
+ .hasModifier(ASModifier.STATIC));
+ HashMap<String, PropertyNodes> map = isStatic ? getModel()
+ .getStaticPropertyMap() : getModel().getPropertyMap();
+ String name = node.getName();
+ PropertyNodes p = map.get(name);
+ if (p == null)
+ {
+ p = new PropertyNodes();
+ map.put(name, p);
+ }
+ p.getter = node;
FunctionNode fn = (FunctionNode) node;
- fn.parseFunctionBody(getProblems());
+ fn.parseFunctionBody(getProblems());
}
@Override
public void emitSetAccessor(ISetterNode node)
{
ModifiersSet modifierSet = node.getDefinition().getModifiers();
- boolean isStatic = (modifierSet != null && modifierSet.hasModifier(ASModifier.STATIC));
- HashMap<String, PropertyNodes> map = isStatic ? staticPropertyMap : propertyMap;
- String name = node.getName();
- PropertyNodes p = map.get(name);
- if (p == null)
- {
- p = new PropertyNodes();
- map.put(name, p);
- }
- p.setter = node;
+ boolean isStatic = (modifierSet != null && modifierSet
+ .hasModifier(ASModifier.STATIC));
+ HashMap<String, PropertyNodes> map = isStatic ? getModel()
+ .getStaticPropertyMap() : getModel().getPropertyMap();
+ String name = node.getName();
+ PropertyNodes p = map.get(name);
+ if (p == null)
+ {
+ p = new PropertyNodes();
+ map.put(name, p);
+ }
+ p.setter = node;
FunctionNode fn = (FunctionNode) node;
fn.parseFunctionBody(getProblems());
-
+
boolean isBindableSetter = false;
if (node instanceof SetterNode)
{
- IMetaInfo[] metaInfos = null;
- metaInfos = node.getMetaInfos();
- for (IMetaInfo metaInfo : metaInfos)
- {
- name = metaInfo.getTagName();
- if (name.equals("Bindable") && metaInfo.getAllAttributes().length == 0)
- {
- isBindableSetter = true;
- break;
- }
- }
+ IMetaInfo[] metaInfos = null;
+ metaInfos = node.getMetaInfos();
+ for (IMetaInfo metaInfo : metaInfos)
+ {
+ name = metaInfo.getTagName();
+ if (name.equals("Bindable")
+ && metaInfo.getAllAttributes().length == 0)
+ {
+ isBindableSetter = true;
+ break;
+ }
+ }
}
if (isBindableSetter)
{
@@ -1533,12 +1071,12 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
emitMethodScope(node.getScopedNode());
}
}
-
+
@Override
protected void emitObjectDefineProperty(IAccessorNode node)
{
- //TODO: ajh is this method needed anymore?
-
+ //TODO: ajh is this method needed anymore?
+
FunctionNode fn = (FunctionNode) node;
fn.parseFunctionBody(getProblems());
@@ -1548,21 +1086,22 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
// ToDo (erikdebruin): add VF2JS conditional -> only use check during full SDK compilation
if (type == null)
return;
-
+
boolean isBindableSetter = false;
if (node instanceof SetterNode)
{
- IMetaInfo[] metaInfos = null;
- metaInfos = node.getMetaInfos();
- for (IMetaInfo metaInfo : metaInfos)
- {
- String name = metaInfo.getTagName();
- if (name.equals("Bindable") && metaInfo.getAllAttributes().length == 0)
- {
- isBindableSetter = true;
- break;
- }
- }
+ IMetaInfo[] metaInfos = null;
+ metaInfos = node.getMetaInfos();
+ for (IMetaInfo metaInfo : metaInfos)
+ {
+ String name = metaInfo.getTagName();
+ if (name.equals("Bindable")
+ && metaInfo.getAllAttributes().length == 0)
+ {
+ isBindableSetter = true;
+ break;
+ }
+ }
}
if (isBindableSetter)
{
@@ -1585,24 +1124,25 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
super.emitObjectDefineProperty(node);
}
-
+
@Override
- protected void emitDefinePropertyFunction(IAccessorNode node)
+ public void emitDefinePropertyFunction(IAccessorNode node)
{
boolean isBindableSetter = false;
if (node instanceof SetterNode)
{
- IMetaInfo[] metaInfos = null;
- metaInfos = node.getMetaInfos();
- for (IMetaInfo metaInfo : metaInfos)
- {
- String name = metaInfo.getTagName();
- if (name.equals("Bindable") && metaInfo.getAllAttributes().length == 0)
- {
- isBindableSetter = true;
- break;
- }
- }
+ IMetaInfo[] metaInfos = null;
+ metaInfos = node.getMetaInfos();
+ for (IMetaInfo metaInfo : metaInfos)
+ {
+ String name = metaInfo.getTagName();
+ if (name.equals("Bindable")
+ && metaInfo.getAllAttributes().length == 0)
+ {
+ isBindableSetter = true;
+ break;
+ }
+ }
}
if (isBindableSetter)
{
@@ -1623,7 +1163,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
//write(ASEmitterTokens.PAREN_OPEN);
//write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
-
+
// add change check
write(ASEmitterTokens.IF);
write(ASEmitterTokens.SPACE);
@@ -1646,37 +1186,27 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
write(params[0].getName());
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
-
- // add dispatch of change event
+
+ // add dispatch of change event
writeNewline(" this.dispatchEvent(org_apache_flex_events_ValueChangeEvent.createUpdateEvent(");
- writeNewline(" this, \"" + node.getName() + "\", oldValue, " + params[0].getName() + "));");
+ writeNewline(" this, \"" + node.getName()
+ + "\", oldValue, " + params[0].getName() + "));");
write(ASEmitterTokens.BLOCK_CLOSE);
//writeNewline(ASEmitterTokens.SEMICOLON);
writeNewline();
writeNewline();
}
else
- super.emitDefinePropertyFunction(node);
- }
-
- /*
- private void writeGetSetPrefix(boolean isGet)
- {
- if (isGet)
- write(ASEmitterTokens.GET);
- else
- write(ASEmitterTokens.SET);
- write("_");
+ super.emitDefinePropertyFunction(node);
}
- */
-
+
private JSFlexJSDocEmitter docEmitter = null;
-
+
@Override
public IDocEmitter getDocEmitter()
{
if (docEmitter == null)
- docEmitter = new JSFlexJSDocEmitter(this);
+ docEmitter = new JSFlexJSDocEmitter(this);
return docEmitter;
}
@@ -1696,7 +1226,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
writeNewline(" * @suppress {checkTypes}");
writeNewline(" */");
writeNewline();
-
+
/* goog.provide('x');\n\n */
write(JSGoogEmitterTokens.GOOG_PROVIDE);
write(ASEmitterTokens.PAREN_OPEN);
@@ -1713,7 +1243,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
{
PackageScope containedScope = (PackageScope) definition
.getContainedScope();
-
+
ArrayList<String> writtenRequires = new ArrayList<String>();
ITypeDefinition type = findType(containedScope.getAllLocalDefinitions());
@@ -1723,29 +1253,32 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
ITypeNode typeNode = type.getNode();
if (typeNode instanceof ClassNode)
{
- ClassNode classNode = (ClassNode) typeNode;
- if (classNode != null)
- {
- ASDocComment asDoc = (ASDocComment) classNode.getASDocComment();
- if (asDoc != null)
- {
- String asDocString = asDoc.commentNoEnd();
- String ignoreToken = JSFlexJSEmitterTokens.IGNORE_IMPORT.getToken();
- int ignoreIndex = asDocString.indexOf(ignoreToken);
- while (ignoreIndex != -1)
- {
- String ignorable = asDocString.substring(ignoreIndex + ignoreToken.length());
- int endIndex = ignorable.indexOf("\n");
- ignorable = ignorable.substring(0, endIndex);
- ignorable = ignorable.trim();
- // pretend we've already written the goog.requires for this
- writtenRequires.add(ignorable);
- ignoreIndex = asDocString.indexOf(ignoreToken, ignoreIndex + ignoreToken.length());
- }
- }
- }
+ ClassNode classNode = (ClassNode) typeNode;
+ if (classNode != null)
+ {
+ ASDocComment asDoc = (ASDocComment) classNode.getASDocComment();
+ if (asDoc != null)
+ {
+ String asDocString = asDoc.commentNoEnd();
+ String ignoreToken = JSFlexJSEmitterTokens.IGNORE_IMPORT
+ .getToken();
+ int ignoreIndex = asDocString.indexOf(ignoreToken);
+ while (ignoreIndex != -1)
+ {
+ String ignorable = asDocString.substring(ignoreIndex
+ + ignoreToken.length());
+ int endIndex = ignorable.indexOf("\n");
+ ignorable = ignorable.substring(0, endIndex);
+ ignorable = ignorable.trim();
+ // pretend we've already written the goog.requires for this
+ writtenRequires.add(ignorable);
+ ignoreIndex = asDocString.indexOf(ignoreToken,
+ ignoreIndex + ignoreToken.length());
+ }
+ }
+ }
}
-
+
if (project == null)
project = getWalker().getProject();
@@ -1784,14 +1317,14 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
write(ASEmitterTokens.SINGLE_QUOTE);
write(ASEmitterTokens.PAREN_CLOSE);
writeNewline(ASEmitterTokens.SEMICOLON);
-
+
writtenRequires.add(imp);
-
+
emitsRequires = true;
}
}
}
-
+
boolean emitsInterfaces = false;
if (interfacesList != null)
{
@@ -1799,25 +1332,25 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
{
if (writtenRequires.indexOf(imp) == -1)
{
- write(JSGoogEmitterTokens.GOOG_REQUIRE);
- write(ASEmitterTokens.PAREN_OPEN);
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(formatQualifiedName(imp));
- write(ASEmitterTokens.SINGLE_QUOTE);
- write(ASEmitterTokens.PAREN_CLOSE);
- writeNewline(ASEmitterTokens.SEMICOLON);
-
- emitsInterfaces = true;
+ write(JSGoogEmitterTokens.GOOG_REQUIRE);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(formatQualifiedName(imp));
+ write(ASEmitterTokens.SINGLE_QUOTE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ writeNewline(ASEmitterTokens.SEMICOLON);
+
+ emitsInterfaces = true;
}
}
}
-
+
// erikdebruin: Add missing language feature support, with e.g. 'is' and
// 'as' operators. We don't need to worry about requiring
// this in every project: ADVANCED_OPTIMISATIONS will NOT
// include any of the code if it is not used in the project.
- boolean isMainCU = flexProject.mainCU != null &&
- cu.getName().equals(flexProject.mainCU.getName());
+ boolean isMainCU = flexProject.mainCU != null
+ && cu.getName().equals(flexProject.mainCU.getName());
if (isMainCU)
{
write(JSGoogEmitterTokens.GOOG_REQUIRE);
@@ -1871,7 +1404,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
writeToken(JSFlexJSEmitterTokens.FLEXJS_CLASS_INFO);
writeToken(ASEmitterTokens.EQUAL);
writeToken(ASEmitterTokens.BLOCK_OPEN);
-
+
// names: [{ name: '', qName: '' }]
write(JSFlexJSEmitterTokens.NAMES);
writeToken(ASEmitterTokens.COLON);
@@ -1896,7 +1429,7 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
enodes = ((IClassNode) tnode).getImplementedInterfaceNodes();
else
enodes = ((IInterfaceNode) tnode).getExtendedInterfaceNodes();
-
+
if (enodes.length > 0)
{
writeToken(ASEmitterTokens.COMMA);
@@ -1907,8 +1440,9 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
write(ASEmitterTokens.SQUARE_OPEN);
int i = 0;
for (IExpressionNode enode : enodes)
- {
- write(formatQualifiedName(enode.resolve(project).getQualifiedName()));
+ {
+ write(formatQualifiedName(enode.resolve(project)
+ .getQualifiedName()));
if (i < enodes.length - 1)
writeToken(ASEmitterTokens.COMMA);
i++;
@@ -1922,8 +1456,6 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
}
}
- private int foreachLoopCounter = 0;
-
@Override
public void emitForEachLoop(IForLoopNode node)
{
@@ -2068,16 +1600,16 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
public void emitLiteral(ILiteralNode node)
{
boolean isWritten = false;
-
+
String s = node.getValue(true);
if (!(node instanceof RegExpLiteralNode))
{
if (node.getLiteralType() == LiteralType.XML)
{
// ToDo (erikdebruin): VF2JS -> handle XML output properly...
-
+
write("'" + s + "'");
-
+
isWritten = true;
}
s = s.replaceAll("\n", "__NEWLINE_PLACEHOLDER__");
@@ -2096,22 +1628,22 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
s = s.replaceAll("__CR_PLACEHOLDER__", "\\\\r");
s = s.replaceAll("__NEWLINE_PLACEHOLDER__", "\\\\n");
}
-
+
if (!isWritten)
{
write(s);
}
}
-
+
@Override
public void emitE4XFilter(IMemberAccessExpressionNode node)
{
- // ToDo (erikdebruin): implement E4X replacement !?!
+ // ToDo (erikdebruin): implement E4X replacement !?!
write(ASEmitterTokens.SINGLE_QUOTE);
write("E4XFilter");
write(ASEmitterTokens.SINGLE_QUOTE);
}
-
+
/*
@Override
public void emitUnaryOperator(IUnaryOperatorNode node)
@@ -2156,10 +1688,10 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
((MemberAccessExpressionNode)parentNode).getLeftOperandNode() == node)
{
// GCC wanted parens around foo++.toString(). As in (foo++).toString();
- write(ASEmitterTokens.PAREN_OPEN);
- super.emitUnaryOperator(node);
- write(ASEmitterTokens.PAREN_CLOSE);
- return;
+ write(ASEmitterTokens.PAREN_OPEN);
+ super.emitUnaryOperator(node);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ return;
}
}
@@ -2167,19 +1699,217 @@ public class JSFlexJSEmitter extends JSGoogEmitter implements IJSFlexJSEmitter
super.emitUnaryOperator(node);
}
*/
-
+
@Override
- protected String formatQualifiedName(String name)
+ public String formatQualifiedName(String name)
+ {
+ if (name.contains("goog.") || name.startsWith("Vector."))
+ return name;
+ name = name.replaceAll("\\.", "_");
+ return name;
+ }
+
+}
+
+/*
+@Override
+public void emitInterface(IInterfaceNode node)
+{
+ ICompilerProject project = getWalker().getProject();
+
+ getDoc().emitInterfaceDoc(node, project);
+
+ String qname = node.getQualifiedName();
+ if (qname != null && !qname.equals(""))
{
- if (name.contains("goog.") || name.startsWith("Vector."))
- return name;
- name = name.replaceAll("\\.", "_");
- return name;
+ write(formatQualifiedName(qname));
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
}
+
- @Override
- protected IDefinition getClassDefinition()
+ final IDefinitionNode[] members = node.getAllMemberDefinitionNodes();
+ for (IDefinitionNode mnode : members)
+ {
+ boolean isAccessor = mnode.getNodeID() == ASTNodeID.GetterID
+ || mnode.getNodeID() == ASTNodeID.SetterID;
+
+ writeNewline();
+ writeNewline();
+ writeNewline();
+
+ getDoc().emitInterfaceMemberDoc((IFunctionNode) mnode, project);
+
+ write(formatQualifiedName(qname));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ if (isAccessor)
+ {
+ writeGetSetPrefix(mnode.getNodeID() == ASTNodeID.GetterID);
+ }
+ write(mnode.getQualifiedName());
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+ emitParameters(((IFunctionNode) mnode).getParameterNodes());
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+}
+*/
+
+/*
+@Override
+public void emitMethod(IFunctionNode node)
+{
+ FunctionNode fn = (FunctionNode) node;
+ fn.parseFunctionBody(getProblems());
+
+ ICompilerProject project = getWalker().getProject();
+
+ getDoc().emitMethodDoc(node, project);
+
+ boolean isConstructor = node.isConstructor();
+
+ String qname = getTypeDefinition(node).getQualifiedName();
+ if (qname != null && !qname.equals(""))
+ {
+ write(formatQualifiedName(qname));
+ if (!isConstructor)
+ {
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ if (!fn.hasModifier(ASModifier.STATIC))
+ {
+ write(JSEmitterTokens.PROTOTYPE);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ }
+ }
+ }
+
+ if (!isConstructor)
+ emitMemberName(node);
+
+ write(ASEmitterTokens.SPACE);
+ writeToken(ASEmitterTokens.EQUAL);
+ write(ASEmitterTokens.FUNCTION);
+
+ emitParameters(node.getParameterNodes());
+
+ boolean hasSuperClass = hasSuperClass(node);
+
+ if (isConstructor && node.getScopedNode().getChildCount() == 0)
+ {
+ write(ASEmitterTokens.SPACE);
+ write(ASEmitterTokens.BLOCK_OPEN);
+ if (hasSuperClass)
+ emitSuperCall(node, CONSTRUCTOR_EMPTY);
+ writeNewline();
+ write(ASEmitterTokens.BLOCK_CLOSE);
+ }
+
+ if (!isConstructor || node.getScopedNode().getChildCount() > 0)
+ emitMethodScope(node.getScopedNode());
+
+ if (isConstructor && hasSuperClass)
{
- return thisClass;
+ writeNewline(ASEmitterTokens.SEMICOLON);
+ write(JSGoogEmitterTokens.GOOG_INHERITS);
+ write(ASEmitterTokens.PAREN_OPEN);
+ write(formatQualifiedName(qname));
+ writeToken(ASEmitterTokens.COMMA);
+ String sname = getSuperClassDefinition(node, project)
+ .getQualifiedName();
+ write(formatQualifiedName(sname));
+ write(ASEmitterTokens.PAREN_CLOSE);
}
}
+*/
+
+/*
+@Override
+protected void emitDefaultParameterCodeBlock(IFunctionNode node)
+{
+ IParameterNode[] pnodes = node.getParameterNodes();
+ if (pnodes.length == 0)
+ return;
+
+ Map<Integer, IParameterNode> defaults = getDefaults(pnodes);
+
+ if (defaults != null)
+ {
+ final StringBuilder code = new StringBuilder();
+
+ if (!hasBody(node))
+ {
+ indentPush();
+ write(JSFlexJSEmitterTokens.INDENT);
+ }
+
+ List<IParameterNode> parameters = new ArrayList<IParameterNode>(
+ defaults.values());
+
+ for (int i = 0, n = parameters.size(); i < n; i++)
+ {
+ IParameterNode pnode = parameters.get(i);
+
+ if (pnode != null)
+ {
+ code.setLength(0);
+
+ // x = typeof y !== 'undefined' ? y : z;\n
+ code.append(pnode.getName());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.EQUAL.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.TYPEOF.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(pnode.getName());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.STRICT_NOT_EQUAL.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+ code.append(ASEmitterTokens.UNDEFINED.getToken());
+ code.append(ASEmitterTokens.SINGLE_QUOTE.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.TERNARY.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(pnode.getName());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(ASEmitterTokens.COLON.getToken());
+ code.append(ASEmitterTokens.SPACE.getToken());
+ code.append(pnode.getDefaultValue());
+ code.append(ASEmitterTokens.SEMICOLON.getToken());
+
+ write(code.toString());
+
+ if (i == n - 1 && !hasBody(node))
+ indentPop();
+
+ writeNewline();
+ }
+ }
+ }
+}
+*/
+
+/*
+private void writeGetSetPrefix(boolean isGet)
+{
+ if (isGet)
+ write(ASEmitterTokens.GET);
+ else
+ write(ASEmitterTokens.SET);
+ write("_");
+}
+*/
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
index ebe7c4e..d9ca745 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogEmitter.java
@@ -105,7 +105,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
{
write(ASEmitterTokens.INDENT);
}
-
+
//--------------------------------------------------------------------------
//
//--------------------------------------------------------------------------
@@ -193,6 +193,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
public void emitClass(IClassNode node)
{
IClassDefinition definition = node.getDefinition();
+ getModel().setCurrentClass(definition);
IFunctionDefinition ctorDefinition = definition.getConstructor();
@@ -392,7 +393,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
emitDeclarationName(node);
if (!(avnode instanceof IEmbedNode))
- emitAssignedValue(avnode);
+ emitAssignedValue(avnode);
if (!(node instanceof ChainedVariableNode))
{
@@ -593,8 +594,7 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
else
{
String pname = (type != null) ? type.getPackageName() : "";
- if (cnode != null
- && pname != ""
+ if (cnode != null && pname != ""
&& !pname.equalsIgnoreCase(cnode.getPackageName())
&& inode != ASTNodeID.ArgumentID
&& inode != ASTNodeID.VariableID
@@ -621,8 +621,8 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
if (hasBody(node) && !isStatic && !isLocal)
emitSelfReference(node);
- if (node.isConstructor()
- && hasSuperClass(node) && !hasSuperCall(node.getScopedNode()))
+ if (node.isConstructor() && hasSuperClass(node)
+ && !hasSuperCall(node.getScopedNode()))
emitSuperCall(node, CONSTRUCTOR_FULL);
emitRestParameterCodeBlock(node);
@@ -667,11 +667,11 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
if (cnode == null)
{
- IDefinition cdef = getClassDefinition();
+ IDefinition cdef = getModel().getCurrentClass();
write(formatQualifiedName(cdef.getQualifiedName()));
}
else
- write(formatQualifiedName(cnode.getQualifiedName()));
+ write(formatQualifiedName(cnode.getQualifiedName()));
write(ASEmitterTokens.MEMBER_ACCESS);
write(JSGoogEmitterTokens.GOOG_BASE);
write(ASEmitterTokens.PAREN_OPEN);
@@ -1049,15 +1049,16 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
protected void emitDefinePropertyFunction(IAccessorNode node)
{
- emitMethodScope(node.getScopedNode());
+ emitMethodScope(node.getScopedNode());
}
-
+
//--------------------------------------------------------------------------
// Operators
//--------------------------------------------------------------------------
@Override
- public void emitNamespaceAccessExpression(INamespaceAccessExpressionNode node)
+ public void emitNamespaceAccessExpression(
+ INamespaceAccessExpressionNode node)
{
getWalker().walk(node.getLeftOperandNode());
write(ASEmitterTokens.MEMBER_ACCESS);
@@ -1167,15 +1168,9 @@ public class JSGoogEmitter extends JSEmitter implements IJSGoogEmitter
}
return list;
}
-
+
protected String formatQualifiedName(String name)
{
- return name;
+ return name;
}
-
- protected IDefinition getClassDefinition()
- {
- return null;
- }
-
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/ab1c421d/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
new file mode 100644
index 0000000..310bf6b
--- /dev/null
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/jx/BindableEmitter.java
@@ -0,0 +1,76 @@
+/*
+ *
+ * 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.js.jx;
+
+import org.apache.flex.compiler.codegen.ISubEmitter;
+import org.apache.flex.compiler.codegen.js.IJSEmitter;
+import org.apache.flex.compiler.definitions.IClassDefinition;
+import org.apache.flex.compiler.internal.codegen.as.ASEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
+import org.apache.flex.compiler.internal.codegen.js.JSSubEmitter;
+import org.apache.flex.compiler.internal.codegen.js.flexjs.JSFlexJSEmitter;
+import org.apache.flex.compiler.internal.codegen.js.goog.JSGoogEmitterTokens;
+
+public class BindableEmitter extends JSSubEmitter implements
+ ISubEmitter<IClassDefinition>
+{
+ public BindableEmitter(IJSEmitter emitter)
+ {
+ super(emitter);
+ }
+
+ @Override
+ public void emit(IClassDefinition definition)
+ {
+ // TODO (mschmalle) will remove this cast as more things get abstracted
+ JSFlexJSEmitter fjs = (JSFlexJSEmitter) getEmitter();
+
+ if (getModel().hasBindableVars())
+ {
+ write(JSGoogEmitterTokens.OBJECT);
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.DEFINE_PROPERTIES);
+ write(ASEmitterTokens.PAREN_OPEN);
+ String qname = definition.getQualifiedName();
+ write(fjs.formatQualifiedName(qname));
+ write(ASEmitterTokens.MEMBER_ACCESS);
+ write(JSEmitterTokens.PROTOTYPE);
+ write(ASEmitterTokens.COMMA);
+ write(ASEmitterTokens.SPACE);
+ write("/** @lends {" + fjs.formatQualifiedName(qname)
+ + ".prototype} */ ");
+ writeNewline(ASEmitterTokens.BLOCK_OPEN);
+
+ boolean firstTime = true;
+ for (String varName : getModel().getBindableVars())
+ {
+ if (firstTime)
+ firstTime = false;
+ else
+ write(ASEmitterTokens.COMMA);
+
+ fjs.emitBindableVarDefineProperty(varName, definition);
+ }
+ writeNewline(ASEmitterTokens.BLOCK_CLOSE);
+ write(ASEmitterTokens.PAREN_CLOSE);
+ write(ASEmitterTokens.SEMICOLON);
+ }
+ }
+}
[18/42] git commit: [flex-falcon] [refs/heads/develop] - Raise
visibility to allow sub class to call from @override method
Posted by ah...@apache.org.
Raise visibility to allow sub class to call from @override method
Signed-off-by: Erik de Bruin <er...@ixsoftware.nl>
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/e7636ff3
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/e7636ff3
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/e7636ff3
Branch: refs/heads/develop
Commit: e7636ff33693f7a40c778d53af45eccb45ed70cd
Parents: 7308a81
Author: Erik de Bruin <er...@ixsoftware.nl>
Authored: Mon Feb 16 12:51:12 2015 +0100
Committer: Frédéric THOMAS <we...@gmail.com>
Committed: Tue Jun 2 13:40:37 2015 +0100
----------------------------------------------------------------------
.../flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/e7636ff3/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
index e402ac9..b8e513d 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/js/goog/JSGoogDocEmitter.java
@@ -398,7 +398,7 @@ public class JSGoogDocEmitter extends JSDocEmitter implements IJSGoogDocEmitter
emitJSDocLine(name.getToken(), "");
}
- private void emitJSDocLine(String name)
+ protected void emitJSDocLine(String name)
{
emitJSDocLine(name, "");
}