]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.databoard/src/org/simantics/databoard/annotations/ArgumentImpl.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.databoard / src / org / simantics / databoard / annotations / ArgumentImpl.java
diff --git a/bundles/org.simantics.databoard/src/org/simantics/databoard/annotations/ArgumentImpl.java b/bundles/org.simantics.databoard/src/org/simantics/databoard/annotations/ArgumentImpl.java
new file mode 100644 (file)
index 0000000..30d1d08
--- /dev/null
@@ -0,0 +1,60 @@
+package org.simantics.databoard.annotations;\r
+\r
+import java.lang.annotation.Annotation;\r
+import java.lang.reflect.Array;\r
+import java.util.Arrays;\r
+\r
+public class ArgumentImpl implements Arguments {\r
+\r
+       int hash;\r
+       Class<?>[] args;\r
+       \r
+       public ArgumentImpl(Class<?>...args) {\r
+        hash = Arrays.hashCode(args);\r
+               this.args = args;\r
+       }\r
+\r
+       \r
+       /**\r
+        * Drop first arguments from an argument list. \r
+        * If all were dropped, null is returned.\r
+        *\r
+        * @param src source argument or null\r
+        * @param count argument count\r
+        * @return Argument or null.\r
+        */\r
+       public static Arguments dropArguments(Arguments src, int count) {\r
+               if (src==null) return null;\r
+               int newLen = src.value().length - count;\r
+               if (newLen<=0) return null;\r
+               Class<?>[] newList = (Class<?>[]) Array.newInstance(Class.class, newLen);\r
+               System.arraycopy(src.value(), count, newList, 0, newLen);\r
+               return new ArgumentImpl(newList);\r
+       }       \r
+       \r
+       @Override\r
+       public Class<? extends Annotation> annotationType() {\r
+               return Arguments.class;\r
+       }\r
+\r
+       @Override\r
+       public Class<?>[] value() {\r
+               return args;\r
+       }\r
+       \r
+       @Override\r
+       public int hashCode() {         \r
+               return hash;\r
+       }\r
+       \r
+       @Override\r
+       public boolean equals(Object obj) {\r
+               if ( obj instanceof Arguments == false ) return false;\r
+               Arguments other = (Arguments) obj;\r
+               Class<?>[] classArray1 = args;\r
+               Class<?>[] classArray2 = other.value();\r
+               \r
+               return Arrays.deepEquals(classArray1, classArray2);\r
+       }\r
+\r
+}\r