You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2010/03/27 21:24:02 UTC

svn commit: r928261 - in /tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5: internal/services/TapestryAOPStackFrameAnalyzer.java services/TapestryModule.java

Author: hlship
Date: Sat Mar 27 20:24:01 2010
New Revision: 928261

URL: http://svn.apache.org/viewvc?rev=928261&view=rev
Log:
TAP5-1085: The ExceptionReporter should be configured to mark more of the Tapestry generated classes (used for method & field access and method advice) as hidden by default

Added:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestryAOPStackFrameAnalyzer.java   (with props)
Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java

Added: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestryAOPStackFrameAnalyzer.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestryAOPStackFrameAnalyzer.java?rev=928261&view=auto
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestryAOPStackFrameAnalyzer.java (added)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestryAOPStackFrameAnalyzer.java Sat Mar 27 20:24:01 2010
@@ -0,0 +1,61 @@
+// Copyright 2010 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry5.internal.services;
+
+import org.apache.tapestry5.services.StackTraceElementAnalyzer;
+import org.apache.tapestry5.services.StackTraceElementClassConstants;
+
+/**
+ * Encapsulates a number of tests for identifying stack frames that are a side-effect
+ * of various Tapestry Aspect Oriented Programming and other code generation behaviors.
+ * 
+ * @since 5.2.0
+ */
+public class TapestryAOPStackFrameAnalyzer implements StackTraceElementAnalyzer
+{
+    private static final String[] SYNTHETIC_METHOD_PREFIXES = new String[]
+    { "_$get_", "_$set_", "_$readaccess_", "_$writeaccess_" };
+
+    public String classForFrame(StackTraceElement frame)
+    {
+        if (omit(frame))
+            return StackTraceElementClassConstants.OMITTED;
+
+        return null;
+    }
+
+    private boolean omit(StackTraceElement frame)
+    {
+        // $FieldAccess class in root package is generated
+
+        if (frame.getClassName().startsWith("$FieldAccess_"))
+            return true;
+
+        if (frame.getMethodName().equals("invoke") && frame.getClassName().contains("$MethodAccess_"))
+            return true;
+
+        if (frame.getMethodName().equals("invokeAdvisedMethod") && frame.getClassName().contains("$invocation_"))
+            return true;
+
+        for (String prefix : SYNTHETIC_METHOD_PREFIXES)
+        {
+            if (frame.getMethodName().startsWith(prefix))
+                return true;
+        }
+
+        return false;
+    }
+
+}

Propchange: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestryAOPStackFrameAnalyzer.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java?rev=928261&r1=928260&r2=928261&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java Sat Mar 27 20:24:01 2010
@@ -2685,7 +2685,7 @@ public final class TapestryModule
     }
 
     /**
-     * Adds two analyzers:
+     * Contributes:
      * <dl>
      * <dt>Application</dt>
      * <dd>Checks for classes in the application package</dd>
@@ -2693,6 +2693,8 @@ public final class TapestryModule
      * <dd>Checks for classes that appear to be generated proxies.</dd>
      * <dt>SunReflect</dt>
      * <dd>Checks for <code>sun.reflect</code> (which are omitted)
+     * <dt>TapestryAOP</dt>
+     * <dd>Omits stack frames for classes related to Tapestry AOP (such as advice, etc.)</dd>
      * </dl>
      * 
      * @since 5.1.0.0
@@ -2705,6 +2707,7 @@ public final class TapestryModule
         configuration.add("Synthetic", new SyntheticStackTraceElementAnalyzer(), "before:Application");
         configuration.add("SunReflect", new PrefixCheckStackTraceElementAnalyzer(
                 StackTraceElementClassConstants.OMITTED, "sun.reflect."));
+        configuration.addInstance("TapestryAOP", TapestryAOPStackFrameAnalyzer.class, "before:Application");
     }
 
     /**