IDEA-52923 [PATCH] Port IDEA to cglib-2.2

This commit is contained in:
peter.gromov
2010-11-03 18:53:01 +03:00
parent ee78771d6c
commit b1e6af66a3
9 changed files with 33 additions and 29 deletions
+3 -3
View File
@@ -1,11 +1,11 @@
<component name="libraryTable">
<library name="CGLIB">
<CLASSES>
<root url="jar://$PROJECT_DIR$/lib/cglib-nodep-2.1_3.jar!/" />
<root url="jar://$PROJECT_DIR$/lib/cglib-2.2.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES>
<root url="jar://$PROJECT_DIR$/lib/src/cglib-src-2.1_3.jar!/src/proxy" />
<root url="jar://$PROJECT_DIR$/lib/src/cglib-src-2.2.jar!/src/proxy" />
</SOURCES>
</library>
</component>
</component>
Binary file not shown.
Binary file not shown.
+1
View File
@@ -14,6 +14,7 @@
<orderEntry type="module" module-name="util" />
<orderEntry type="library" scope="TEST" name="JUnit4" level="project" />
<orderEntry type="library" scope="TEST" name="JMock1" level="project" />
<orderEntry type="library" scope="TEST" name="asm" level="project" />
<orderEntry type="library" scope="TEST" name="CGLIB" level="project" />
<orderEntry type="library" name="Mocks" level="project" />
</component>
+1
View File
@@ -18,6 +18,7 @@
<orderEntry type="library" name="OroMatcher" level="project" />
<orderEntry type="library" name="XmlRPC" level="project" />
<orderEntry type="library" name="commons-net" level="project" />
<orderEntry type="library" name="asm" level="project" />
<orderEntry type="library" name="CGLIB" level="project" />
<orderEntry type="module" module-name="lvcs-api" exported="" />
<orderEntry type="library" scope="TEST" name="JUnit4" level="project" />
@@ -17,9 +17,9 @@ package com.intellij.util;
import com.intellij.openapi.util.Condition;
import com.intellij.util.containers.ConcurrentFactoryMap;
import net.sf.cglib.asm.ClassVisitor;
import net.sf.cglib.asm.Label;
import net.sf.cglib.asm.Type;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.Type;
import net.sf.cglib.core.*;
import java.lang.reflect.Modifier;
@@ -82,16 +82,17 @@ public class InstanceofCheckerGeneratorImpl extends InstanceofCheckerGenerator {
public void generateClass(ClassVisitor classVisitor) throws Exception {
ClassEmitter cv = new ClassEmitter(classVisitor);
cv.visit(Constants.V1_2, Modifier.PUBLIC, "com/intellij/util/InstanceofChecker$$$$$" + myCheckedClass.getName().replace('.', '$'), toInternalName(Object.class), new String[]{toInternalName(Condition.class)}, Constants.SOURCE_FILE);
cv.visit(Constants.V1_2, Modifier.PUBLIC, "com/intellij/util/InstanceofChecker$$$$$" + myCheckedClass.getName().replace('.', '$'), null, toInternalName(Object.class), new String[]{toInternalName(Condition.class)});
cv.visitSource(Constants.SOURCE_FILE, null);
final Signature signature = new Signature("<init>", "()V");
final CodeEmitter cons = cv.begin_method(Modifier.PUBLIC, signature, new Type[0], null);
final CodeEmitter cons = cv.begin_method(Modifier.PUBLIC, signature, new Type[0]);
cons.load_this();
cons.dup();
cons.super_invoke_constructor(signature);
cons.return_value();
cons.end_method();
final CodeEmitter e = cv.begin_method(Modifier.PUBLIC, new Signature("value", "(L" + toInternalName(Object.class) + ";)Z"), new Type[0], null);
final CodeEmitter e = cv.begin_method(Modifier.PUBLIC, new Signature("value", "(L" + toInternalName(Object.class) + ";)Z"), new Type[0]);
e.load_arg(0);
e.instance_of(Type.getType(myCheckedClass));
@@ -15,7 +15,7 @@
*/
package net.sf.cglib.core;
import net.sf.cglib.asm.ClassReader;
import org.objectweb.asm.ClassReader;
import java.lang.ref.Reference;
import java.lang.ref.WeakReference;
@@ -18,9 +18,9 @@ package net.sf.cglib.proxy;
import com.intellij.ide.plugins.PluginManager;
import com.intellij.ide.plugins.cl.PluginClassLoader;
import com.intellij.util.ReflectionCache;
import net.sf.cglib.asm.ClassVisitor;
import net.sf.cglib.asm.Label;
import net.sf.cglib.asm.Type;
import org.objectweb.asm.ClassVisitor;
import org.objectweb.asm.Label;
import org.objectweb.asm.Type;
import net.sf.cglib.core.*;
import java.lang.reflect.Constructor;
@@ -505,18 +505,18 @@ public class AdvancedEnhancer extends AbstractClassGenerator
Constants.SOURCE_FILE);
List constructorInfo = CollectionUtils.transform(constructors, MethodInfoTransformer.getInstance());
e.declare_field(Constants.ACC_PRIVATE, BOUND_FIELD, Type.BOOLEAN_TYPE, null, null);
e.declare_field(Constants.ACC_PRIVATE, BOUND_FIELD, Type.BOOLEAN_TYPE, null);
if (!interceptDuringConstruction) {
e.declare_field(Constants.ACC_PRIVATE, CONSTRUCTED_FIELD, Type.BOOLEAN_TYPE, null, null);
e.declare_field(Constants.ACC_PRIVATE, CONSTRUCTED_FIELD, Type.BOOLEAN_TYPE, null);
}
e.declare_field(Constants.PRIVATE_FINAL_STATIC, THREAD_CALLBACKS_FIELD, THREAD_LOCAL, null, null);
e.declare_field(Constants.PRIVATE_FINAL_STATIC, STATIC_CALLBACKS_FIELD, CALLBACK_ARRAY, null, null);
e.declare_field(Constants.PRIVATE_FINAL_STATIC, THREAD_CALLBACKS_FIELD, THREAD_LOCAL, null);
e.declare_field(Constants.PRIVATE_FINAL_STATIC, STATIC_CALLBACKS_FIELD, CALLBACK_ARRAY, null);
if (serialVersionUID != null) {
e.declare_field(Constants.PRIVATE_FINAL_STATIC, Constants.SUID_FIELD_NAME, Type.LONG_TYPE, serialVersionUID, null);
e.declare_field(Constants.PRIVATE_FINAL_STATIC, Constants.SUID_FIELD_NAME, Type.LONG_TYPE, serialVersionUID);
}
for (int i = 0; i < callbackTypes.length; i++) {
e.declare_field(Constants.ACC_PRIVATE, getCallbackField(i), callbackTypes[i], null, null);
e.declare_field(Constants.ACC_PRIVATE, getCallbackField(i), callbackTypes[i], null);
}
final Map<Method, MethodInfo> methodInfoMap = new HashMap<Method, MethodInfo>();
for (Method method : actualMethods) {
@@ -792,7 +792,7 @@ public class AdvancedEnhancer extends AbstractClassGenerator
}
private void emitGetCallback(ClassEmitter ce, int[] keys) {
final CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, GET_CALLBACK, null, null);
final CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, GET_CALLBACK, null);
e.load_this();
e.invoke_static_this(BIND_CALLBACKS);
e.load_this();
@@ -812,7 +812,7 @@ public class AdvancedEnhancer extends AbstractClassGenerator
}
private void emitSetCallback(ClassEmitter ce, int[] keys) {
final CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, SET_CALLBACK, null, null);
final CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, SET_CALLBACK, null);
e.load_this();
e.load_arg(1);
e.load_arg(0);
@@ -835,7 +835,7 @@ public class AdvancedEnhancer extends AbstractClassGenerator
}
private void emitSetCallbacks(ClassEmitter ce) {
CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, SET_CALLBACKS, null, null);
CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, SET_CALLBACKS, null);
e.load_this();
e.load_arg(0);
for (int i = 0; i < callbackTypes.length; i++) {
@@ -849,7 +849,7 @@ public class AdvancedEnhancer extends AbstractClassGenerator
}
private void emitGetCallbacks(ClassEmitter ce) {
CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, GET_CALLBACKS, null, null);
CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, GET_CALLBACKS, null);
e.load_this();
e.invoke_static_this(BIND_CALLBACKS);
e.load_this();
@@ -867,7 +867,7 @@ public class AdvancedEnhancer extends AbstractClassGenerator
}
private void emitNewInstanceCallbacks(ClassEmitter ce) {
CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, NEW_INSTANCE, null, null);
CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, NEW_INSTANCE, null);
e.load_arg(0);
e.invoke_static_this(SET_THREAD_CALLBACKS);
emitCommonNewInstance(e);
@@ -884,7 +884,7 @@ public class AdvancedEnhancer extends AbstractClassGenerator
}
private void emitNewInstanceCallback(ClassEmitter ce) {
CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, SINGLE_NEW_INSTANCE, null, null);
CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, SINGLE_NEW_INSTANCE, null);
switch (callbackTypes.length) {
case 0:
// TODO: make sure Callback is null
@@ -906,7 +906,7 @@ public class AdvancedEnhancer extends AbstractClassGenerator
}
private void emitNewInstanceMultiarg(ClassEmitter ce, List constructors) {
final CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, MULTIARG_NEW_INSTANCE, null, null);
final CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC, MULTIARG_NEW_INSTANCE, null);
e.load_arg(2);
e.invoke_static_this(SET_THREAD_CALLBACKS);
e.new_instance_this();
@@ -974,6 +974,9 @@ public class AdvancedEnhancer extends AbstractClassGenerator
se.putfield(THREAD_CALLBACKS_FIELD);
CallbackGenerator.Context context = new CallbackGenerator.Context() {
public ClassLoader getClassLoader() {
return AdvancedEnhancer.this.getClassLoader();
}
public int getOriginalModifiers(MethodInfo method) {
return originalModifiers.get(method);
}
@@ -1028,7 +1031,6 @@ public class AdvancedEnhancer extends AbstractClassGenerator
private void emitSetThreadCallbacks(ClassEmitter ce) {
CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC | Constants.ACC_STATIC,
SET_THREAD_CALLBACKS,
null,
null);
e.getfield(THREAD_CALLBACKS_FIELD);
e.load_arg(0);
@@ -1040,7 +1042,6 @@ public class AdvancedEnhancer extends AbstractClassGenerator
private void emitSetStaticCallbacks(ClassEmitter ce) {
CodeEmitter e = ce.begin_method(Constants.ACC_PUBLIC | Constants.ACC_STATIC,
SET_STATIC_CALLBACKS,
null,
null);
e.load_arg(0);
e.putfield(STATIC_CALLBACKS_FIELD);
@@ -1065,7 +1066,6 @@ public class AdvancedEnhancer extends AbstractClassGenerator
private void emitBindCallbacks(ClassEmitter ce) {
CodeEmitter e = ce.begin_method(Constants.PRIVATE_FINAL_STATIC,
BIND_CALLBACKS,
null,
null);
Local me = e.make_local();
e.load_arg(0);
+1
View File
@@ -8,6 +8,7 @@
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="module" module-name="dom-openapi" exported="" />
<orderEntry type="library" name="asm" level="project" />
<orderEntry type="library" name="CGLIB" level="project" />
<orderEntry type="module" module-name="resources" />
<orderEntry type="library" name="Xerces" level="project" />