This is an automated email from the ASF dual-hosted git repository. joshtynjala pushed a commit to branch develop in repository https://gitbox.apache.org/repos/asf/royale-compiler.git
commit 6331da32d67434e836911d25e56b1649d2079121 Author: Josh Tynjala <[email protected]> AuthorDate: Wed Feb 28 15:05:03 2024 -0800 CSSDocument: fix start/end/line/column/endLine/endColumn range detection --- .../royale/compiler/internal/css/CSSDocument.java | 55 ++++++++++++++++++++-- 1 file changed, 51 insertions(+), 4 deletions(-) diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSDocument.java b/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSDocument.java index e06872359..96d0bebac 100644 --- a/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSDocument.java +++ b/compiler/src/main/java/org/apache/royale/compiler/internal/css/CSSDocument.java @@ -19,6 +19,7 @@ package org.apache.royale.compiler.internal.css; +import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; @@ -30,16 +31,14 @@ import org.antlr.runtime.RecognitionException; import org.antlr.runtime.TokenStream; import org.antlr.runtime.tree.CommonTree; import org.antlr.runtime.tree.CommonTreeNodeStream; - import org.apache.royale.compiler.css.ICSSDocument; import org.apache.royale.compiler.css.ICSSFontFace; import org.apache.royale.compiler.css.ICSSNamespaceDefinition; +import org.apache.royale.compiler.css.ICSSNode; import org.apache.royale.compiler.css.ICSSRule; -import org.apache.royale.compiler.internal.css.CSSLexer; -import org.apache.royale.compiler.internal.css.CSSParser; -import org.apache.royale.compiler.internal.css.CSSTree; import org.apache.royale.compiler.problems.ICompilerProblem; import org.apache.royale.compiler.problems.UnexpectedExceptionProblem; + import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; @@ -51,6 +50,7 @@ public class CSSDocument extends CSSNodeBase implements ICSSDocument { /** The short name for the default namespace is an empty string. */ private static final String DEFAULT_NAMESPACE_SHORT_NAME = ""; + private static final int NOT_SET = -1; /** * Parse a CSS document into {@link ICSSDocument} model. @@ -132,6 +132,53 @@ public class CSSDocument extends CSSNodeBase implements ICSSDocument children.add(new CSSTypedNode(CSSModelTreeType.NAMESPACE_LIST, this.namespaces)); children.add(new CSSTypedNode(CSSModelTreeType.FONT_FACE_LIST, this.fontFaces)); children.add(new CSSTypedNode(CSSModelTreeType.RULE_LIST, this.rules)); + + List<ICSSNode> allNodes = new ArrayList<ICSSNode>(); + allNodes.addAll(this.namespaces); + allNodes.addAll(this.fontFaces); + allNodes.addAll(this.rules); + int line = NOT_SET; + int column = NOT_SET; + int endLine = NOT_SET; + int endColumn = NOT_SET; + int start = NOT_SET; + int end = NOT_SET; + for (ICSSNode node : allNodes) + { + if (start == NOT_SET || start > node.getStart()) + { + start = node.getStart(); + } + if (end == NOT_SET || end < node.getStart()) + { + end = node.getEnd(); + } + if (line == NOT_SET || line > node.getLine()) + { + line = node.getLine(); + column = node.getColumn(); + } + else if (line == node.getLine() && column > node.getColumn()) + { + column = node.getColumn(); + } + if (endLine == NOT_SET || endLine < node.getEndLine()) + { + endLine = node.getEndLine(); + endColumn = node.getEndColumn(); + } + else if (endLine == node.getEndLine() && endColumn < node.getEndColumn()) + { + endColumn = node.getEndColumn(); + } + } + setStart(start); + setEnd(end); + setLine(line); + setColumn(column); + setEndLine(endLine); + setEndColumn(endColumn); + setSourcePath(tokenStream.getSourceName()); } private final ImmutableList<ICSSRule> rules;
