You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2012/01/26 19:07:47 UTC

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

Author: hlship
Date: Thu Jan 26 18:07:46 2012
New Revision: 1236335

URL: http://svn.apache.org/viewvc?rev=1236335&view=rev
Log:
TAP5-1832: Tapestry could do an even better job of filtering unnecessary stack frames from the exception report

Modified:
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestryAOPStackFrameAnalyzer.java
    tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/services/TapestryModule.java

Modified: 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=1236335&r1=1236334&r2=1236335&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestryAOPStackFrameAnalyzer.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/services/TapestryAOPStackFrameAnalyzer.java Thu Jan 26 18:07:46 2012
@@ -1,4 +1,4 @@
-// Copyright 2010 The Apache Software Foundation
+// Copyright 2010, 2012 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.
@@ -20,13 +20,13 @@ import org.apache.tapestry5.services.Sta
 /**
  * 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_" };
+            {"conduit_get_", "conduit_set_", "reject_field_change_", "shim_set_", "shim_get_"};
 
     public String classForFrame(StackTraceElement frame)
     {
@@ -38,16 +38,25 @@ public class TapestryAOPStackFrameAnalyz
 
     private boolean omit(StackTraceElement frame)
     {
-        // $FieldAccess class in root package is generated
-
-        if (frame.getClassName().startsWith("$FieldAccess_"))
+        if (frame.getClassName().equals("org.apache.tapestry5.internal.plastic.MethodHandleImpl"))
+        {
             return true;
+        }
 
         if (frame.getMethodName().equals("invoke") && frame.getClassName().contains("$MethodAccess_"))
+        {
             return true;
+        }
 
-        if (frame.getMethodName().equals("invokeAdvisedMethod") && frame.getClassName().contains("$invocation_"))
+        if (frame.getMethodName().equals("proceedToAdvisedMethod") && frame.getClassName().contains("$Invocation_"))
+        {
             return true;
+        }
+
+        if (frame.getMethodName().equals("invoke") && frame.getClassName().contains("$Shim_"))
+        {
+            return true;
+        }
 
         for (String prefix : SYNTHETIC_METHOD_PREFIXES)
         {

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=1236335&r1=1236334&r2=1236335&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 Thu Jan 26 18:07:46 2012
@@ -2592,6 +2592,8 @@ public final class TapestryModule
      * <dd>Omits stack frames for classes related to Tapestry AOP (such as advice, etc.)</dd>
      * <dt>OperationTracker</dt>
      * <dd>Omits stack frames related to {@link OperationTracker}</dd>
+     * <dt>Access</dt>
+     * <dd>Omits tack frames used to provide with access to container class private members</dd>
      * </dl>
      *
      * @since 5.1.0.0
@@ -2599,15 +2601,19 @@ public final class TapestryModule
     public static void contributeMasterStackTraceElementAnalyzer(
             OrderedConfiguration<StackTraceElementAnalyzer> configuration)
     {
-        configuration.addInstance("Application", ApplicationStackTraceElementAnalyzer.class);
-        configuration.add("Proxies", new ProxiesStackTraceElementAnalyzer(), "before:Application");
-        configuration.add("Synthetic", new SyntheticStackTraceElementAnalyzer(), "before:Application");
+        configuration.addInstance("TapestryAOP", TapestryAOPStackFrameAnalyzer.class);
+        configuration.add("Proxies", new ProxiesStackTraceElementAnalyzer());
+        configuration.add("Synthetic", new SyntheticStackTraceElementAnalyzer());
         configuration.add("SunReflect", new PrefixCheckStackTraceElementAnalyzer(
                 StackTraceElementClassConstants.OMITTED, "sun.reflect."));
-        configuration.addInstance("TapestryAOP", TapestryAOPStackFrameAnalyzer.class, "before:Application");
-        configuration.add("OperationTracker", new RegexpStackTraceElementAnalyzer(Pattern.compile("internal\\.(RegistryImpl|PerThreadOperationTracker|OperationTrackerImpl)\\.invoke\\("), StackTraceElementClassConstants.OMITTED));
+        configuration.add("OperationTracker", new RegexpStackTraceElementAnalyzer(Pattern.compile("internal\\.(RegistryImpl|PerThreadOperationTracker|OperationTrackerImpl).*(run|invoke)\\("), StackTraceElementClassConstants.OMITTED));
+        configuration.add("Access", new RegexpStackTraceElementAnalyzer(Pattern.compile("\\.access\\$\\d+\\("), StackTraceElementClassConstants.OMITTED));
+
+        configuration.addInstance("Application", ApplicationStackTraceElementAnalyzer.class);
+
     }
 
+
     /**
      * Advises the {@link org.apache.tapestry5.services.messages.ComponentMessagesSource} service so
      * that the creation