You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by go...@apache.org on 2013/05/08 01:19:01 UTC
git commit: [flex-falcon] [refs/heads/develop] - Cleaned up
MXMLTagAttributeData
Updated Branches:
refs/heads/develop 310c37669 -> 3d1b6ca25
Cleaned up MXMLTagAttributeData
Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/3d1b6ca2
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/3d1b6ca2
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/3d1b6ca2
Branch: refs/heads/develop
Commit: 3d1b6ca25ac074b955bb808b11c0e40f9069566a
Parents: 310c376
Author: Gordon Smith <go...@apache.org>
Authored: Tue May 7 16:18:50 2013 -0700
Committer: Gordon Smith <go...@apache.org>
Committed: Tue May 7 16:18:50 2013 -0700
----------------------------------------------------------------------
.../internal/mxml/MXMLTagAttributeData.java | 445 ++++++++-------
1 files changed, 223 insertions(+), 222 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/3d1b6ca2/compiler/src/org/apache/flex/compiler/internal/mxml/MXMLTagAttributeData.java
----------------------------------------------------------------------
diff --git a/compiler/src/org/apache/flex/compiler/internal/mxml/MXMLTagAttributeData.java b/compiler/src/org/apache/flex/compiler/internal/mxml/MXMLTagAttributeData.java
index 4a6cd07..5fe7b92 100644
--- a/compiler/src/org/apache/flex/compiler/internal/mxml/MXMLTagAttributeData.java
+++ b/compiler/src/org/apache/flex/compiler/internal/mxml/MXMLTagAttributeData.java
@@ -36,15 +36,19 @@ import org.apache.flex.compiler.problems.ICompilerProblem;
import org.apache.flex.compiler.problems.SyntaxProblem;
/**
- * Encapsulation of a tag attribute in MXML
+ * Represents a tag attribute in MXML.
*/
-public class MXMLTagAttributeData extends SourceLocation implements
- IMXMLTagAttributeData
+public class MXMLTagAttributeData extends SourceLocation implements IMXMLTagAttributeData
{
/**
* Constructor.
+ * <p>
+ * Each attribute consumes three tokens:
+ * {@code TOKEN_NAME}, {@code TOKEN_EQUALS}, and {@code TOKEN_STRING}.
*/
- MXMLTagAttributeData(MXMLToken nameToken, ListIterator<MXMLToken> tokenIterator, MXMLDialect mxmlDialect, IFileSpecification spec, Collection<ICompilerProblem> problems)
+ MXMLTagAttributeData(MXMLToken nameToken, ListIterator<MXMLToken> tokenIterator,
+ MXMLDialect mxmlDialect, IFileSpecification spec,
+ Collection<ICompilerProblem> problems)
{
setStart(nameToken.getStart());
setLine(nameToken.getLine());
@@ -62,7 +66,7 @@ public class MXMLTagAttributeData extends SourceLocation implements
MXMLToken token = null;
- // Look for "=" token
+ // Look for "=" token.
if (tokenIterator.hasNext())
{
token = tokenIterator.next();
@@ -70,19 +74,17 @@ public class MXMLTagAttributeData extends SourceLocation implements
if (token.getType() != MXMLTokenTypes.TOKEN_EQUALS)
{
problems.add(new SyntaxProblem(token));
- // need to restore the token position in the error
- // case to handle error recovery otherwise the any
- // trees after this won't be created
+ // Restore the token position for error recovery.
tokenIterator.previous();
return;
}
- valueStart = token.getEnd() + 1; //set the attributes start to right after the equals until we have a value
+ valueStart = token.getEnd() + 1; // set the value's start to right after the equals until we have a value
valueLine = token.getLine();
valueColumn = token.getColumn();
}
- // Look for value token
+ // Look for value token.
while (tokenIterator.hasNext())
{
token = tokenIterator.next();
@@ -93,23 +95,16 @@ public class MXMLTagAttributeData extends SourceLocation implements
else
{
if (!MXMLToken.isTagEnd(token.getType()) && token.getType() != MXMLTokenTypes.TOKEN_NAME)
- {
- // if we error out early, push back token - it may be start of next tag
- // this is "pre-falcon" repair that was lost
- tokenIterator.previous();
problems.add(new SyntaxProblem(token));
- }
- else
- {
- tokenIterator.previous();
- }
- break;
+ // Restore the token position for error recovery.
+ tokenIterator.previous();
+ return;
}
}
}
/**
- * The MXML tag that contains this attribute
+ * The MXML tag that contains this attribute.
*/
protected IMXMLTagData parent;
@@ -124,6 +119,11 @@ public class MXMLTagAttributeData extends SourceLocation implements
protected String attributeName;
/**
+ * The name of this state, if it exists.
+ */
+ protected String stateName;
+
+ /**
* The offset at which the optional state starts.
*/
protected int stateStart;
@@ -134,25 +134,20 @@ public class MXMLTagAttributeData extends SourceLocation implements
protected String valueIncludingDelimiters;
/**
- * The offset at which the attribute value starts
+ * The offset at which the attribute value starts.
*/
protected int valueStart;
/**
- * The line on which the attribute value starts
+ * The line on which the attribute value starts.
*/
protected int valueLine;
/**
- * The column at which the attribute value starts
+ * The column at which the attribute value starts.
*/
protected int valueColumn;
- /**
- * The name of this state, if it exists
- */
- protected String stateName;
-
//
// Object overrides.
//
@@ -166,75 +161,78 @@ public class MXMLTagAttributeData extends SourceLocation implements
return sb.toString();
}
- /**
- * For unit tests only.
- *
- * @return name value and offsets in string form
- */
- public String buildAttributeString(boolean skipSrcPath)
- {
- StringBuilder sb = new StringBuilder();
- sb.append(getName());
- sb.append('=');
- sb.append('"');
- sb.append(getRawValue());
- sb.append('"');
-
- sb.append(' ');
-
- // Display line, column, start, and end as "17:5 160-188".
- if (skipSrcPath)
- sb.append(getOffsetsString());
- else
- sb.append(super.toString());
- return sb.toString();
- }
-
//
- // Other methods
+ // IMXMLTagAttributeData implementations
//
@Override
+ public MXMLDialect getMXMLDialect()
+ {
+ return getParent().getParent().getMXMLDialect();
+ }
+
+ @Override
public IMXMLTagData getParent()
{
return parent;
}
+
+ @Override
+ public String getName()
+ {
+ return attributeName;
+ }
- /**
- * Sets this attribute's tag.
- *
- * @param parent MXML tag containing this attribute
- */
- public void setParent(IMXMLTagData parent)
+ @Override
+ public String getPrefix()
{
- this.parent = parent;
- setSourcePath(parent.getSourcePath());
+ String name = getName();
+ int i = name.indexOf(':');
+ return i != -1 ? name.substring(0, i) : null;
}
- /**
- * Adjust all associated offsets by the adjustment amount
- *
- * @param offsetAdjustment amount to add to offsets
- */
- public void adjustOffsets(int offsetAdjustment)
+ @Override
+ public String getURI()
{
- if (attributeName != null)
+ if (uri == null)
{
- setStart(getAbsoluteStart() + offsetAdjustment);
- setEnd(getAbsoluteEnd() + offsetAdjustment);
+ //walk up our chain to find the correct uri for our namespace. first one wins
+ String prefix = getPrefix();
+ if (prefix == null)
+ return null;
+
+ IMXMLTagData lookingAt = parent;
+
+ // For attributes with prefix, parent's parent can be null if
+ // parent is the root tag
+ while (lookingAt != null && lookingAt.getParent() != null)
+ {
+ PrefixMap depth = lookingAt.getParent().getPrefixMapForData(lookingAt);
+ if (depth != null && depth.containsPrefix(prefix))
+ {
+ uri = depth.getNamespaceForPrefix(prefix);
+ break;
+ }
+
+ lookingAt = lookingAt.getParentTag();
+ }
}
- if (hasValue())
- valueStart += offsetAdjustment;
+ return uri;
+ }
- if (stateName != null)
- stateStart += offsetAdjustment;
+ @Override
+ public String getShortName()
+ {
+ String name = getName();
+ int i = name.indexOf(':');
+ return i != -1 ? name.substring(i + 1) : name;
}
@Override
- public String getName()
+ public XMLName getXMLName()
{
- return attributeName;
+ return new XMLName(getURI(), getShortName());
}
@Override
@@ -243,14 +241,12 @@ public class MXMLTagAttributeData extends SourceLocation implements
return stateName != null ? stateName : "";
}
- /**
- * Checks whether this attribute is associated with a state.
- *
- * @return True if a state association exists.
- */
- public boolean hasState()
+ @Override
+ public boolean isSpecialAttribute(String name)
{
- return stateName != null;
+ String languageURI = getMXMLDialect().getLanguageNamespace();
+
+ return getName().equals(name) && (getPrefix() == null || getURI() == languageURI);
}
@Override
@@ -259,16 +255,6 @@ public class MXMLTagAttributeData extends SourceLocation implements
return getRawValue() != null;
}
- /**
- * Get the attribute value as a String (with quotes)
- *
- * @return attribute value (with quotes)
- */
- public String getValueWithQuotes()
- {
- return valueIncludingDelimiters;
- }
-
@Override
public String getRawValue()
{
@@ -297,46 +283,6 @@ public class MXMLTagAttributeData extends SourceLocation implements
return EntityProcessor.parse(value, location, mxmlDialect, problems);
}
- public IFileSpecification getSource()
- {
- return getParent().getSource();
- }
-
- /**
- * Get this unit's line number.
- *
- * @return end offset
- */
- public final int getNameLine()
- {
- return getLine();
- }
-
- /**
- * Get this unit's column number.
- *
- * @return end offset
- */
- public final int getNameColumn()
- {
- return getColumn();
- }
-
- public int getNameStart()
- {
- return getAbsoluteStart();
- }
-
- /**
- * Get this attribute's name's end offset
- *
- * @return name end offset
- */
- public int getNameEnd()
- {
- return getAbsoluteStart() + attributeName.length();
- }
-
@Override
public int getValueStart()
{
@@ -372,46 +318,44 @@ public class MXMLTagAttributeData extends SourceLocation implements
return new SourceLocation(getSourcePath(), getValueStart(), getValueEnd(), getValueLine(), getValueColumn());
}
- /**
- * Get this attribute's state start offset if a state token is present other
- * wise zero.
- *
- * @return state start offset or zero
- */
- public int getStateStart()
+ //
+ // Other methods
+ //
+
+ public IFileSpecification getSource()
{
- return stateName != null ? stateStart : 0;
+ return getParent().getSource();
}
/**
- * Get this attribute's state tokens end offset if a state token is present
- * other wise zero.
+ * Sets this attribute's tag.
*
- * @return state start offset or zero
+ * @param parent MXML tag containing this attribute
*/
- public int getStateEnd()
+ public void setParent(IMXMLTagData parent)
{
- return stateName != null ? stateStart + stateName.length() : 0;
+ this.parent = parent;
+ setSourcePath(parent.getSourcePath());
}
/**
- * Does this value have a closing quote character?
+ * Adjust all associated offsets by the adjustment amount
*
- * @return true if this value has a closing quote character
+ * @param offsetAdjustment amount to add to offsets
*/
- protected boolean valueIsWellFormed()
+ public void adjustOffsets(int offsetAdjustment)
{
- // If there is a value, it came from a string token. We know (from the
- // RawTagTokenizer) that this means it starts with a quote character. If
- // it ends with the same quote character, it's well formed.
- if (hasValue())
+ if (attributeName != null)
{
- char firstChar = valueIncludingDelimiters.charAt(0);
- char lastChar = valueIncludingDelimiters.charAt(valueIncludingDelimiters.length() - 1);
- return (firstChar == '"' || firstChar == '\'') && firstChar == lastChar;
+ setStart(getAbsoluteStart() + offsetAdjustment);
+ setEnd(getAbsoluteEnd() + offsetAdjustment);
}
- return false;
+ if (hasValue())
+ valueStart += offsetAdjustment;
+
+ if (stateName != null)
+ stateStart += offsetAdjustment;
}
/**
@@ -428,6 +372,47 @@ public class MXMLTagAttributeData extends SourceLocation implements
return parent.getCompositePrefixMap();
}
+ void invalidateURI()
+ {
+ uri = null;
+ }
+
+ /**
+ * Gets the starting offset for this attribute's name.
+ */
+ public int getNameStart()
+ {
+ return getAbsoluteStart();
+ }
+
+ /**
+ * Gets the ending offset for this attribute's name.
+ */
+ public int getNameEnd()
+ {
+ return getAbsoluteStart() + attributeName.length();
+ }
+
+ /**
+ * Gets the line number for this attribute's name.
+ *
+ * @return end offset
+ */
+ public final int getNameLine()
+ {
+ return getLine();
+ }
+
+ /**
+ * Get the column number for this attribute's name.
+ *
+ * @return end offset
+ */
+ public final int getNameColumn()
+ {
+ return getColumn();
+ }
+
/**
* Does the offset fall inside the bounds of the attribute name?
*
@@ -442,101 +427,117 @@ public class MXMLTagAttributeData extends SourceLocation implements
return false;
}
- public boolean isInsideStateName(int offset)
+ /**
+ * Checks whether this attribute is associated with a state.
+ *
+ * @return True if a state association exists.
+ */
+ public boolean hasState()
{
- if (stateName != null)
- return MXMLData.contains(getStateStart(), getStateEnd(), offset);
-
- return false;
+ return stateName != null;
}
/**
- * Does the offset fall inside the bounds of the attribute value?
+ * Get this attribute's state start offset if a state token is present other
+ * wise zero.
*
- * @param offset test offset
- * @return true if the offset falls within the attribute value
+ * @return state start offset or zero
*/
- public boolean isInsideValue(int offset)
+ public int getStateStart()
{
- if (hasValue())
- return MXMLData.contains(getValueStart() - 1, getValueEnd(), offset);
-
- return false;
+ return stateName != null ? stateStart : 0;
}
- @Override
- public String getPrefix()
+ /**
+ * Get this attribute's state tokens end offset if a state token is present
+ * other wise zero.
+ *
+ * @return state start offset or zero
+ */
+ public int getStateEnd()
{
- String name = getName();
- int i = name.indexOf(':');
- return i != -1 ? name.substring(0, i) : null;
+ return stateName != null ? stateStart + stateName.length() : 0;
}
-
- @Override
- public String getShortName()
+
+ public boolean isInsideStateName(int offset)
{
- String name = getName();
- int i = name.indexOf(':');
- return i != -1 ? name.substring(i + 1) : name;
+ if (stateName != null)
+ return MXMLData.contains(getStateStart(), getStateEnd(), offset);
+
+ return false;
}
- @Override
- public XMLName getXMLName()
+ /**
+ * Gets the attribute value as a String (with quotes).
+ *
+ * @return attribute value (with quotes)
+ */
+ public String getValueWithQuotes()
{
- return new XMLName(getURI(), getShortName());
+ return valueIncludingDelimiters;
}
- @Override
- public String getURI()
+ /**
+ * Does this value have a closing quote character?
+ *
+ * @return true if this value has a closing quote character
+ */
+ protected boolean valueIsWellFormed()
{
- if (uri == null)
+ // If there is a value, it came from a string token. We know (from the
+ // RawTagTokenizer) that this means it starts with a quote character. If
+ // it ends with the same quote character, it's well formed.
+ if (hasValue())
{
- //walk up our chain to find the correct uri for our namespace. first one wins
- String prefix = getPrefix();
- if (prefix == null)
- return null;
-
- IMXMLTagData lookingAt = parent;
-
- // For attributes with prefix, parent's parent can be null if
- // parent is the root tag
- while (lookingAt != null && lookingAt.getParent() != null)
- {
- PrefixMap depth = lookingAt.getParent().getPrefixMapForData(lookingAt);
- if (depth != null && depth.containsPrefix(prefix))
- {
- uri = depth.getNamespaceForPrefix(prefix);
- break;
- }
-
- lookingAt = lookingAt.getParentTag();
- }
+ char firstChar = valueIncludingDelimiters.charAt(0);
+ char lastChar = valueIncludingDelimiters.charAt(valueIncludingDelimiters.length() - 1);
+ return (firstChar == '"' || firstChar == '\'') && firstChar == lastChar;
}
- return uri;
+ return false;
}
- void invalidateURI()
+ /**
+ * Does the offset fall inside the bounds of the attribute value?
+ *
+ * @param offset test offset
+ * @return true if the offset falls within the attribute value
+ */
+ public boolean isInsideValue(int offset)
{
- uri = null;
- }
+ if (hasValue())
+ return MXMLData.contains(getValueStart() - 1, getValueEnd(), offset);
- @Override
- public MXMLDialect getMXMLDialect()
- {
- return getParent().getParent().getMXMLDialect();
+ return false;
}
-
- @Override
- public boolean isSpecialAttribute(String name)
+
+ /**
+ * For unit tests only.
+ *
+ * @return name value and offsets in string form
+ */
+ public String buildAttributeString(boolean skipSrcPath)
{
- String languageURI = getMXMLDialect().getLanguageNamespace();
+ StringBuilder sb = new StringBuilder();
+ sb.append(getName());
+ sb.append('=');
+ sb.append('"');
+ sb.append(getRawValue());
+ sb.append('"');
- return getName().equals(name) && (getPrefix() == null || getURI() == languageURI);
+ sb.append(' ');
+
+ // Display line, column, start, and end as "17:5 160-188".
+ if (skipSrcPath)
+ sb.append(getOffsetsString());
+ else
+ sb.append(super.toString());
+
+ return sb.toString();
}
/**
- * Verifies that this attrobite has its source location information set.
+ * Verifies that this attribute has its source location information set.
* <p>
* This is used only in asserts.
*/