Repository: flex-falcon Updated Branches: refs/heads/release0.8.0 ad8fb20ee -> d210ac57c
allow pruning of Class Selectors Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/55ca0b2d Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/55ca0b2d Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/55ca0b2d Branch: refs/heads/release0.8.0 Commit: 55ca0b2d5c6b4892afba73fcbcba2ef3bac7ce42 Parents: ad8fb20 Author: Alex Harui <aha...@apache.org> Authored: Mon May 15 15:12:21 2017 -0700 Committer: Alex Harui <aha...@apache.org> Committed: Mon May 15 15:12:21 2017 -0700 ---------------------------------------------------------------------- .../css/semantics/CSSSemanticAnalyzer.java | 36 +++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/55ca0b2d/compiler/src/main/java/org/apache/flex/compiler/internal/css/semantics/CSSSemanticAnalyzer.java ---------------------------------------------------------------------- diff --git a/compiler/src/main/java/org/apache/flex/compiler/internal/css/semantics/CSSSemanticAnalyzer.java b/compiler/src/main/java/org/apache/flex/compiler/internal/css/semantics/CSSSemanticAnalyzer.java index e2f244c..d34cdee 100644 --- a/compiler/src/main/java/org/apache/flex/compiler/internal/css/semantics/CSSSemanticAnalyzer.java +++ b/compiler/src/main/java/org/apache/flex/compiler/internal/css/semantics/CSSSemanticAnalyzer.java @@ -36,6 +36,7 @@ import org.apache.flex.compiler.css.ICSSProperty; import org.apache.flex.compiler.css.ICSSPropertyValue; import org.apache.flex.compiler.css.ICSSRule; import org.apache.flex.compiler.css.ICSSSelector; +import org.apache.flex.compiler.css.ICSSSelectorCondition; import org.apache.flex.compiler.definitions.IClassDefinition; import org.apache.flex.compiler.definitions.IDefinition; import org.apache.flex.compiler.definitions.metadata.IMetaTag; @@ -385,7 +386,11 @@ public class CSSSemanticAnalyzer for (final ICSSSelector selector : rule.getSelectorGroup()) { if (isWildcardSelector(selector)) - return true; + { + String selName = getOptionalSelectorName(selector); + if (selName == null) return true; + return qnames.contains(selName); + } final String qname = resolvedSelectors.get(selector); if (qnames.contains(qname)) return true; @@ -514,6 +519,35 @@ public class CSSSemanticAnalyzer } /** + * Check if the selector is a optional class selector. + * An optional class selector is a class selector + * with the name opt_qname_otherstuff. + * + * The output will not contain the selector if the + * class identified by qname is not in the output. + * + * @param selector CSS selector + * @return True if the selector is a "optional" selector. + */ + public static String getOptionalSelectorName(ICSSSelector selector) + { + ImmutableList<ICSSSelectorCondition> conditions = selector.getConditions(); + if (conditions.size() == 0) + return null; + final String elementName = conditions.get(0).getValue(); + if (elementName == null) return null; + if (elementName.startsWith("opt_")) + { + int c = elementName.indexOf("_", 4); + if (c >= 0) + { + return elementName.substring(4, c).replace("-", "."); + + } + } + return null; + } + /** * Build a map from QNames to class definitions. * * @param classDefinitions Class definitions.