1 /* |
|
2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved. |
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
4 * |
|
5 * This code is free software; you can redistribute it and/or modify it |
|
6 * under the terms of the GNU General Public License version 2 only, as |
|
7 * published by the Free Software Foundation. Oracle designates this |
|
8 * particular file as subject to the "Classpath" exception as provided |
|
9 * by Oracle in the LICENSE file that accompanied this code. |
|
10 * |
|
11 * This code is distributed in the hope that it will be useful, but WITHOUT |
|
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
14 * version 2 for more details (a copy is included in the LICENSE file that |
|
15 * accompanied this code). |
|
16 * |
|
17 * You should have received a copy of the GNU General Public License version |
|
18 * 2 along with this work; if not, write to the Free Software Foundation, |
|
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
20 * |
|
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
22 * or visit www.oracle.com if you need additional information or have any |
|
23 * questions. |
|
24 */ |
|
25 |
|
26 package jdk.nashorn.api.javaaccess; |
|
27 |
|
28 import javax.script.Invocable; |
|
29 import javax.script.ScriptEngine; |
|
30 import javax.script.ScriptException; |
|
31 |
|
32 @SuppressWarnings("javadoc") |
|
33 public class SharedObject { |
|
34 |
|
35 // Public fields |
|
36 public String publicString = "PublicString"; |
|
37 public String[] publicStringArray = { "ArrayString[0]", "ArrayString[1]", "ArrayString[2]", "ArrayString[3]" }; |
|
38 public Person publicObject = new Person(256); |
|
39 public Person[] publicObjectArray = { new Person(4), new Person(-422), new Person(14) }; |
|
40 public boolean publicBoolean = true; |
|
41 public boolean[] publicBooleanArray = { true, false, false, true }; |
|
42 public Boolean publicBooleanBox = true; |
|
43 public long publicLong = 933333333333333333L; |
|
44 public long[] publicLongArray = { 99012333333333L, -124355555L, 89777777777L }; |
|
45 public Long publicLongBox = 9333333333L; |
|
46 public int publicInt = 2076543123; |
|
47 public int[] publicIntArray = { 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 }; |
|
48 public Integer publicIntBox = 20765123; |
|
49 public byte publicByte = -128; |
|
50 public byte[] publicByteArray = { 1, 2, 4, 8, 16, 32, 64, 127, -128 }; |
|
51 public Byte publicByteBox = 127; |
|
52 public short publicShort = 32000; |
|
53 public short[] publicShortArray = { 3240, 8900, -16789, 1, 12 }; |
|
54 public Short publicShortBox = Short.MIN_VALUE; |
|
55 public float publicFloat = 0.7f; |
|
56 public float[] publicFloatArray = { -32.01f, 89.3f, -1.3e8f, 3.1f }; |
|
57 public Float publicFloatBox = 1.377e4f; |
|
58 public double publicDouble = 1.34e20; |
|
59 public double[] publicDoubleArray = { 0.75e80, 8e-43, 1.000077, 0.123e10 }; |
|
60 public Double publicDoubleBox = 1.4e-19; |
|
61 public char publicChar = 'A'; |
|
62 public char[] publicCharArray = "Hello Nashorn".toCharArray(); |
|
63 public Character publicCharBox = 'B'; |
|
64 // Public static fields |
|
65 public static String publicStaticString = "PublicStaticString"; |
|
66 public static String[] publicStaticStringArray = { "StaticArrayString[0]", "StaticArrayString[1]", "StaticArrayString[2]", "StaticArrayString[3]" }; |
|
67 public static Person publicStaticObject = new Person(512); |
|
68 public static Person[] publicStaticObjectArray = { new Person(40), new Person(-22), new Person(18) }; |
|
69 public static boolean publicStaticBoolean = true; |
|
70 public static boolean[] publicStaticBooleanArray = { false, false, false, true }; |
|
71 public static Boolean publicStaticBooleanBox = true; |
|
72 public static long publicStaticLong = 13333333333333333L; |
|
73 public static long[] publicStaticLongArray = { 19012333333333L, -224355555L, 39777777777L }; |
|
74 public static Long publicStaticLongBox = 9333333334L; |
|
75 public static int publicStaticInt = 207654323; |
|
76 public static int[] publicStaticIntArray = { 5, 8, 13, 21, 34 }; |
|
77 public static Integer publicStaticIntBox = 2075123; |
|
78 public static byte publicStaticByte = -12; |
|
79 public static byte[] publicStaticByteArray = { 16, 32, 64, 127, -128 }; |
|
80 public static Byte publicStaticByteBox = 17; |
|
81 public static short publicStaticShort = 320; |
|
82 public static short[] publicStaticShortArray = { 1240, 900, -1789, 100, 12 }; |
|
83 public static Short publicStaticShortBox = -16777; |
|
84 public static float publicStaticFloat = 7.7e8f; |
|
85 public static float[] publicStaticFloatArray = { -131.01f, 189.3f, -31.3e8f, 3.7f }; |
|
86 public static Float publicStaticFloatBox = 1.37e4f; |
|
87 public static double publicStaticDouble = 1.341e20; |
|
88 public static double[] publicStaticDoubleArray = { 0.75e80, 0.123e10, 8e-43, 1.000077 }; |
|
89 public static Double publicStaticDoubleBox = 1.41e-12; |
|
90 public static char publicStaticChar = 'C'; |
|
91 public static char[] publicStaticCharArray = "Nashorn".toCharArray(); |
|
92 public static Character publicStaticCharBox = 'D'; |
|
93 // Public final fields |
|
94 public final String publicFinalString = "PublicFinalString"; |
|
95 public final String[] publicFinalStringArray = { "FinalArrayString[0]", "FinalArrayString[1]", "FinalArrayString[2]", "FinalArrayString[3]" }; |
|
96 public final Person publicFinalObject = new Person(1024); |
|
97 public final Person[] publicFinalObjectArray = { new Person(-900), new Person(1000), new Person(180) }; |
|
98 public final boolean publicFinalBoolean = true; |
|
99 public final boolean[] publicFinalBooleanArray = { false, false, true, false }; |
|
100 public final Boolean publicFinalBooleanBox = true; |
|
101 public final long publicFinalLong = 13353333333333333L; |
|
102 public final long[] publicFinalLongArray = { 1901733333333L, -2247355555L, 3977377777L }; |
|
103 public final Long publicFinalLongBox = 9377333334L; |
|
104 public final int publicFinalInt = 20712023; |
|
105 public final int[] publicFinalIntArray = { 50, 80, 130, 210, 340 }; |
|
106 public final Integer publicFinalIntBox = 207512301; |
|
107 public final byte publicFinalByte = -7; |
|
108 public final byte[] publicFinalByteArray = { 1, 3, 6, 17, -128 }; |
|
109 public final Byte publicFinalByteBox = 19; |
|
110 public final short publicFinalShort = 31220; |
|
111 public final short[] publicFinalShortArray = { 12240, 9200, -17289, 1200, 12 }; |
|
112 public final Short publicFinalShortBox = -26777; |
|
113 public final float publicFinalFloat = 7.72e8f; |
|
114 public final float[] publicFinalFloatArray = { -131.012f, 189.32f, -31.32e8f, 3.72f }; |
|
115 public final Float publicFinalFloatBox = 1.372e4f; |
|
116 public final double publicFinalDouble = 1.3412e20; |
|
117 public final double[] publicFinalDoubleArray = { 0.725e80, 0.12e10, 8e-3, 1.00077 }; |
|
118 public final Double publicFinalDoubleBox = 1.412e-12; |
|
119 public final char publicFinalChar = 'E'; |
|
120 public final char[] publicFinalCharArray = "Nashorn hello".toCharArray(); |
|
121 public final Character publicFinalCharBox = 'F'; |
|
122 // Public static final fields |
|
123 public static final String publicStaticFinalString = "PublicStaticFinalString"; |
|
124 public static final String[] publicStaticFinalStringArray = { "StaticFinalArrayString[0]", "StaticFinalArrayString[1]", "StaticFinalArrayString[2]", "StaticFinalArrayString[3]" }; |
|
125 public static final Person publicStaticFinalObject = new Person(2048); |
|
126 public static final Person[] publicStaticFinalObjectArray = { new Person(-9), new Person(110), new Person(Integer.MAX_VALUE) }; |
|
127 public static final boolean publicStaticFinalBoolean = true; |
|
128 public static final boolean[] publicStaticFinalBooleanArray = { false, true, false, false }; |
|
129 public static final Boolean publicStaticFinalBooleanBox = true; |
|
130 public static final long publicStaticFinalLong = 8333333333333L; |
|
131 public static final long[] publicStaticFinalLongArray = { 19017383333L, -2247358L, 39773787L }; |
|
132 public static final Long publicStaticFinalLongBox = 9377388334L; |
|
133 public static final int publicStaticFinalInt = 207182023; |
|
134 public static final int[] publicStaticFinalIntArray = { 1308, 210, 340 }; |
|
135 public static final Integer publicStaticFinalIntBox = 2078301; |
|
136 public static final byte publicStaticFinalByte = -70; |
|
137 public static final byte[] publicStaticFinalByteArray = { 17, -128, 81 }; |
|
138 public static final Byte publicStaticFinalByteBox = 91; |
|
139 public static final short publicStaticFinalShort = 8888; |
|
140 public static final short[] publicStaticFinalShortArray = { 8240, 9280, -1289, 120, 812 }; |
|
141 public static final Short publicStaticFinalShortBox = -26; |
|
142 public static final float publicStaticFinalFloat = 0.72e8f; |
|
143 public static final float[] publicStaticFinalFloatArray = { -8131.012f, 9.32f, -138.32e8f, 0.72f }; |
|
144 public static final Float publicStaticFinalFloatBox = 1.2e4f; |
|
145 public static final double publicStaticFinalDouble = 1.8e12; |
|
146 public static final double[] publicStaticFinalDoubleArray = { 8.725e80, 0.82e10, 18e-3, 1.08077 }; |
|
147 public static final Double publicStaticFinalDoubleBox = 1.5612e-13; |
|
148 public static final char publicStaticFinalChar = 'K'; |
|
149 public static final char[] publicStaticFinalCharArray = "StaticString".toCharArray(); |
|
150 public static final Character publicStaticFinalCharBox = 'L'; |
|
151 |
|
152 // Special vars |
|
153 public volatile boolean volatileBoolean = true; |
|
154 public transient boolean transientBoolean = true; |
|
155 |
|
156 // For methods testing |
|
157 public boolean isAccessed = false; |
|
158 public volatile boolean isFinished = false; |
|
159 |
|
160 private ScriptEngine engine; |
|
161 |
|
162 public ScriptEngine getEngine() { |
|
163 return engine; |
|
164 } |
|
165 |
|
166 public void setEngine(final ScriptEngine engine) { |
|
167 this.engine = engine; |
|
168 } |
|
169 |
|
170 public void voidMethod() { |
|
171 isAccessed = true; |
|
172 } |
|
173 |
|
174 public boolean booleanMethod(final boolean arg) { |
|
175 return !arg; |
|
176 } |
|
177 |
|
178 public Boolean booleanBoxingMethod(final Boolean arg) { |
|
179 return !arg.booleanValue(); |
|
180 } |
|
181 |
|
182 public boolean[] booleanArrayMethod(final boolean arg[]) { |
|
183 final boolean[] res = new boolean[arg.length]; |
|
184 for (int i = 0; i < arg.length; i++) { |
|
185 res[i] = !arg[i]; |
|
186 } |
|
187 return res; |
|
188 } |
|
189 |
|
190 public int intMethod(final int arg) { |
|
191 return arg + arg; |
|
192 } |
|
193 |
|
194 public Integer intBoxingMethod(final Integer arg) { |
|
195 return arg + arg; |
|
196 } |
|
197 |
|
198 public int[] intArrayMethod(final int arg[]) { |
|
199 final int[] res = new int[arg.length]; |
|
200 for (int i = 0; i < arg.length; i++) { |
|
201 res[i] = arg[i] * 2; |
|
202 } |
|
203 return res; |
|
204 } |
|
205 |
|
206 public long longMethod(final long arg) { |
|
207 return arg + arg; |
|
208 } |
|
209 |
|
210 public Long longBoxingMethod(final Long arg) { |
|
211 return arg + arg; |
|
212 } |
|
213 |
|
214 public long[] longArrayMethod(final long[] arg) { |
|
215 final long[] res = new long[arg.length]; |
|
216 for (int i = 0; i < arg.length; i++) { |
|
217 res[i] = arg[i] * 2; |
|
218 } |
|
219 return res; |
|
220 } |
|
221 |
|
222 public byte byteMethod(final byte arg) { |
|
223 return (byte)(arg + arg); |
|
224 } |
|
225 |
|
226 public Byte byteBoxingMethod(final Byte arg) { |
|
227 return (byte)(arg + arg); |
|
228 } |
|
229 |
|
230 public byte[] byteArrayMethod(final byte[] arg) { |
|
231 final byte[] res = new byte[arg.length]; |
|
232 for (int i = 0; i < arg.length; i++) { |
|
233 res[i] = (byte)(arg[i] * 2); |
|
234 } |
|
235 return res; |
|
236 } |
|
237 |
|
238 public char charMethod(final char arg) { |
|
239 return Character.toUpperCase(arg); |
|
240 } |
|
241 |
|
242 public Character charBoxingMethod(final Character arg) { |
|
243 return Character.toUpperCase(arg); |
|
244 } |
|
245 |
|
246 public char[] charArrayMethod(final char[] arg) { |
|
247 final char[] res = new char[arg.length]; |
|
248 for (int i = 0; i < arg.length; i++) { |
|
249 res[i] = Character.toUpperCase(arg[i]); |
|
250 } |
|
251 return res; |
|
252 } |
|
253 |
|
254 public short shortMethod(final short arg) { |
|
255 return (short)(arg + arg); |
|
256 } |
|
257 |
|
258 public Short shortBoxingMethod(final Short arg) { |
|
259 return (short)(arg + arg); |
|
260 } |
|
261 |
|
262 public short[] shortArrayMethod(final short[] arg) { |
|
263 final short[] res = new short[arg.length]; |
|
264 for (int i = 0; i < arg.length; i++) { |
|
265 res[i] = (short)(arg[i] * 2); |
|
266 } |
|
267 return res; |
|
268 } |
|
269 |
|
270 public float floatMethod(final float arg) { |
|
271 return arg + arg; |
|
272 } |
|
273 |
|
274 public Float floatBoxingMethod(final Float arg) { |
|
275 return arg + arg; |
|
276 } |
|
277 |
|
278 public float[] floatArrayMethod(final float[] arg) { |
|
279 final float[] res = new float[arg.length]; |
|
280 for (int i = 0; i < arg.length; i++) { |
|
281 res[i] = arg[i] * 2; |
|
282 } |
|
283 return res; |
|
284 } |
|
285 |
|
286 public double doubleMethod(final double arg) { |
|
287 return arg + arg; |
|
288 } |
|
289 |
|
290 public Double doubleBoxingMethod(final Double arg) { |
|
291 return arg + arg; |
|
292 } |
|
293 |
|
294 public double[] doubleArrayMethod(final double[] arg) { |
|
295 final double[] res = new double[arg.length]; |
|
296 for (int i = 0; i < arg.length; i++) { |
|
297 res[i] = arg[i] * 2; |
|
298 } |
|
299 return res; |
|
300 } |
|
301 |
|
302 public String stringMethod(final String str) { |
|
303 return str + str; |
|
304 } |
|
305 |
|
306 public String[] stringArrayMethod(final String[] arr) { |
|
307 final int l = arr.length; |
|
308 final String[] res = new String[l]; |
|
309 for (int i = 0; i < l; i++) { |
|
310 res[i] = arr[l - i - 1]; |
|
311 } |
|
312 return res; |
|
313 } |
|
314 |
|
315 public Person[] objectArrayMethod(final Person[] arr) { |
|
316 final Person[] res = new Person[arr.length]; |
|
317 for (int i = 0; i < arr.length; i++) { |
|
318 res[i] = new Person(i + 100); |
|
319 } |
|
320 return res; |
|
321 } |
|
322 |
|
323 public Person objectMethod(final Person t) { |
|
324 t.id *= 2; |
|
325 return t; |
|
326 } |
|
327 |
|
328 public int twoParamMethod(final long l, final double d) { |
|
329 return (int)(l + d); |
|
330 } |
|
331 |
|
332 public int threeParamMethod(final short s, final long l, final char c) { |
|
333 return (int)(s + l + c); |
|
334 } |
|
335 |
|
336 public Person[] twoObjectParamMethod(final Person arg1, final Person arg2) { |
|
337 return new Person[] { arg2, arg1 }; |
|
338 } |
|
339 |
|
340 public Person[] threeObjectParamMethod(final Person arg1, final Person arg2, final Person arg3) { |
|
341 return new Person[] { arg3, arg2, arg1 }; |
|
342 } |
|
343 |
|
344 public Person[] eightObjectParamMethod(final Person arg1, final Person arg2, final Person arg3, final Person arg4, final Person arg5, final Person arg6, final Person arg7, final Person arg8) { |
|
345 return new Person[] { arg8, arg7, arg6, arg5, arg4, arg3, arg2, arg1 }; |
|
346 } |
|
347 |
|
348 public Person[] nineObjectParamMethod(final Person arg1, final Person arg2, final Person arg3, final Person arg4, final Person arg5, final Person arg6, final Person arg7, final Person arg8, final Person arg9) { |
|
349 return new Person[] { arg9, arg8, arg7, arg6, arg5, arg4, arg3, arg2, arg1 }; |
|
350 } |
|
351 |
|
352 public Person[] methodObjectEllipsis(final Person... args) { |
|
353 final int l = args.length; |
|
354 final Person[] res = new Person[l]; |
|
355 for (int i = 0; i < l; i++) { |
|
356 res[i] = args[l - i - 1]; |
|
357 } |
|
358 return res; |
|
359 } |
|
360 |
|
361 public Person[] methodPrimitiveEllipsis(final int... args) { |
|
362 final int l = args.length; |
|
363 final Person[] res = new Person[l]; |
|
364 for (int i = 0; i < l; i++) { |
|
365 res[i] = new Person(args[i]); |
|
366 } |
|
367 return res; |
|
368 } |
|
369 |
|
370 public Object[] methodMixedEllipsis(final Object... args) { |
|
371 return args; |
|
372 } |
|
373 |
|
374 public Object[] methodObjectWithEllipsis(final String arg, final int... args) { |
|
375 final Object[] res = new Object[args.length + 1]; |
|
376 res[0] = arg; |
|
377 for (int i = 0; i < args.length; i++) { |
|
378 res[i + 1] = args[i]; |
|
379 } |
|
380 return res; |
|
381 } |
|
382 |
|
383 public Object[] methodPrimitiveWithEllipsis(final int arg, final long... args) { |
|
384 final Object[] res = new Object[args.length + 1]; |
|
385 res[0] = arg; |
|
386 for (int i = 0; i < args.length; i++) { |
|
387 res[i + 1] = args[i]; |
|
388 } |
|
389 return res; |
|
390 } |
|
391 |
|
392 public Object[] methodMixedWithEllipsis(final String arg1, final int arg2, final Object... args) { |
|
393 final Object[] res = new Object[args.length + 2]; |
|
394 res[0] = arg1; |
|
395 res[1] = arg2; |
|
396 System.arraycopy(args, 0, res, 2, args.length); |
|
397 return res; |
|
398 } |
|
399 |
|
400 public void methodStartsThread() { |
|
401 isFinished = false; |
|
402 |
|
403 final Thread t = new Thread(new Runnable() { |
|
404 @Override |
|
405 public void run() { |
|
406 try { |
|
407 Thread.sleep(1000); |
|
408 isFinished = true; |
|
409 } catch (final InterruptedException e) { |
|
410 e.printStackTrace(); |
|
411 } |
|
412 } |
|
413 }); |
|
414 |
|
415 t.start(); |
|
416 } |
|
417 |
|
418 public String overloadedMethodDoubleVSint(final int arg) { |
|
419 return "int"; |
|
420 } |
|
421 |
|
422 public String overloadedMethodDoubleVSint(final double arg) { |
|
423 return "double"; |
|
424 } |
|
425 |
|
426 public int overloadedMethod(final int arg) { |
|
427 return arg*2; |
|
428 } |
|
429 |
|
430 public int overloadedMethod(final String arg) { |
|
431 return arg.length(); |
|
432 } |
|
433 |
|
434 public int overloadedMethod(final boolean arg) { |
|
435 return (arg) ? 1 : 0; |
|
436 } |
|
437 |
|
438 public int overloadedMethod(final Person arg) { |
|
439 return arg.id*2; |
|
440 } |
|
441 |
|
442 public int firstLevelMethodInt(final int arg) throws ScriptException, NoSuchMethodException { |
|
443 return (int) ((Invocable)engine).invokeFunction("secondLevelMethodInt", arg); |
|
444 } |
|
445 |
|
446 public int thirdLevelMethodInt(final int arg) { |
|
447 return arg*5; |
|
448 } |
|
449 |
|
450 public int firstLevelMethodInteger(final Integer arg) throws ScriptException, NoSuchMethodException { |
|
451 return (int) ((Invocable)engine).invokeFunction("secondLevelMethodInteger", arg); |
|
452 } |
|
453 |
|
454 public int thirdLevelMethodInteger(final Integer arg) { |
|
455 return arg*10; |
|
456 } |
|
457 |
|
458 public Person firstLevelMethodObject(final Person p) throws ScriptException, NoSuchMethodException { |
|
459 return (Person) ((Invocable)engine).invokeFunction("secondLevelMethodObject", p); |
|
460 } |
|
461 |
|
462 public Person thirdLevelMethodObject(final Person p) { |
|
463 p.id *= 10; |
|
464 return p; |
|
465 } |
|
466 |
|
467 } |
|