@@ -62,62 +62,67 @@ public static enum Type {
62
62
63
63
public JsValue (Value v ) {
64
64
this .original = v ;
65
- if (v .isNull ()) { // apparently this can be a "host object" as well !
66
- value = null ;
67
- type = Type .NULL ;
68
- } else if (v .isProxyObject ()) {
69
- Object o = v .asProxyObject ();
70
- if (o instanceof JsXml ) {
71
- value = ((JsXml ) o ).getNode ();
72
- type = Type .XML ;
73
- } else if (o instanceof JsMap ) {
74
- value = ((JsMap ) o ).getMap ();
75
- type = Type .OBJECT ;
76
- } else if (o instanceof JsList ) {
77
- value = ((JsList ) o ).getList ();
65
+ try {
66
+ if (v .isNull ()) { // apparently this can be a "host object" as well !
67
+ value = null ;
68
+ type = Type .NULL ;
69
+ } else if (v .isProxyObject ()) {
70
+ Object o = v .asProxyObject ();
71
+ if (o instanceof JsXml ) {
72
+ value = ((JsXml ) o ).getNode ();
73
+ type = Type .XML ;
74
+ } else if (o instanceof JsMap ) {
75
+ value = ((JsMap ) o ).getMap ();
76
+ type = Type .OBJECT ;
77
+ } else if (o instanceof JsList ) {
78
+ value = ((JsList ) o ).getList ();
79
+ type = Type .ARRAY ;
80
+ } else if (o instanceof JsExecutable ) {
81
+ value = (JsExecutable ) o ;
82
+ type = Type .FUNCTION ;
83
+ } else { // e.g. custom bridge, e.g. Request
84
+ value = v .as (Object .class );
85
+ type = Type .OTHER ;
86
+ }
87
+ } else if (v .isHostObject ()) { // java object
88
+ if (v .isMetaObject ()) { // java.lang.Class !
89
+ value = v ; // special case, keep around as graal value
90
+ } else {
91
+ value = v .asHostObject ();
92
+ }
93
+ type = Type .OTHER ;
94
+ } else if (v .canExecute ()) {
95
+ if (v .isMetaObject ()) { // js function
96
+ value = v ; // special case, keep around as graal value
97
+ } else { // java function reference
98
+ value = new JsExecutable (v );
99
+ }
100
+ type = Type .FUNCTION ;
101
+ } else if (v .hasArrayElements ()) {
102
+ int size = (int ) v .getArraySize ();
103
+ List list = new ArrayList (size );
104
+ for (int i = 0 ; i < size ; i ++) {
105
+ Value child = v .getArrayElement (i );
106
+ list .add (new JsValue (child ).value );
107
+ }
108
+ value = list ;
78
109
type = Type .ARRAY ;
79
- } else if (o instanceof JsExecutable ) {
80
- value = (JsExecutable ) o ;
81
- type = Type .FUNCTION ;
82
- } else { // e.g. custom bridge, e.g. Request
110
+ } else if (v .hasMembers ()) {
111
+ Set <String > keys = v .getMemberKeys ();
112
+ Map <String , Object > map = new LinkedHashMap (keys .size ());
113
+ for (String key : keys ) {
114
+ Value child = v .getMember (key );
115
+ map .put (key , new JsValue (child ).value );
116
+ }
117
+ value = map ;
118
+ type = Type .OBJECT ;
119
+ } else {
83
120
value = v .as (Object .class );
84
121
type = Type .OTHER ;
85
122
}
86
- } else if (v .isHostObject ()) { // java object
87
- if (v .isMetaObject ()) { // java.lang.Class !
88
- value = v ; // special case, keep around as graal value
89
- } else {
90
- value = v .asHostObject ();
91
- }
92
- type = Type .OTHER ;
93
- } else if (v .canExecute ()) {
94
- if (v .isMetaObject ()) { // js function
95
- value = v ; // special case, keep around as graal value
96
- } else { // java function reference
97
- value = new JsExecutable (v );
98
- }
99
- type = Type .FUNCTION ;
100
- } else if (v .hasArrayElements ()) {
101
- int size = (int ) v .getArraySize ();
102
- List list = new ArrayList (size );
103
- for (int i = 0 ; i < size ; i ++) {
104
- Value child = v .getArrayElement (i );
105
- list .add (new JsValue (child ).value );
106
- }
107
- value = list ;
108
- type = Type .ARRAY ;
109
- } else if (v .hasMembers ()) {
110
- Set <String > keys = v .getMemberKeys ();
111
- Map <String , Object > map = new LinkedHashMap (keys .size ());
112
- for (String key : keys ) {
113
- Value child = v .getMember (key );
114
- map .put (key , new JsValue (child ).value );
115
- }
116
- value = map ;
117
- type = Type .OBJECT ;
118
- } else {
119
- value = v .as (Object .class );
120
- type = Type .OTHER ;
123
+ } catch (Exception e ) {
124
+ logger .debug ("js conversion failed" , e );
125
+ throw e ;
121
126
}
122
127
}
123
128
0 commit comments