]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.runtime/generation/org/simantics/scl/runtime/generation/GenerateFunctions.java
(refs #7090) Generated Function objects implement equals and hashCode
[simantics/platform.git] / bundles / org.simantics.scl.runtime / generation / org / simantics / scl / runtime / generation / GenerateFunctions.java
index adf2dee305c3693064d1d2a5893888d589ab8087..2e61986e855103a48022305b764aed0b794a8b34 100644 (file)
@@ -11,9 +11,9 @@ public class GenerateFunctions {
     public static final int MAX_ARITY = 8;
     
     public static final String HEADER =
-            "/**\n"
-          + " * This code is generated in " + GenerateFunctions.class.getName() + ".\n"
-          + " * Do not edit manually!\n"
+            "/**\r\n"
+          + " * This code is generated in " + GenerateFunctions.class.getName() + ".\r\n"
+          + " * Do not edit manually!\r\n"
           + " */" 
             ;
     
@@ -342,6 +342,7 @@ public class GenerateFunctions {
             p.println("            nps[i + " + n + "] = ps[i];");
             p.println("        return f.applyArray(nps);");
             p.println("    }");
+            p.println();
         }
         {
             p.println("    @Override");
@@ -353,6 +354,40 @@ public class GenerateFunctions {
             p.println("        sb.append(\")\");");
             p.println("        return sb.toString();");
             p.println("    }");
+            p.println();
+        }
+        {
+            p.println("    @Override");
+            p.println("    public int hashCode() {");
+            p.println("        int result = f.hashCode();");
+            for(int i=0;i<n;++i)
+                p.println("        result = 31 * result + (p"+i+" == null ? 0 : p"+i+".hashCode());");
+            p.println("        return result;");
+            p.println("    }");
+            p.println();
+        }
+        {
+            p.println("    @Override");
+            p.println("    public boolean equals(Object obj) {");
+            p.println("        if (this == obj)");
+            p.println("            return true;");
+            p.println("        if (obj == null)");
+            p.println("            return false;");
+            p.println("        if (getClass() != obj.getClass())");
+            p.println("            return false;");
+            p.println("        UnsaturatedFunction"+n+" other = (UnsaturatedFunction"+n+") obj;");
+            p.println("        if(!f.equals(other.f))");
+            p.println("            return false;");
+            for(int i=0;i<n;++i) {
+                p.println("        if(p"+i+" == null) {");
+                p.println("            if (other.p"+i+" != null)");
+                p.println("                return false;");
+                p.println("        } else if (!p"+i+".equals(other.p"+i+"))");
+                p.println("            return false;");
+            }
+            p.println("        return true;");
+            p.println("    }");
+            p.println();
         }
         p.println("}");
     }
@@ -361,6 +396,8 @@ public class GenerateFunctions {
         p.println(HEADER);
         p.println("package " + PACKAGE + ";");
         p.println();
+        p.println("import java.util.Arrays;");
+        p.println();
         p.println("@SuppressWarnings(\"all\")");
         p.println("public class UnsaturatedFunctionN implements Function {");
         p.println("    private final Function f;");
@@ -396,6 +433,7 @@ public class GenerateFunctions {
             p.println("        System.arraycopy(ops, 0, nps, ps.length, ops.length);");
             p.println("        return f.applyArray(nps);");
             p.println("    }");
+            p.println();
         }
         {
             p.println("    @Override");
@@ -407,6 +445,28 @@ public class GenerateFunctions {
             p.println("        sb.append(\")\");");
             p.println("        return sb.toString();");
             p.println("    }");
+            p.println();
+        }
+        {
+            p.println("    @Override");
+            p.println("    public int hashCode() {");
+            p.println("        return f.hashCode() + 31 * Arrays.hashCode(ps);");
+            p.println("    }");
+            p.println();
+        }
+        {
+            p.println("    @Override");
+            p.println("    public boolean equals(Object obj) {");
+            p.println("        if (this == obj)");
+            p.println("            return true;");
+            p.println("        if (obj == null)");
+            p.println("            return false;");
+            p.println("        if (getClass() != obj.getClass())");
+            p.println("            return false;");
+            p.println("        UnsaturatedFunctionN other = (UnsaturatedFunctionN) obj;");
+            p.println("        return f.equals(other.f) && Arrays.equals(ps, other.ps);");
+            p.println("    }");
+            p.println();
         }
         p.println("}");
     }