You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2016/10/21 15:17:20 UTC

[42/44] git commit: [flex-falcon] [refs/heads/feature-autobuild/maven-archetypes] - FieldEmitter: improved source map output for fields

FieldEmitter: improved source map output for fields


Project: http://git-wip-us.apache.org/repos/asf/flex-falcon/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-falcon/commit/45433083
Tree: http://git-wip-us.apache.org/repos/asf/flex-falcon/tree/45433083
Diff: http://git-wip-us.apache.org/repos/asf/flex-falcon/diff/45433083

Branch: refs/heads/feature-autobuild/maven-archetypes
Commit: 454330835b2748e167bb2e8a9714a0a546486b16
Parents: 1753f4e
Author: Josh Tynjala <jo...@gmail.com>
Authored: Mon Oct 17 15:20:25 2016 -0700
Committer: Josh Tynjala <jo...@gmail.com>
Committed: Mon Oct 17 15:20:25 2016 -0700

----------------------------------------------------------------------
 .../internal/codegen/js/jx/FieldEmitter.java    |   9 +-
 .../sourcemaps/TestSourceMapFieldMembers.java   | 205 +++++++++++++++++++
 2 files changed, 213 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/45433083/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
index c330c56..1b0d579 100644
--- a/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
+++ b/compiler-jx/src/main/java/org/apache/flex/compiler/internal/codegen/js/jx/FieldEmitter.java
@@ -113,11 +113,18 @@ public class FieldEmitter extends JSSubEmitter implements
         			(!ndef.isStatic() && EmitterUtils.isScalar(vnode)) ||
         			isPackageOrFileMember)
 	        {
-	            startMapping(node);
+                IExpressionNode beforeNode = node.getVariableTypeNode();
+                if (beforeNode.getAbsoluteStart() == -1)
+                {
+                    beforeNode = node.getNameExpressionNode();
+                }
+	            startMapping(node, beforeNode);
 	            write(ASEmitterTokens.SPACE);
 	            writeToken(ASEmitterTokens.EQUAL);
 	            endMapping(node);
+                startMapping(vnode);
 	            write(vnodeString);
+                endMapping(vnode);
 	        }
 	        else if (ndef.isStatic() && EmitterUtils.needsStaticInitializer(vnodeString, className))
 	        {

http://git-wip-us.apache.org/repos/asf/flex-falcon/blob/45433083/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapFieldMembers.java
----------------------------------------------------------------------
diff --git a/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapFieldMembers.java b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapFieldMembers.java
new file mode 100644
index 0000000..55bbb46
--- /dev/null
+++ b/compiler-jx/src/test/java/org/apache/flex/compiler/internal/codegen/js/sourcemaps/TestSourceMapFieldMembers.java
@@ -0,0 +1,205 @@
+/*
+ *
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+package org.apache.flex.compiler.internal.codegen.js.sourcemaps;
+
+import org.apache.flex.compiler.driver.IBackend;
+import org.apache.flex.compiler.internal.driver.js.flexjs.FlexJSBackend;
+import org.apache.flex.compiler.internal.test.SourceMapTestBase;
+import org.apache.flex.compiler.tree.as.IVariableNode;
+
+import org.junit.Test;
+
+public class TestSourceMapFieldMembers extends SourceMapTestBase
+{
+    @Test
+    public void testField()
+    {
+        IVariableNode node = getField("var foo;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @type {*}\n */\nFalconTest_A.prototype.foo
+        assertMapping(node, 0, 4, 4, 0, 4, 26);  // foo
+    }
+
+    @Test
+    public void testField_withStringSetToNull()
+    {
+        IVariableNode node = getField("var foo:String = null;");
+        asBlockWalker.visitVariable(node);
+        //**\n * @export\n * @type {string}\n */\nFalconTest_A.prototype.foo = null
+        assertMapping(node, 0, 4, 4, 0, 4, 26);  // foo
+        assertMapping(node, 0, 14, 4, 26, 4, 29);  // =
+        assertMapping(node, 0, 17, 4, 29, 4, 33);  // null
+    }
+
+    @Test
+    public void testField_withType()
+    {
+        IVariableNode node = getField("var foo:int;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @type {number}\n */\nFalconTest_A.prototype.foo = 0
+        assertMapping(node, 0, 4, 4, 0, 4, 26);  // foo
+    }
+
+    @Test
+    public void testField_withValue()
+    {
+        IVariableNode node = getField("var foo = 420;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @type {*}\n */\nFalconTest_A.prototype.foo = 420
+        assertMapping(node, 0, 4, 4, 0, 4, 26);  // foo
+        assertMapping(node, 0, 7, 4, 26, 4, 29);  // =
+        assertMapping(node, 0, 10, 4, 29, 4, 32);  // 420
+    }
+
+    @Test
+    public void testField_withTypeValue()
+    {
+        IVariableNode node = getField("var foo:int = 420;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @type {number}\n */\nFalconTest_A.prototype.foo = 420
+        assertMapping(node, 0, 4, 4, 0, 4, 26);  // foo
+        assertMapping(node, 0, 11, 4, 26, 4, 29);  // =
+        assertMapping(node, 0, 14, 4, 29, 4, 32);  // 420
+    }
+
+    @Test
+    public void testStaticField()
+    {
+        IVariableNode node = getField("static var foo;");
+        asBlockWalker.visitVariable(node);
+        ////**\n * @export\n * @type {*}\n */\nFalconTest_A.foo
+        assertMapping(node, 0, 11, 4, 0, 4, 16);  // foo
+    }
+
+    @Test
+    public void testStaticField_withType()
+    {
+        IVariableNode node = getField("static var foo:int;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @type {number}\n */\nFalconTest_A.foo = 0
+        assertMapping(node, 0, 11, 4, 0, 4, 16);  // foo
+    }
+
+    @Test
+    public void testStaticField_withValue()
+    {
+        IVariableNode node = getField("static var foo = 420;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @type {*}\n */\nFalconTest_A.foo = 420
+        assertMapping(node, 0, 11, 4, 0, 4, 16);   // foo
+        assertMapping(node, 0, 14, 4, 16, 4, 19);  // =
+        assertMapping(node, 0, 17, 4, 19, 4, 22);  // 420
+    }
+
+    @Test
+    public void testStaticField_withTypeValue()
+    {
+        IVariableNode node = getField("static var foo:int = 420;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @type {number}\n */\nFalconTest_A.foo = 420
+        assertMapping(node, 0, 11, 4, 0, 4, 16);  // foo
+        assertMapping(node, 0, 18, 4, 16, 4, 19);  // =
+        assertMapping(node, 0, 21, 4, 19, 4, 22);  // 420
+    }
+
+    @Test
+    public void testConstant()
+    {
+        IVariableNode node = getField("const foo;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @const\n * @type {*}\n */\nFalconTest_A.prototype.foo
+        assertMapping(node, 0, 6, 5, 0, 5, 26);  // foo
+    }
+
+    @Test
+    public void testConstant_withType()
+    {
+        IVariableNode node = getField("const foo:int;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @const\n * @type {number}\n */\nFalconTest_A.prototype.foo = 0
+        assertMapping(node, 0, 6, 5, 0, 5, 26);  // foo
+    }
+
+    @Test
+    public void testConstant_withValue()
+    {
+        IVariableNode node = getField("const foo = 420;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @const\n * @type {*}\n */\nFalconTest_A.prototype.foo = 420
+        assertMapping(node, 0, 6, 5, 0, 5, 26);  // foo
+        assertMapping(node, 0, 9, 5, 26, 5, 29);  // =
+        assertMapping(node, 0, 12, 5, 29, 5, 32);  // 420
+    }
+
+    @Test
+    public void testConstant_withTypeValue()
+    {
+        IVariableNode node = getField("const foo:int = 420;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @const\n * @type {number}\n */\nFalconTest_A.prototype.foo = 420
+        assertMapping(node, 0, 6, 5, 0, 5, 26);  // foo
+        assertMapping(node, 0, 13, 5, 26, 5, 29);  // =
+        assertMapping(node, 0, 16, 5, 29, 5, 32);  // 420
+    }
+
+    @Test
+    public void testStaticConstant()
+    {
+        IVariableNode node = getField("static const foo;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @const\n * @type {*}\n */\nFalconTest_A.foo
+        assertMapping(node, 0, 13, 5, 0, 5, 16);  // foo
+    }
+
+    @Test
+    public void testStaticConstant_withType()
+    {
+        IVariableNode node = getField("static const foo:int;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @const\n * @type {number}\n */\nFalconTest_A.foo = 0
+        assertMapping(node, 0, 13, 5, 0, 5, 16);  // foo
+    }
+
+    @Test
+    public void testStaticConstant_withValue()
+    {
+        IVariableNode node = getField("static const foo = 420;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @const\n * @type {*}\n */\nFalconTest_A.foo = 420
+        assertMapping(node, 0, 13, 5, 0, 5, 16);  // foo
+        assertMapping(node, 0, 16, 5, 16, 5, 19);  // =
+        assertMapping(node, 0, 19, 5, 19, 5, 22);  // 420
+    }
+
+    @Test
+    public void testStaticConstant_withTypeValue()
+    {
+        IVariableNode node = getField("static const foo:int = 420;");
+        asBlockWalker.visitVariable(node);
+        ///**\n * @export\n * @const\n * @type {number}\n */\nFalconTest_A.foo = 420
+        assertMapping(node, 0, 13, 5, 0, 5, 16);  // foo
+        assertMapping(node, 0, 20, 5, 16, 5, 19);  // =
+        assertMapping(node, 0, 23, 5, 19, 5, 22);  // 420
+    }
+
+    protected IBackend createBackend()
+    {
+        return new FlexJSBackend();
+    }
+}