Repository: groovy
Updated Branches:
  refs/heads/GROOVY_2_6_X 4959cd215 -> 711620419


Refine groovydoc support


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

Branch: refs/heads/GROOVY_2_6_X
Commit: 7116204190d92bc74a06f2b5f5b36872a63c701e
Parents: 4959cd2
Author: sunlan <sun...@apache.org>
Authored: Sun Sep 10 12:25:50 2017 +0800
Committer: sunlan <sun...@apache.org>
Committed: Sun Sep 10 12:25:50 2017 +0800

----------------------------------------------------------------------
 src/main/org/codehaus/groovy/ast/ClassNode.java | 10 ++-
 src/main/org/codehaus/groovy/ast/FieldNode.java | 13 +++-
 .../org/codehaus/groovy/ast/MethodNode.java     |  9 ++-
 .../groovy/ast/groovydoc/Groovydoc.java         | 68 ++++++++++++++++++
 .../groovy/ast/groovydoc/GroovydocHolder.java   | 31 ++++++++
 .../groovy/ast/groovydoc/GroovydocTag.java      | 74 ++++++++++++++++++++
 .../groovy/parser/antlr4/GroovydocManager.java  |  9 ++-
 .../parser/antlr4/GroovyParserTest.groovy       | 56 +++++++--------
 .../antlr4/util/ASTComparatorCategory.groovy    |  2 +-
 9 files changed, 236 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/71162041/src/main/org/codehaus/groovy/ast/ClassNode.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/ClassNode.java 
b/src/main/org/codehaus/groovy/ast/ClassNode.java
index 283e86f..7e24de2 100644
--- a/src/main/org/codehaus/groovy/ast/ClassNode.java
+++ b/src/main/org/codehaus/groovy/ast/ClassNode.java
@@ -23,6 +23,8 @@ import org.codehaus.groovy.ast.expr.BinaryExpression;
 import org.codehaus.groovy.ast.expr.Expression;
 import org.codehaus.groovy.ast.expr.FieldExpression;
 import org.codehaus.groovy.ast.expr.TupleExpression;
+import org.codehaus.groovy.ast.groovydoc.Groovydoc;
+import org.codehaus.groovy.ast.groovydoc.GroovydocHolder;
 import org.codehaus.groovy.ast.stmt.BlockStatement;
 import org.codehaus.groovy.ast.stmt.ExpressionStatement;
 import org.codehaus.groovy.ast.stmt.Statement;
@@ -103,7 +105,8 @@ import java.util.Set;
  *
  * @see org.codehaus.groovy.ast.ClassHelper
  */
-public class ClassNode extends AnnotatedNode implements Opcodes {
+public class ClassNode extends AnnotatedNode implements Opcodes, 
GroovydocHolder {
+
     private static class MapOfLists {
         private Map<Object, List<MethodNode>> map;
         public List<MethodNode> get(Object key) {
@@ -1493,4 +1496,9 @@ public class ClassNode extends AnnotatedNode implements 
Opcodes {
     public String getText() {
         return getName();
     }
+
+    @Override
+    public Groovydoc getGroovydoc() {
+        return this.<Groovydoc>getNodeMetaData(DOC_COMMENT);
+    }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/71162041/src/main/org/codehaus/groovy/ast/FieldNode.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/FieldNode.java 
b/src/main/org/codehaus/groovy/ast/FieldNode.java
index c791346..987349b 100644
--- a/src/main/org/codehaus/groovy/ast/FieldNode.java
+++ b/src/main/org/codehaus/groovy/ast/FieldNode.java
@@ -18,17 +18,19 @@
  */
 package org.codehaus.groovy.ast;
 
-import java.lang.reflect.Field;
-
 import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.groovydoc.Groovydoc;
+import org.codehaus.groovy.ast.groovydoc.GroovydocHolder;
 import org.objectweb.asm.Opcodes;
 
+import java.lang.reflect.Field;
+
 /**
  * Represents a field (member variable)
  *
  * @author <a href="mailto:ja...@coredevelopers.net";>James Strachan</a>
  */
-public class FieldNode extends AnnotatedNode implements Opcodes, Variable {
+public class FieldNode extends AnnotatedNode implements Opcodes, Variable, 
GroovydocHolder {
 
     private String name;
     private int modifiers;
@@ -190,4 +192,9 @@ public class FieldNode extends AnnotatedNode implements 
Opcodes, Variable {
         declaringClass.renameField(this.name, name);
         this.name = name;
     }
+
+    @Override
+    public Groovydoc getGroovydoc() {
+        return this.<Groovydoc>getNodeMetaData(DOC_COMMENT);
+    }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/71162041/src/main/org/codehaus/groovy/ast/MethodNode.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/MethodNode.java 
b/src/main/org/codehaus/groovy/ast/MethodNode.java
index 7239a86..ea0db81 100644
--- a/src/main/org/codehaus/groovy/ast/MethodNode.java
+++ b/src/main/org/codehaus/groovy/ast/MethodNode.java
@@ -19,6 +19,8 @@
 package org.codehaus.groovy.ast;
 
 import org.apache.groovy.ast.tools.MethodNodeUtils;
+import org.codehaus.groovy.ast.groovydoc.Groovydoc;
+import org.codehaus.groovy.ast.groovydoc.GroovydocHolder;
 import org.codehaus.groovy.ast.stmt.BlockStatement;
 import org.codehaus.groovy.ast.stmt.Statement;
 import org.objectweb.asm.Opcodes;
@@ -31,7 +33,7 @@ import java.util.List;
  * @author <a href="mailto:ja...@coredevelopers.net";>James Strachan</a>
  * @author Hamlet D'Arcy
  */
-public class MethodNode extends AnnotatedNode implements Opcodes {
+public class MethodNode extends AnnotatedNode implements Opcodes, 
GroovydocHolder {
 
     public static final String SCRIPT_BODY_METHOD_KEY = 
"org.codehaus.groovy.ast.MethodNode.isScriptBody";
     private final String name;
@@ -269,4 +271,9 @@ public class MethodNode extends AnnotatedNode implements 
Opcodes {
         String parms = AstToTextHelper.getParametersText(parameters);
         return AstToTextHelper.getModifiersText(modifiers) + " " + retType + " 
" + name + "(" + parms + ") " + exceptionTypes + " { ... }";
     }
+
+    @Override
+    public Groovydoc getGroovydoc() {
+        return this.<Groovydoc>getNodeMetaData(DOC_COMMENT);
+    }
 }

http://git-wip-us.apache.org/repos/asf/groovy/blob/71162041/src/main/org/codehaus/groovy/ast/groovydoc/Groovydoc.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/groovydoc/Groovydoc.java 
b/src/main/org/codehaus/groovy/ast/groovydoc/Groovydoc.java
new file mode 100644
index 0000000..04aef38
--- /dev/null
+++ b/src/main/org/codehaus/groovy/ast/groovydoc/Groovydoc.java
@@ -0,0 +1,68 @@
+/*
+ *  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.codehaus.groovy.ast.groovydoc;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ * Represents groovydoc
+ */
+public class Groovydoc {
+    private String content;
+    private List<GroovydocTag> tagList;
+    private GroovydocHolder groovydocHolder;
+
+    public Groovydoc(String content, GroovydocHolder groovydocHolder) {
+        this.content = content;
+        this.groovydocHolder = groovydocHolder;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public List<GroovydocTag> getTagList() {
+        throw new UnsupportedOperationException("[TODO]parsing tags will be a 
new features of the next releases");
+//        return tagList;
+    }
+
+    public GroovydocHolder getGroovydocHolder() {
+        return groovydocHolder;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        Groovydoc groovydoc = (Groovydoc) o;
+        return Objects.equals(content, groovydoc.content) &&
+                Objects.equals(groovydocHolder, groovydoc.groovydocHolder);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(content, groovydocHolder);
+    }
+
+    @Override
+    public String toString() {
+        return this.content;
+    }
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/71162041/src/main/org/codehaus/groovy/ast/groovydoc/GroovydocHolder.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/groovydoc/GroovydocHolder.java 
b/src/main/org/codehaus/groovy/ast/groovydoc/GroovydocHolder.java
new file mode 100644
index 0000000..e5585fe
--- /dev/null
+++ b/src/main/org/codehaus/groovy/ast/groovydoc/GroovydocHolder.java
@@ -0,0 +1,31 @@
+/*
+ *  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.codehaus.groovy.ast.groovydoc;
+
+/**
+ * Represents Groovydoc Holder
+ */
+public interface GroovydocHolder {
+    String DOC_COMMENT = "_DOC_COMMENT"; // keys for meta data
+    /**
+     * Get the groovydoc
+     * @return the groovydoc
+     */
+    Groovydoc getGroovydoc();
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/71162041/src/main/org/codehaus/groovy/ast/groovydoc/GroovydocTag.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/ast/groovydoc/GroovydocTag.java 
b/src/main/org/codehaus/groovy/ast/groovydoc/GroovydocTag.java
new file mode 100644
index 0000000..54b2e2e
--- /dev/null
+++ b/src/main/org/codehaus/groovy/ast/groovydoc/GroovydocTag.java
@@ -0,0 +1,74 @@
+/*
+ *  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.codehaus.groovy.ast.groovydoc;
+
+import java.util.Objects;
+
+/**
+ * TODO parse groovydoc to get tag content
+ */
+public class GroovydocTag {
+    private String name;
+    private String content;
+    private Groovydoc groovydoc;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Groovydoc getGroovydoc() {
+        return groovydoc;
+    }
+
+    public void setGroovydoc(Groovydoc groovydoc) {
+        this.groovydoc = groovydoc;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        GroovydocTag that = (GroovydocTag) o;
+        return Objects.equals(name, that.name) &&
+                Objects.equals(content, that.content) &&
+                Objects.equals(groovydoc, that.groovydoc);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(name, content, groovydoc);
+    }
+
+    @Override
+    public String toString() {
+        return content;
+    }
+}

http://git-wip-us.apache.org/repos/asf/groovy/blob/71162041/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
----------------------------------------------------------------------
diff --git 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
index a9e5e90..b3b58f2 100644
--- 
a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
+++ 
b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/GroovydocManager.java
@@ -28,6 +28,7 @@ import org.codehaus.groovy.ast.AnnotatedNode;
 import org.codehaus.groovy.ast.AnnotationNode;
 import org.codehaus.groovy.ast.ClassHelper;
 import org.codehaus.groovy.ast.expr.ConstantExpression;
+import org.codehaus.groovy.ast.groovydoc.GroovydocHolder;
 
 import java.util.List;
 
@@ -40,7 +41,7 @@ import static 
org.codehaus.groovy.runtime.DefaultGroovyMethods.asBoolean;
  * 3) attach groovydoc to AST node as metadata
  */
 public class GroovydocManager {
-    public static final String DOC_COMMENT = "_DOC_COMMENT"; // keys for meta 
data
+    public static final String DOC_COMMENT = GroovydocHolder.DOC_COMMENT; // 
keys for meta data
     private static final String DOC_COMMENT_PREFIX = "/**";
     private static final String TRUE_STR = "true";
 
@@ -104,7 +105,11 @@ public class GroovydocManager {
             return;
         }
 
-        node.putNodeMetaData(DOC_COMMENT, docCommentNodeText);
+        if (!(node instanceof GroovydocHolder)) {
+            return;
+        }
+
+        node.putNodeMetaData(DOC_COMMENT, new 
org.codehaus.groovy.ast.groovydoc.Groovydoc(docCommentNodeText, 
(GroovydocHolder) node));
     }
 
     /*

http://git-wip-us.apache.org/repos/asf/groovy/blob/71162041/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
----------------------------------------------------------------------
diff --git 
a/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
 
b/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
index 8a36491..4ff6ad3 100644
--- 
a/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
+++ 
b/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/GroovyParserTest.groovy
@@ -52,34 +52,34 @@ class GroovyParserTest extends GroovyTestCase {
         List<ClassNode> classes = new ArrayList<>(newAST.classes).sort { c1, 
c2 -> c1.name <=> c2.name };
         List<MethodNode> methods = new ArrayList<>(newAST.methods).sort { m1, 
m2 -> m1.name <=> m2.name };
 
-        assert 
classes[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '')   
         == '/** * test class Comments */'
-        assert 
classes[0].fields[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '')  == '/**     * test Comments.SOME_VAR     */'
-        assert 
classes[0].fields[1].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '')  == '/**     * test Comments.SOME_VAR2     */'
-        assert classes[0].fields[2].nodeMetaData[GroovydocManager.DOC_COMMENT] 
== null
-        assert classes[0].fields[3].nodeMetaData[GroovydocManager.DOC_COMMENT] 
== null
-        assert 
classes[0].declaredConstructors[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '') == '/**     * test Comments.constructor1     */'
-        assert 
classes[0].methods[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '') == '/**     * test Comments.m1     */'
-        assert 
classes[0].methods[1].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
-        assert 
classes[0].methods[2].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '') == '/**     * test Comments.m3     */'
-
-        assert 
classes[1].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '')   
         == '/**     * test class InnerClazz     */'
-        assert 
classes[1].fields[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '')  == '/**         * test InnerClazz.SOME_VAR3         */'
-        assert 
classes[1].fields[1].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '')  == '/**         * test InnerClazz.SOME_VAR4         */'
-        assert 
classes[1].methods[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '') == '/**         * test Comments.m4         */'
-        assert 
classes[1].methods[1].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '') == '/**         * test Comments.m5         */'
-
-        assert 
classes[2].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '')   
         == '/**     * test class InnerEnum     */'
-        assert 
classes[2].fields[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '')  == '/**         * InnerEnum.NEW         */'
-        assert 
classes[2].fields[1].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/,
 '')  == '/**         * InnerEnum.OLD         */'
-
-        assert classes[3].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
-
-        assert classes[4].fields[0].nodeMetaData[GroovydocManager.DOC_COMMENT] 
== null
-
-        assert classes[5].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
-
-        assert 
methods[0].nodeMetaData[GroovydocManager.DOC_COMMENT].replaceAll(/\r?\n/, '') 
== '/** * test someScriptMethod1 */'
-        assert methods[1].nodeMetaData[GroovydocManager.DOC_COMMENT] == null
+        assert classes[0].groovydoc.content.replaceAll(/\r?\n/, '')            
== '/** * test class Comments */'
+        assert classes[0].fields[0].groovydoc.content.replaceAll(/\r?\n/, '')  
== '/**     * test Comments.SOME_VAR     */'
+        assert classes[0].fields[1].groovydoc.content.replaceAll(/\r?\n/, '')  
== '/**     * test Comments.SOME_VAR2     */'
+        assert classes[0].fields[2].groovydoc == null
+        assert classes[0].fields[3].groovydoc == null
+        assert 
classes[0].declaredConstructors[0].groovydoc.content.replaceAll(/\r?\n/, '') == 
'/**     * test Comments.constructor1     */'
+        assert classes[0].methods[0].groovydoc.content.replaceAll(/\r?\n/, '') 
== '/**     * test Comments.m1     */'
+        assert classes[0].methods[1].groovydoc == null
+        assert classes[0].methods[2].groovydoc.content.replaceAll(/\r?\n/, '') 
== '/**     * test Comments.m3     */'
+
+        assert classes[1].groovydoc.content.replaceAll(/\r?\n/, '')            
== '/**     * test class InnerClazz     */'
+        assert classes[1].fields[0].groovydoc.content.replaceAll(/\r?\n/, '')  
== '/**         * test InnerClazz.SOME_VAR3         */'
+        assert classes[1].fields[1].groovydoc.content.replaceAll(/\r?\n/, '')  
== '/**         * test InnerClazz.SOME_VAR4         */'
+        assert classes[1].methods[0].groovydoc.content.replaceAll(/\r?\n/, '') 
== '/**         * test Comments.m4         */'
+        assert classes[1].methods[1].groovydoc.content.replaceAll(/\r?\n/, '') 
== '/**         * test Comments.m5         */'
+
+        assert classes[2].groovydoc.content.replaceAll(/\r?\n/, '')            
== '/**     * test class InnerEnum     */'
+        assert classes[2].fields[0].groovydoc.content.replaceAll(/\r?\n/, '')  
== '/**         * InnerEnum.NEW         */'
+        assert classes[2].fields[1].groovydoc.content.replaceAll(/\r?\n/, '')  
== '/**         * InnerEnum.OLD         */'
+
+        assert classes[3].groovydoc == null
+
+        assert classes[4].fields[0].groovydoc == null
+
+        assert classes[5].groovydoc == null
+
+        assert methods[0].groovydoc.content.replaceAll(/\r?\n/, '') == '/** * 
test someScriptMethod1 */'
+        assert methods[1].groovydoc == null
     }
 
     void "test groovy core - PackageDeclaration"() {

http://git-wip-us.apache.org/repos/asf/groovy/blob/71162041/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/util/ASTComparatorCategory.groovy
----------------------------------------------------------------------
diff --git 
a/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/util/ASTComparatorCategory.groovy
 
b/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/util/ASTComparatorCategory.groovy
index 47b9507..19123f9 100644
--- 
a/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/util/ASTComparatorCategory.groovy
+++ 
b/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/util/ASTComparatorCategory.groovy
@@ -190,7 +190,7 @@ class ASTComparatorCategory {
             }
 
 
-            !(name in ignore) && (name != 'nodeMetaData' && name != 
'metaDataMap') && a."$name" != b."$name"
+            !(name in ignore) && (name != 'nodeMetaData' && name != 
'metaDataMap' && name != 'groovydoc') && a."$name" != b."$name"
         }
 
         if (difference)

Reply via email to