Skip to content

Commit 20fa99f

Browse files
author
vsilaev
committed
Renaming net.tascalate.javaflow.utils -> net.tascalate.javaflow.tools.runtime; force JavaAgents to re-transform classes in agentmain
1 parent fad66c5 commit 20fa99f

File tree

14 files changed

+99
-30
lines changed

14 files changed

+99
-30
lines changed

net.tascalate.javaflow.extras/src/main/java/org/apache/commons/javaflow/extras/CoIterator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,9 @@ public void remove() {
125125

126126
public void close() {
127127
try {
128-
cc.terminate();
128+
if (null != cc) {
129+
cc.terminate();
130+
}
129131
} finally {
130132
cc = null;
131133
advance = false;

net.tascalate.javaflow.tools.cdi-javaagent/src/main/java/org/apache/commons/javaflow/instrumentation/cdi/CdiProxyClassTransformer.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,13 @@ public byte[] transform(
4545
final Class<?> classBeingRedefined,
4646
final ProtectionDomain protectionDomain,
4747
final byte[] classfileBuffer) throws IllegalClassFormatException {
48+
49+
if (skipClassByName(className)) {
50+
if (log.isInfoEnabled()) {
51+
log.info("Ignoring class by name (looks like Java std. class): " + className);
52+
}
53+
return null;
54+
}
4855

4956
classLoader = getSafeClassLoader(classLoader);
5057
final ContinuableClassInfoResolver resolver = getCachedResolver(classLoader);
@@ -94,6 +101,19 @@ protected ContinuableClassInfoResolver getCachedResolver(ClassLoader classLoader
94101
}
95102
}
96103
}
104+
105+
static boolean skipClassByName(String className) {
106+
return null != className && (
107+
className.startsWith("java.") ||
108+
className.startsWith("javax.") ||
109+
className.startsWith("sun.") ||
110+
className.startsWith("com.sun.") ||
111+
className.startsWith("oracle.") ||
112+
className.startsWith("com.oracle.") ||
113+
className.startsWith("ibm.") ||
114+
className.startsWith("com.ibm")
115+
);
116+
}
97117

98118
private static final Map<ClassLoader, ContinuableClassInfoResolver> classLoader2resolver = new WeakHashMap<ClassLoader, ContinuableClassInfoResolver>();
99119
}

net.tascalate.javaflow.tools.cdi-javaagent/src/main/java/org/apache/commons/javaflow/instrumentation/cdi/CdiProxyInstrumentationAgent.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public class CdiProxyInstrumentationAgent {
3131
*/
3232
public static void premain(String args, Instrumentation instrumentation) throws Exception {
3333
setupInstrumentation(instrumentation);
34+
System.setProperty(CdiProxyInstrumentationAgent.class.getName(), "true");
3435
}
3536

3637
/**
@@ -45,6 +46,17 @@ public static void premain(String args, Instrumentation instrumentation) throws
4546
*/
4647
public static void agentmain(String args, Instrumentation instrumentation) throws Exception {
4748
setupInstrumentation(instrumentation);
49+
for (Class<?> clazz : instrumentation.getAllLoadedClasses()) {
50+
if (instrumentation.isModifiableClass(clazz) &&
51+
!CdiProxyClassTransformer.skipClassByName(clazz.getName())) {
52+
try {
53+
instrumentation.retransformClasses(clazz);
54+
} catch (Throwable e) {
55+
e.printStackTrace();
56+
}
57+
}
58+
}
59+
System.setProperty(CdiProxyInstrumentationAgent.class.getName(), "true");
4860
}
4961

5062
private static void setupInstrumentation(Instrumentation instrumentation) {

net.tascalate.javaflow.tools.javaagent/src/main/java/org/apache/commons/javaflow/instrumentation/JavaFlowClassTransformer.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,13 @@ public byte[] transform(ClassLoader classLoader, final String className,
4747
final ProtectionDomain protectionDomain,
4848
final byte[] classfileBuffer) throws IllegalClassFormatException {
4949

50+
if (skipClassByName(className)) {
51+
if (log.isInfoEnabled()) {
52+
log.info("Ignoring class by name (looks like Java std. class): " + className);
53+
}
54+
return null;
55+
}
56+
5057
classLoader = getSafeClassLoader(classLoader);
5158
final ContinuableClassInfoResolver resolver = getCachedResolver(classLoader);
5259

@@ -69,7 +76,9 @@ public byte[] call() {
6976
log.error(ex);
7077
return null;
7178
} catch (ClassCircularityError ex) {
72-
log.warn("Ignoring class circularity error: " + ex.getMessage());
79+
if (log.isWarnEnabled()) {
80+
log.warn("Ignoring class circularity error: " + ex.getMessage());
81+
}
7382
return null;
7483
} catch (final Error ex) {
7584
log.error(ex);
@@ -95,6 +104,19 @@ protected ContinuableClassInfoResolver getCachedResolver(final ClassLoader class
95104
}
96105
}
97106
}
107+
108+
static boolean skipClassByName(String className) {
109+
return null != className && (
110+
className.startsWith("java.") ||
111+
className.startsWith("javax.") ||
112+
className.startsWith("sun.") ||
113+
className.startsWith("com.sun.") ||
114+
className.startsWith("oracle.") ||
115+
className.startsWith("com.oracle.") ||
116+
className.startsWith("ibm.") ||
117+
className.startsWith("com.ibm")
118+
);
119+
}
98120

99121
final private static Map<ClassLoader, ContinuableClassInfoResolver> classLoader2resolver = new WeakHashMap<ClassLoader, ContinuableClassInfoResolver>();
100122
}

net.tascalate.javaflow.tools.javaagent/src/main/java/org/apache/commons/javaflow/instrumentation/JavaFlowInstrumentationAgent.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ public class JavaFlowInstrumentationAgent {
2929
* @param instrumentation
3030
* @throws Exception
3131
*/
32-
public static void premain(final String args,
33-
final Instrumentation instrumentation) throws Exception {
32+
public static void premain(String args, Instrumentation instrumentation) throws Exception {
3433
setupInstrumentation(instrumentation);
34+
System.setProperty(JavaFlowInstrumentationAgent.class.getName(), "true");
3535
}
3636

3737
/**
@@ -44,13 +44,22 @@ public static void premain(final String args,
4444
* @param instrumentation
4545
* @throws Exception
4646
*/
47-
public static void agentmain(final String args,
48-
final Instrumentation instrumentation) throws Exception {
47+
public static void agentmain(String args, Instrumentation instrumentation) throws Exception {
4948
setupInstrumentation(instrumentation);
49+
for (Class<?> clazz : instrumentation.getAllLoadedClasses()) {
50+
if (instrumentation.isModifiableClass(clazz) &&
51+
!JavaFlowClassTransformer.skipClassByName(clazz.getName())) {
52+
try {
53+
instrumentation.retransformClasses(clazz);
54+
} catch (Throwable e) {
55+
e.printStackTrace();
56+
}
57+
}
58+
}
59+
System.setProperty(JavaFlowInstrumentationAgent.class.getName(), "true");
5060
}
5161

52-
private static void setupInstrumentation(
53-
final Instrumentation instrumentation) {
62+
private static void setupInstrumentation(Instrumentation instrumentation) {
5463
instrumentation.addTransformer(new JavaFlowClassTransformer(), true);
5564
}
5665

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<projectDescription>
3+
<name>net.tascalate.javaflow.tools.runtime</name>
4+
<comment>NO_M2ECLIPSE_SUPPORT: Project files created with the maven-eclipse-plugin are not supported in M2Eclipse.</comment>
5+
<projects>
6+
</projects>
7+
<buildSpec>
8+
<buildCommand>
9+
<name>org.eclipse.jdt.core.javabuilder</name>
10+
<arguments>
11+
</arguments>
12+
</buildCommand>
13+
<buildCommand>
14+
<name>org.eclipse.m2e.core.maven2Builder</name>
15+
<arguments>
16+
</arguments>
17+
</buildCommand>
18+
</buildSpec>
19+
<natures>
20+
<nature>org.eclipse.m2e.core.maven2Nature</nature>
21+
<nature>org.eclipse.jdt.core.javanature</nature>
22+
</natures>
23+
</projectDescription>

0 commit comments

Comments
 (0)