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;