--- /dev/null
+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