You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by er...@apache.org on 2013/11/13 11:52:22 UTC
[3/9] git commit: [flex-falcon] [refs/heads/develop] - output encoded
CSS from fx:Style blocks
output encoded CSS from fx:Style blocks
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/d98ce9dc
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/d98ce9dc
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/d98ce9dc
Branch: refs/heads/develop
Commit: d98ce9dc259f51253cbe7c3d792e46ff5a8a4a79
Parents: 9e10215
Author: Alex Harui <ah...@apache.org>
Authored: Tue Nov 12 15:31:06 2013 -0800
Committer: Erik de Bruin <er...@ixsoftware.nl>
Committed: Wed Nov 13 08:13:38 2013 +0100
----------------------------------------------------------------------
.../internal/codegen/mxml/MXMLBlockWalker.java | 4 +-
.../mxml/flexjs/MXMLFlexJSBlockWalker.java | 42 +++++++++++++++++++
.../codegen/mxml/flexjs/MXMLFlexJSEmitter.java | 44 ++++++++++++++++++++
.../internal/projects/FlexJSProject.java | 8 ++++
.../compiler/internal/projects/FlexProject.java | 8 ++++
.../internal/tree/mxml/MXMLFileNode.java | 2 +-
6 files changed, 105 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/d98ce9dc/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
index 9c968e9..d7dfabd 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/MXMLBlockWalker.java
@@ -88,7 +88,7 @@ public class MXMLBlockWalker implements IMXMLBlockVisitor, IMXMLBlockWalker
// errors
//----------------------------------
- private List<ICompilerProblem> errors;
+ protected List<ICompilerProblem> errors;
List<ICompilerProblem> getErrors()
{
@@ -99,7 +99,7 @@ public class MXMLBlockWalker implements IMXMLBlockVisitor, IMXMLBlockWalker
// project
//----------------------------------
- private IASProject project;
+ protected IASProject project;
public IASProject getProject()
{
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/d98ce9dc/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSBlockWalker.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSBlockWalker.java b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSBlockWalker.java
index 70d99ed..6e62dbe 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSBlockWalker.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/codegen/mxml/flexjs/MXMLFlexJSBlockWalker.java
@@ -19,18 +19,30 @@
package org.apache.flex.compiler.internal.codegen.mxml.flexjs;
+import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
import org.apache.flex.compiler.codegen.as.IASEmitter;
import org.apache.flex.compiler.codegen.mxml.IMXMLEmitter;
import org.apache.flex.compiler.codegen.mxml.flexjs.IMXMLFlexJSEmitter;
+import org.apache.flex.compiler.css.ICSSDocument;
+import org.apache.flex.compiler.css.ICSSRule;
+import org.apache.flex.compiler.internal.caches.CSSDocumentCache;
import org.apache.flex.compiler.internal.codegen.mxml.MXMLBlockWalker;
+import org.apache.flex.compiler.internal.css.codegen.CSSCompilationSession;
+import org.apache.flex.compiler.internal.driver.js.flexjs.JSCSSCompilationSession;
+import org.apache.flex.compiler.internal.projects.FlexJSProject;
import org.apache.flex.compiler.problems.ICompilerProblem;
import org.apache.flex.compiler.projects.IASProject;
+import org.apache.flex.compiler.projects.IFlexProject;
import org.apache.flex.compiler.tree.mxml.IMXMLDocumentNode;
import org.apache.flex.compiler.tree.mxml.IMXMLFileNode;
+import org.apache.flex.compiler.tree.mxml.IMXMLStyleNode;
import org.apache.flex.compiler.visitor.IBlockWalker;
+import com.google.common.collect.ImmutableList;
+
/**
* @author Michael Schmalle
* @author Erik de Bruin
@@ -49,6 +61,8 @@ public class MXMLFlexJSBlockWalker extends MXMLBlockWalker
this.mxmlEmitter = mxmlEmitter;
}
+ public String encodedCSS = "";
+
//--------------------------------------------------------------------------
@Override
@@ -67,4 +81,32 @@ public class MXMLFlexJSBlockWalker extends MXMLBlockWalker
((IMXMLFlexJSEmitter) mxmlEmitter).emitDocument(node);
}
+ @Override
+ public void visitStyleBlock(IMXMLStyleNode node)
+ {
+ ICSSDocument css = node.getCSSDocument(errors);
+ StringBuilder sb = new StringBuilder();
+ ImmutableList<ICSSRule> rules = css.getRules();
+ for (ICSSRule rule : rules)
+ {
+ sb.append(rule.toString());
+ sb.append("\n\n");
+ }
+ ((FlexJSProject)project).cssDocument += sb.toString();
+
+ // Ignore semanticProblems. They should have been collected during the semantic analysis phase already.
+ final Collection<ICompilerProblem> problems = new HashSet<ICompilerProblem>();
+ if (css == CSSDocumentCache.EMPTY_CSS_DOCUMENT)
+ return;
+
+ final IFlexProject flexProject = (IFlexProject)getProject();
+
+ final CSSCompilationSession session = node.getFileNode().getCSSCompilationSession();
+ if (session == null)
+ return;
+
+ session.setKeepAllTypeSelectors(true);
+ encodedCSS += ((JSCSSCompilationSession)session).getEncodedCSS(flexProject, problems);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/d98ce9dc/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 d05067e..732fc4b 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
@@ -20,6 +20,7 @@
package org.apache.flex.compiler.internal.codegen.mxml.flexjs;
+import java.io.File;
import java.io.FilterWriter;
import java.util.ArrayList;
import java.util.List;
@@ -42,6 +43,7 @@ import org.apache.flex.compiler.internal.codegen.databinding.StaticPropertyWatch
import org.apache.flex.compiler.internal.codegen.databinding.WatcherInfoBase;
import org.apache.flex.compiler.internal.codegen.databinding.WatcherInfoBase.WatcherType;
import org.apache.flex.compiler.internal.codegen.databinding.XMLWatcherInfo;
+import org.apache.flex.compiler.internal.codegen.js.JSEmitterTokens;
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;
@@ -164,6 +166,7 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
emitBindingData(cname, cdef);
+ emitEncodedCSS(cname);
}
//--------------------------------------------------------------------------
@@ -1328,6 +1331,36 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
// JS output
//--------------------------------------------------------------------------
+ private void emitEncodedCSS(String cname)
+ {
+ String s = ((MXMLFlexJSBlockWalker)getMXMLWalker()).encodedCSS;
+ if (!s.isEmpty())
+ {
+ int reqidx = s.indexOf("goog.require");
+ if (reqidx != -1)
+ s = s.substring(0, reqidx - 1);
+
+ writeNewline();
+ writeNewline("/**");
+ writeNewline(" * @expose");
+ writeNewline(" * @this {" + cname + "}");
+ writeNewline(" */");
+ StringBuilder sb = new StringBuilder();
+ sb.append(cname);
+ sb.append(ASEmitterTokens.MEMBER_ACCESS.getToken());
+ sb.append(JSEmitterTokens.PROTOTYPE.getToken());
+ sb.append(ASEmitterTokens.MEMBER_ACCESS.getToken());
+ sb.append("cssData");
+ sb.append(ASEmitterTokens.SPACE.getToken() +
+ ASEmitterTokens.EQUAL.getToken() +
+ ASEmitterTokens.SPACE.getToken() +
+ ASEmitterTokens.SQUARE_OPEN.getToken());
+ sb.append(s);
+ write(sb.toString());
+ writeNewline();
+ }
+ }
+
private void emitHeader(IMXMLDocumentNode node)
{
String cname = node.getFileNode().getName();
@@ -1395,6 +1428,17 @@ public class MXMLFlexJSEmitter extends MXMLEmitter implements
}
}
+ String s = ((MXMLFlexJSBlockWalker)getMXMLWalker()).encodedCSS;
+ if (!s.isEmpty())
+ {
+ int reqidx = s.indexOf("goog.require");
+ if (reqidx != -1)
+ {
+ String reqs = s.substring(reqidx);
+ writeNewline(reqs);
+ }
+ }
+
// erikdebruin: Add missing language feature support, like the 'is' and
// 'as' operators. We don't need to worry about requiring
// this in every project: ADVANCED_OPTIMISATIONS will NOT
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/d98ce9dc/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
----------------------------------------------------------------------
diff --git a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
index d3ee538..eb1fa63 100644
--- a/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
+++ b/compiler.jx/src/org/apache/flex/compiler/internal/projects/FlexJSProject.java
@@ -25,7 +25,9 @@ import java.util.Set;
import org.apache.flex.compiler.common.DependencyType;
import org.apache.flex.compiler.definitions.IDefinition;
import org.apache.flex.compiler.internal.codegen.mxml.flexjs.MXMLFlexJSEmitterTokens;
+import org.apache.flex.compiler.internal.css.codegen.CSSCompilationSession;
import org.apache.flex.compiler.internal.definitions.InterfaceDefinition;
+import org.apache.flex.compiler.internal.driver.js.flexjs.JSCSSCompilationSession;
import org.apache.flex.compiler.internal.scopes.ASProjectScope.DefinitionPromise;
import org.apache.flex.compiler.internal.tree.mxml.MXMLClassDefinitionNode;
import org.apache.flex.compiler.internal.workspaces.Workspace;
@@ -141,4 +143,10 @@ public class FlexJSProject extends FlexProject
return null;
}
+ @Override
+ public CSSCompilationSession getCSSCompilationSession()
+ {
+ return new JSCSSCompilationSession();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/d98ce9dc/compiler/src/org/apache/flex/compiler/internal/projects/FlexProject.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/projects/FlexProject.java b/compiler/src/org/apache/flex/compiler/internal/projects/FlexProject.java
index 69f0bff..a6b5761 100644
--- a/compiler/src/org/apache/flex/compiler/internal/projects/FlexProject.java
+++ b/compiler/src/org/apache/flex/compiler/internal/projects/FlexProject.java
@@ -56,6 +56,7 @@ import org.apache.flex.compiler.exceptions.LibraryCircularDependencyException;
import org.apache.flex.compiler.filespecs.IFileSpecification;
import org.apache.flex.compiler.internal.as.codegen.BindableHelper;
import org.apache.flex.compiler.internal.css.CSSManager;
+import org.apache.flex.compiler.internal.css.codegen.CSSCompilationSession;
import org.apache.flex.compiler.internal.definitions.ClassDefinition;
import org.apache.flex.compiler.internal.definitions.NamespaceDefinition;
import org.apache.flex.compiler.internal.definitions.PackageDefinition;
@@ -1452,6 +1453,13 @@ public class FlexProject extends ASProject implements IFlexProject
return cssManager;
}
+
+ public CSSCompilationSession getCSSCompilationSession()
+ {
+ return new CSSCompilationSession();
+ }
+
+
/**
* String that replaces occurrences of "{context.root}" in the
* services-config.xml. The context root is specified using the
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/d98ce9dc/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLFileNode.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLFileNode.java b/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLFileNode.java
index 7bf0aaa..b31898e 100644
--- a/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLFileNode.java
+++ b/compiler/src/org/apache/flex/compiler/internal/tree/mxml/MXMLFileNode.java
@@ -511,7 +511,7 @@ public class MXMLFileNode extends MXMLNodeBase implements IMXMLFileNode, IScoped
public synchronized CSSCompilationSession getCSSCompilationSession()
{
if (cssCompilationSession == null)
- cssCompilationSession = new CSSCompilationSession();
+ cssCompilationSession = project.getCSSCompilationSession();
return cssCompilationSession;
}