[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