Mercurial > hg > truffle
annotate c1x4hotspotsrc/HotSpotVM/src/com/sun/hotspot/c1x/InvocationSocket.java @ 2295:160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Tue, 12 Apr 2011 16:58:56 +0200 |
parents | 6190d20bd6d6 |
children | 34354e2e40a3 |
rev | line source |
---|---|
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
1 /* |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
2 * Copyright (c) 2010 Sun Microsystems, Inc. All rights reserved. |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
3 * |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
4 * Sun Microsystems, Inc. has intellectual property rights relating to technology embodied in the product |
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
5 * that is described in this document. In particular, and without limitation, these intellectual property |
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
6 * rights may include one or more of the U.S. patents listed at http://www.sun.com/patents and one or |
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
7 * more additional patents or pending patent applications in the U.S. and in other countries. |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
8 * |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
9 * U.S. Government Rights - Commercial software. Government users are subject to the Sun |
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
10 * Microsystems, Inc. standard license agreement and applicable provisions of the FAR and its |
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
11 * supplements. |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
12 * |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
13 * Use is subject to license terms. Sun, Sun Microsystems, the Sun logo, Java and Solaris are trademarks or |
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
14 * registered trademarks of Sun Microsystems, Inc. in the U.S. and other countries. All SPARC trademarks |
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
15 * are used under license and are trademarks or registered trademarks of SPARC International, Inc. in the |
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
16 * U.S. and other countries. |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
17 * |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
18 * UNIX is a registered trademark in the U.S. and other countries, exclusively licensed through X/Open |
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
19 * Company, Ltd. |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
20 */ |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
21 package com.sun.hotspot.c1x; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
22 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
23 import java.io.*; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
24 import java.lang.reflect.*; |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
25 import java.util.*; |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
26 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
27 import com.sun.hotspot.c1x.logging.*; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
28 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
29 /** |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
30 * A collection of java.lang.reflect proxies that communicate over a socket connection. |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
31 * |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
32 * Calling a method sends the method name and the parameters through the socket. Afterwards this class waits for a |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
33 * result. While waiting for a result three types of objects can arrive through the socket: a method invocation, a |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
34 * method result or an exception. Method invocation can thus be recursive. |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
35 * |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
36 * @author Lukas Stadler |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
37 */ |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
38 public class InvocationSocket { |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
39 |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
40 private static final boolean DEBUG = false; |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
41 private static final boolean COUNT_CALLS = false; |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
42 |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
43 private static final HashSet<String> cachedMethodNames = new HashSet<String>(); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
44 private static final HashSet<String> forbiddenMethodNames = new HashSet<String>(); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
45 |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
46 static { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
47 cachedMethodNames.add("name"); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
48 cachedMethodNames.add("kind"); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
49 cachedMethodNames.add("isResolved"); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
50 cachedMethodNames.add("getVMEntries"); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
51 cachedMethodNames.add("exactType"); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
52 cachedMethodNames.add("isInitialized"); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
53 forbiddenMethodNames.add("javaClass"); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
54 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
55 |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
56 private final ObjectOutputStream output; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
57 private final ObjectInputStream input; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
58 |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
59 private final Map<String, Integer> counts = new HashMap<String, Integer>(); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
60 |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
61 public InvocationSocket(ObjectOutputStream output, ObjectInputStream input) { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
62 this.output = output; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
63 this.input = input; |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
64 |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
65 if (COUNT_CALLS) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
66 Runtime.getRuntime().addShutdownHook(new Thread() { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
67 @Override |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
68 public void run() { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
69 SortedMap<Integer, String> sorted = new TreeMap<Integer, String>(); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
70 for (Map.Entry<String, Integer> entry : counts.entrySet()) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
71 sorted.put(entry.getValue(), entry.getKey()); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
72 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
73 for (Map.Entry<Integer, String> entry : sorted.entrySet()) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
74 System.out.println(entry.getKey() + ": " + entry.getValue()); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
75 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
76 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
77 }); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
78 } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
79 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
80 |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
81 /** |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
82 * Represents one invocation of a method that is transferred via the socket connection. |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
83 * |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
84 * @author Lukas Stadler |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
85 */ |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
86 private static class Invocation implements Serializable { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
87 |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
88 public Object receiver; |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
89 public String methodName; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
90 public Object[] args; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
91 |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
92 public Invocation(Object receiver, String methodName, Object[] args) { |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
93 this.receiver = receiver; |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
94 this.methodName = methodName; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
95 this.args = args; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
96 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
97 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
98 |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
99 /** |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
100 * Represents the result of an invocation that is transferred via the socket connection. |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
101 * |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
102 * @author Lukas Stadler |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
103 */ |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
104 private static class Result implements Serializable { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
105 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
106 public Object result; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
107 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
108 public Result(Object result) { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
109 this.result = result; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
110 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
111 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
112 |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
113 private void incCount(String name, Object[] args) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
114 if (COUNT_CALLS) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
115 name = name + (args == null ? 0 : args.length); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
116 if (counts.get(name) != null) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
117 counts.put(name, counts.get(name) + 1); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
118 } else { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
119 counts.put(name, 1); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
120 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
121 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
122 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
123 |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
124 /** |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
125 * Each instance of this class handles remote invocations for one instance of a Remote class. It will forward all |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
126 * interface methods to the other end of the socket and cache the results of calls to certain methods. |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
127 * |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
128 * @author Lukas Stadler |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
129 */ |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
130 public class Handler implements InvocationHandler { |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
131 |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
132 private final Object receiver; |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
133 private final HashMap<String, Object> cache = new HashMap<String, Object>(); |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
134 |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
135 public Handler(Object receiver) { |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
136 this.receiver = receiver; |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
137 } |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
138 |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
139 @Override |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
140 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
141 // only interface methods can be transferred, java.lang.Object methods |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
142 if (method.getDeclaringClass() == Object.class) { |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
143 return method.invoke(receiver, args); |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
144 } |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
145 String methodName = method.getName(); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
146 // check if the result of this zero-arg method was cached |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
147 if (args == null || args.length == 0) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
148 if (cache.containsKey(methodName)) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
149 return cache.get(methodName); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
150 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
151 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
152 if (forbiddenMethodNames.contains(methodName)) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
153 throw new IllegalAccessException(methodName + " not allowed"); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
154 } |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
155 try { |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
156 if (DEBUG) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
157 Logger.startScope("invoking remote " + methodName); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
158 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
159 incCount(methodName, args); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
160 |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
161 output.writeObject(new Invocation(receiver, methodName, args)); |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
162 output.flush(); |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
163 Object result = waitForResult(); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
164 |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
165 // result caching for selected methods |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
166 if ((args == null || args.length == 0) && cachedMethodNames.contains(methodName)) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
167 cache.put(methodName, result); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
168 } |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
169 return result; |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
170 } catch (Throwable t) { |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
171 t.printStackTrace(); |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
172 throw t; |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
173 } finally { |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
174 if (DEBUG) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
175 Logger.endScope(""); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
176 } |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
177 } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
178 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
179 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
180 |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
181 /** |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
182 * Waits for the result of a remote method invocation. Invocations that should be executed in this VM might arrive |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
183 * while waiting for the result, and these invocations will be executed before again waiting fort he result. |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
184 */ |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
185 public Object waitForResult() throws IOException, ClassNotFoundException { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
186 while (true) { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
187 Object in = input.readObject(); |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
188 if (in instanceof Result) { |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
189 return ((Result) in).result; |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
190 } else if (in instanceof RuntimeException) { |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
191 throw (RuntimeException) in; |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
192 } else if (in instanceof Throwable) { |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
193 throw new RuntimeException((Throwable) in); |
1437
9e5e83ca2259
Enabled -C1X:OPTIONS when running HotSpot/C1X. Enabled checkstyle for the HotSpotVM Java project.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1423
diff
changeset
|
194 } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
195 |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
196 Invocation invoke = (Invocation) in; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
197 Method method = null; |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
198 for (Class<?> clazz = invoke.receiver.getClass(); clazz != null; clazz = clazz.getSuperclass()) { |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
199 for (Method m : clazz.getDeclaredMethods()) { |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
200 if (invoke.methodName.equals(m.getName())) { |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
201 method = m; |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
202 break; |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
203 } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
204 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
205 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
206 if (method == null) { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
207 Exception e = new UnsupportedOperationException("unknown method " + invoke.methodName); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
208 e.printStackTrace(); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
209 output.writeObject(e); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
210 output.flush(); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
211 } else { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
212 Object result; |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
213 try { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
214 if (invoke.args == null) { |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
215 if (DEBUG) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
216 Logger.startScope("invoking local " + invoke.methodName); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
217 } |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
218 result = method.invoke(invoke.receiver); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
219 } else { |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
220 if (Logger.ENABLED && DEBUG) { |
2289 | 221 StringBuilder str = new StringBuilder(); |
222 str.append("invoking local " + invoke.methodName + "("); | |
223 for (int i = 0; i < invoke.args.length; i++) { | |
224 str.append(i == 0 ? "" : ", "); | |
225 str.append(Logger.pretty(invoke.args[i])); | |
226 } | |
227 str.append(")"); | |
228 Logger.startScope(str.toString()); | |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
229 } |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
230 result = method.invoke(invoke.receiver, invoke.args); |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
231 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
232 result = new Result(result); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
233 } catch (IllegalArgumentException e) { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
234 System.out.println("error while invoking " + invoke.methodName); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
235 e.getCause().printStackTrace(); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
236 result = e.getCause(); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
237 } catch (InvocationTargetException e) { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
238 System.out.println("error while invoking " + invoke.methodName); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
239 e.getCause().printStackTrace(); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
240 result = e.getCause(); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
241 } catch (IllegalAccessException e) { |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
242 System.out.println("error while invoking " + invoke.methodName); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
243 e.getCause().printStackTrace(); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
244 result = e.getCause(); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
245 } finally { |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
246 if (DEBUG) { |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
247 Logger.endScope(""); |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
248 } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
249 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
250 output.writeObject(result); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
251 output.flush(); |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
252 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
253 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
254 } |
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
255 |
2295
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
256 /** |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
257 * Sends a result without invoking a method, used by CompilationServer startup code. |
160aacf936ad
removed last instances of RiType.javaClass, small changes to InvocationSocket and ReplacingStreams to make remote compilation work
Lukas Stadler <lukas.stadler@jku.at>
parents:
2289
diff
changeset
|
258 */ |
2288
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
259 public void sendResult(Object obj) throws IOException { |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
260 output.writeObject(new Result(obj)); |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
261 output.flush(); |
8c426c2891c8
client/server: new interface Remote marks classes that should not be serialized, but called remotely
Lukas Stadler <lukas.stadler@jku.at>
parents:
2284
diff
changeset
|
262 } |
1423
760213a60e8b
* rewrite of the code installation
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
263 } |