Merge branch 'develop' of https://github.com/LenraOfficial/royale-compiler into develop
diff --git a/compiler/src/main/antlr/org/apache/royale/compiler/internal/parsing/as/ImportMetadataTokenTypes.txt b/compiler/src/main/antlr/org/apache/royale/compiler/internal/parsing/as/ImportMetadataTokenTypes.txt
index 478e80d..bf99d0d 100644
--- a/compiler/src/main/antlr/org/apache/royale/compiler/internal/parsing/as/ImportMetadataTokenTypes.txt
+++ b/compiler/src/main/antlr/org/apache/royale/compiler/internal/parsing/as/ImportMetadataTokenTypes.txt
@@ -65,4 +65,5 @@
TOKEN_SKIN_STATES_KEYWORD=54
TOKEN_ASDOC_COMMENT = 55
TOKEN_HOST_COMPONENT_KEYWORD = 56
-TOKEN_RESOURCEBUNDLE_KEYWORD = 59
\ No newline at end of file
+TOKEN_RESOURCEBUNDLE_KEYWORD = 59
+TOKEN_ATTR_OPERATOR_NS_QUALIFIER = 62
\ No newline at end of file
diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/BaseASParser.java b/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/BaseASParser.java
index de180fb..7e02f6a 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/BaseASParser.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/BaseASParser.java
@@ -1256,6 +1256,33 @@
metadataTokens = tokenizer.parseTokens();
}
+ // manage namespace variables
+ int i = 2;// skip the metadata type
+ while (i<metadataTokens.size()-1) {
+ MetadataToken t = metadataTokens.get(i);
+ if (t.getType()==MetadataTokenTypes.TOKEN_ATTR_OPERATOR_NS_QUALIFIER) {
+ // get the previous and next tokens to check there types and transform them as the left and right parts of the operator
+ MetadataToken prev = metadataTokens.get(i - 1);
+ MetadataToken next = metadataTokens.get(i + 1);
+ if (prev.getType()==MetadataTokenTypes.TOKEN_ATTR_UNKNOWN && next.getType()==MetadataTokenTypes.TOKEN_ATTR_UNKNOWN) {
+ // trasform to literal node if possible
+ NamespaceIdentifierNode nsNode = new NamespaceIdentifierNode(prev.getText());
+ nsNode.setIsConfigNamespace(true);
+ ASToken op = new ASToken(TOKEN_OPERATOR_NS_QUALIFIER, t.getStart(), t.getEnd(), t.getLine(), t.getColumn(), t.getText());
+ IdentifierNode idNode = new IdentifierNode(next.getText());
+ IASNode n = transformToNSAccessExpression(nsNode, (ASToken) op, idNode);
+ if (n instanceof LiteralNode) {
+ // replace the left, operator and right tokens by the result string token
+ t = new MetadataToken(MetadataTokenTypes.TOKEN_STRING, prev.getSourcePath(), prev.getStart(), next.getEnd(), prev.getLine(), prev.getColumn(), ((LiteralNode)n).getValue());
+ metadataTokens.remove(i+1);
+ metadataTokens.remove(i--);
+ metadataTokens.set(i, t);
+ }
+ }
+ }
+ ++i;
+ }
+
// Initialize metadata parser.
final GenericTokenStream metadataTokenStream = new GenericTokenStream(metadataTokens);
final MetadataParser metadataParser = new MetadataParser(metadataTokenStream);
diff --git a/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/MetadataTokenizer.java b/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/MetadataTokenizer.java
index 56d82b9..663279f 100644
--- a/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/MetadataTokenizer.java
+++ b/compiler/src/main/java/org/apache/royale/compiler/internal/parsing/as/MetadataTokenizer.java
@@ -292,6 +292,15 @@
{
return null;
}
+ case ASTokenTypes.TOKEN_OPERATOR_NS_QUALIFIER:
+ {
+ if (inAttrList)
+ {
+ return new MetadataToken(MetadataTokenTypes.TOKEN_ATTR_OPERATOR_NS_QUALIFIER,
+ sourcePath, startOffset, endOffset,
+ line, column, tokenString);
+ }
+ }
}
return null;