]> gerrit.simantics Code Review - simantics/platform.git/blob - 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
1 package org.simantics.databoard.annotations;\r
2 \r
3 import java.lang.annotation.Annotation;\r
4 import java.lang.reflect.Array;\r
5 import java.util.Arrays;\r
6 \r
7 public class ArgumentImpl implements Arguments {\r
8 \r
9         int hash;\r
10         Class<?>[] args;\r
11         \r
12         public ArgumentImpl(Class<?>...args) {\r
13         hash = Arrays.hashCode(args);\r
14                 this.args = args;\r
15         }\r
16 \r
17         \r
18         /**\r
19          * Drop first arguments from an argument list. \r
20          * If all were dropped, null is returned.\r
21          *\r
22          * @param src source argument or null\r
23          * @param count argument count\r
24          * @return Argument or null.\r
25          */\r
26         public static Arguments dropArguments(Arguments src, int count) {\r
27                 if (src==null) return null;\r
28                 int newLen = src.value().length - count;\r
29                 if (newLen<=0) return null;\r
30                 Class<?>[] newList = (Class<?>[]) Array.newInstance(Class.class, newLen);\r
31                 System.arraycopy(src.value(), count, newList, 0, newLen);\r
32                 return new ArgumentImpl(newList);\r
33         }       \r
34         \r
35         @Override\r
36         public Class<? extends Annotation> annotationType() {\r
37                 return Arguments.class;\r
38         }\r
39 \r
40         @Override\r
41         public Class<?>[] value() {\r
42                 return args;\r
43         }\r
44         \r
45         @Override\r
46         public int hashCode() {         \r
47                 return hash;\r
48         }\r
49         \r
50         @Override\r
51         public boolean equals(Object obj) {\r
52                 if ( obj instanceof Arguments == false ) return false;\r
53                 Arguments other = (Arguments) obj;\r
54                 Class<?>[] classArray1 = args;\r
55                 Class<?>[] classArray2 = other.value();\r
56                 \r
57                 return Arrays.deepEquals(classArray1, classArray2);\r
58         }\r
59 \r
60 }\r