[jboss-cvs] JBossAS SVN: r58295 - projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Nov 13 08:38:24 EST 2006
Author: kabir.khan at jboss.com
Date: 2006-11-13 08:38:21 -0500 (Mon, 13 Nov 2006)
New Revision: 58295
Modified:
projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyFactory.java
projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ProxyTemplate.java
Log:
[JBAOP-306] Fix NPE for ctors calling methods causes NPE when using AOP/MC proxies
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyFactory.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyFactory.java 2006-11-13 13:34:57 UTC (rev 58294)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ContainerProxyFactory.java 2006-11-13 13:38:21 UTC (rev 58295)
@@ -50,7 +50,6 @@
import org.jboss.aop.MethodInfo;
import org.jboss.aop.instrument.TransformerCommon;
import org.jboss.aop.introduction.InterfaceIntroduction;
-import org.jboss.aop.metadata.SimpleMetaData;
import org.jboss.aop.util.JavassistMethodHashing;
@@ -209,6 +208,7 @@
proxy.addInterface(interfaze);
}
+ addFieldFromTemplate(template, "_proxy_initialised");
ensureDefaultConstructor(superclass, proxy);
addFieldFromTemplate(template, "mixins");
@@ -358,29 +358,43 @@
superCall.append(", ");
}
- if (!params[i].isPrimitive())
- {
- superCall.append("null");
- }
- else
- {
- if (params[i].equals(CtClass.booleanType)) superCall.append("false");
- else if (params[i].equals(CtClass.charType)) superCall.append("'0'");
- else if (params[i].equals(CtClass.byteType)) superCall.append("0");
- else if (params[i].equals(CtClass.shortType)) superCall.append("0");
- else if (params[i].equals(CtClass.intType)) superCall.append("0");
- else if (params[i].equals(CtClass.longType)) superCall.append("0L");
- else if (params[i].equals(CtClass.floatType)) superCall.append("0f");
- else if (params[i].equals(CtClass.doubleType)) superCall.append("0d");
- }
+ superCall.append(getNullType(params[i]));
}
superCall.append(");");
+ superCall.append("_proxy_initialised = true;");
CtConstructor ctor = CtNewConstructor.make(EMPTY_CTCLASS_ARRAY, EMPTY_CTCLASS_ARRAY, "{" + superCall.toString() + "}", proxy);
proxy.addConstructor(ctor);
}
+ else
+ {
+ CtConstructor ctor = CtNewConstructor.defaultConstructor(proxy);
+ ctor.setBody("{_proxy_initialised = true;}");
+ proxy.addConstructor(ctor);
+ }
}
+
+ private String getNullType(CtClass clazz)
+ {
+ if (!clazz.isPrimitive())
+ {
+ return "null";
+ }
+ else
+ {
+ if (clazz.equals(CtClass.booleanType)) return "false";
+ else if (clazz.equals(CtClass.charType)) return "'0'";
+ else if (clazz.equals(CtClass.byteType)) return "0";
+ else if (clazz.equals(CtClass.shortType)) return "0";
+ else if (clazz.equals(CtClass.intType)) return "0";
+ else if (clazz.equals(CtClass.longType)) return "0L";
+ else if (clazz.equals(CtClass.floatType)) return "0f";
+ else if (clazz.equals(CtClass.doubleType)) return "0d";
+ else return "";//void
+ }
+
+ }
private void addMethodsAndMixins()throws Exception
{
@@ -550,6 +564,9 @@
if (m.getParameterTypes().length > 0) args = "$args";
String code = "{ " +
+ " if (_proxy_initialised == false) {" +
+ " return " + getNullType(m.getReturnType()) + ";" +
+ " }" +
" try{" +
" org.jboss.aop.MethodInfo mi = currentAdvisor.getMethodInfo(" + hash.longValue() + "L); " +
" if (mi == null) " +
Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ProxyTemplate.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ProxyTemplate.java 2006-11-13 13:34:57 UTC (rev 58294)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/proxy/container/ProxyTemplate.java 2006-11-13 13:38:21 UTC (rev 58295)
@@ -42,6 +42,7 @@
private transient Advisor classAdvisor;
private transient InstanceAdvisor instanceAdvisor;
protected volatile transient Advisor currentAdvisor;
+ protected boolean _proxy_initialised;
private Object delegate;
private Object[] mixins; // Do not remove this
More information about the jboss-cvs-commits
mailing list