[jboss-cvs] JBossAS SVN: r110615 - projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/standalone.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Feb 11 03:45:04 EST 2011
Author: jiwils
Date: 2011-02-11 03:45:04 -0500 (Fri, 11 Feb 2011)
New Revision: 110615
Modified:
projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/standalone/XmlReport.java
Log:
Fix for JBAOP-800. aopc report generation no longer throws an ArrayIndexOutOfBoundsException.
Modified: projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/standalone/XmlReport.java
===================================================================
--- projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/standalone/XmlReport.java 2011-02-11 08:41:11 UTC (rev 110614)
+++ projects/aop/branches/Branch_2_2/aop/src/main/java/org/jboss/aop/standalone/XmlReport.java 2011-02-11 08:45:04 UTC (rev 110615)
@@ -23,15 +23,30 @@
import gnu.trove.TLongObjectHashMap;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+
import org.jboss.aop.Advisor;
import org.jboss.aop.AspectManager;
import org.jboss.aop.CallerConstructorInfo;
import org.jboss.aop.CallerMethodInfo;
import org.jboss.aop.ClassAdvisor;
+import org.jboss.aop.ConstructorInfo;
+import org.jboss.aop.FieldInfo;
import org.jboss.aop.MethodInfo;
import org.jboss.aop.advice.AbstractAdvice;
import org.jboss.aop.advice.AdviceBinding;
import org.jboss.aop.advice.CFlowInterceptor;
+import org.jboss.aop.advice.GeneratedAdvisorInterceptor;
import org.jboss.aop.advice.Interceptor;
import org.jboss.aop.introduction.InterfaceIntroduction;
import org.jboss.aop.metadata.ConstructorMetaData;
@@ -40,18 +55,6 @@
import org.jboss.aop.metadata.MethodMetaData;
import org.jboss.aop.metadata.SimpleMetaData;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.io.Writer;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Map;
-
/**
* Comment
*
@@ -136,13 +139,13 @@
indenter(pw, indent);
pw.println("<class name=\"" + classname + "\">");
ClassAdvisor advisor = (ClassAdvisor) entry.getValue();
- outputAdvisor(indent + 1, pw, advisor, classname);
+ outputAdvisor(indent + 1, pw, advisor, root, classname);
indenter(pw, indent);
pw.println("</class>");
}
}
- public static void outputAdvisor(int indent, PrintWriter pw, ClassAdvisor advisor, String baseName)
+ public static void outputAdvisor(int indent, PrintWriter pw, ClassAdvisor advisor, Package pkg, String baseName)
{
ArrayList<InterfaceIntroduction> introductions = advisor.getInterfaceIntroductions();
if (introductions != null && introductions.size() > 0)
@@ -201,7 +204,17 @@
for (int i = 0; i < advisor.getConstructors().length; i++)
{
Constructor<?> con = advisor.getConstructors()[i];
- Interceptor[] chain = advisor.getConstructorInfos()[i].getInterceptors();
+ Interceptor[] chain = null;
+
+ for (ConstructorInfo cinfo : advisor.getConstructorInfos())
+ {
+ if (cinfo.getConstructor() != null && cinfo.getConstructor().equals(con))
+ {
+ chain = cinfo.getInterceptors();
+ break;
+ }
+ }
+
HashMap<String, TLongObjectHashMap> methodCallers = advisor.getMethodCalledByConInterceptors()[i];
HashMap<String, TLongObjectHashMap> conCallers = advisor.getConCalledByConInterceptors()[i];
@@ -235,7 +248,16 @@
for (int i = 0; i < advisor.getAdvisedFields().length; i++)
{
Field f = advisor.getAdvisedFields()[i];
- Interceptor[] chain = advisor.getFieldReadInfos()[i].getInterceptors();
+ Interceptor[] chain = null;
+ for (FieldInfo finfo : advisor.getFieldReadInfos())
+ {
+ if (finfo.getField() != null && finfo.getField().equals(f))
+ {
+ chain = finfo.getInterceptors();
+ break;
+ }
+ }
+
if (chain != null && chain.length > 0)
{
indenter(pw, indent);
@@ -255,7 +277,15 @@
for (int i = 0; i < advisor.getAdvisedFields().length; i++)
{
Field f = advisor.getAdvisedFields()[i];
- Interceptor[] chain = advisor.getFieldReadInfos()[i].getInterceptors();
+ Interceptor[] chain = null;
+ for (FieldInfo finfo : advisor.getFieldWriteInfos())
+ {
+ if (finfo.getField() != null && finfo.getField().equals(f))
+ {
+ chain = finfo.getInterceptors();
+ break;
+ }
+ }
if (chain != null && chain.length > 0)
{
indenter(pw, indent);
@@ -276,7 +306,8 @@
for (int i = 0; i < keys.length; i++)
{
long key = keys[i];
- MethodInfo method = (MethodInfo) advisor.getMethodInterceptors().get(key);
+ MethodInfo method = advisor.getMethodInfo(key);
+ System.out.println("info " + method + " for " + key);
@SuppressWarnings("unchecked")
HashMap methodCallers = (HashMap) advisor.getMethodCalledByMethodInterceptors().get(key);
@SuppressWarnings("unchecked")
@@ -386,26 +417,44 @@
indent++;
for (int i = 0; i < chain.length; i++)
{
- if (chain[i] instanceof AbstractAdvice)
- {
- indenter(pw, indent);
- pw.println("<advice name=\"" + chain[i].getName() + "\"/>");
- }
- else if (chain[i] instanceof CFlowInterceptor)
- {
- indenter(pw, indent);
- pw.println("<cflow expr=\"" + ((CFlowInterceptor) chain[i]).getCFlowString() + "\"/>");
- }
- else
- {
- indenter(pw, indent);
- pw.println("<interceptor class=\"" + chain[i].getClass().getName() + "\"/>");
- }
+ outputAdvice(indent, pw, chain[i]);
}
indent--;
indenter(pw, indent);
pw.println("</interceptors>");
}
+
+ private static void outputAdvice(int indent, PrintWriter pw, Interceptor icptr)
+ {
+ if (icptr instanceof GeneratedAdvisorInterceptor)
+ {
+ GeneratedAdvisorInterceptor gi = (GeneratedAdvisorInterceptor)icptr;
+ indenter(pw, indent);
+
+ String cflow = gi.getCFlowString() != null ? " cflow=\"" + gi.getCFlowString() + "\"" : "";
+
+ if (gi.isInterceptor())
+ pw.println("<interceptor class=\"" + gi.getName() + "\"" + cflow + "/>");
+ else
+ pw.println("<advice name=\"" + gi.getName() + "\" advice=\"" + gi.getAdviceName() + "\"" + cflow + "/>");
+
+ }
+ else if (icptr instanceof AbstractAdvice)
+ {
+ indenter(pw, indent);
+ pw.println("<advice name=\"" + icptr.getName() + "\"/>");
+ }
+ else if (icptr instanceof CFlowInterceptor)
+ {
+ indenter(pw, indent);
+ pw.println("<cflow expr=\"" + ((CFlowInterceptor) icptr).getCFlowString() + "\"/>");
+ }
+ else
+ {
+ indenter(pw, indent);
+ pw.println("<interceptor class=\"" + icptr.getClass().getName() + "\"/>");
+ }
+ }
public static void outputUnboundBindings(int indent, PrintWriter pw)
{
More information about the jboss-cvs-commits
mailing list