29
29
import java .lang .reflect .Method ;
30
30
31
31
import com .oracle .svm .core .annotate .Alias ;
32
+ import com .oracle .svm .core .annotate .Inject ;
32
33
import com .oracle .svm .core .annotate .RecomputeFieldValue ;
34
+ import com .oracle .svm .core .annotate .RecomputeFieldValue .CustomFieldValueComputer ;
33
35
import com .oracle .svm .core .annotate .RecomputeFieldValue .Kind ;
34
36
import com .oracle .svm .core .annotate .Substitute ;
35
37
import com .oracle .svm .core .annotate .TargetClass ;
36
38
import com .oracle .svm .core .util .VMError ;
37
39
import com .oracle .svm .reflect .hosted .AccessorComputer ;
38
40
41
+ import jdk .vm .ci .meta .MetaAccessProvider ;
42
+ import jdk .vm .ci .meta .ResolvedJavaField ;
39
43
import sun .reflect .generics .repository .MethodRepository ;
40
44
41
45
@ TargetClass (value = Method .class )
@@ -47,6 +51,9 @@ public final class Target_java_lang_reflect_Method {
47
51
@ RecomputeFieldValue (kind = Kind .Custom , declClass = AccessorComputer .class ) //
48
52
Target_jdk_internal_reflect_MethodAccessor methodAccessor ;
49
53
54
+ @ Inject @ RecomputeFieldValue (kind = Kind .Custom , declClass = DefaultValueComputer .class ) //
55
+ Object defaultValue ;
56
+
50
57
@ Alias
51
58
native Target_java_lang_reflect_Method copy ();
52
59
@@ -57,4 +64,20 @@ Target_jdk_internal_reflect_MethodAccessor acquireMethodAccessor() {
57
64
}
58
65
return methodAccessor ;
59
66
}
67
+
68
+ @ Substitute
69
+ public Object getDefaultValue () {
70
+ Target_java_lang_reflect_Method holder = ReflectionHelper .getHolder (this );
71
+ return holder .defaultValue ;
72
+ }
73
+
74
+ public static final class DefaultValueComputer implements CustomFieldValueComputer {
75
+
76
+ @ Override
77
+ public Object compute (MetaAccessProvider metaAccess , ResolvedJavaField original , ResolvedJavaField annotated , Object receiver ) {
78
+ Method method = (Method ) receiver ;
79
+ return method .getDefaultValue ();
80
+ }
81
+ }
82
+
60
83
}
0 commit comments