You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mb...@apache.org on 2013/03/23 17:37:29 UTC

svn commit: r1460190 - in /commons/sandbox/weaver/trunk: modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/ processor/src/main/java/org/apache/commons/weaver/utils/

Author: mbenson
Date: Sat Mar 23 16:37:29 2013
New Revision: 1460190

URL: http://svn.apache.org/r1460190
Log:
extract Body

Added:
    commons/sandbox/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Body.java
      - copied, changed from r1460006, commons/sandbox/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Body.java
Removed:
    commons/sandbox/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Body.java
Modified:
    commons/sandbox/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java

Modified: commons/sandbox/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java?rev=1460190&r1=1460189&r2=1460190&view=diff
==============================================================================
--- commons/sandbox/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java (original)
+++ commons/sandbox/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Privilizer.java Sat Mar 23 16:37:29 2013
@@ -48,6 +48,7 @@ import org.apache.commons.lang3.StringUt
 import org.apache.commons.lang3.Validate;
 import org.apache.commons.lang3.text.StrBuilder;
 import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
+import org.apache.commons.weaver.utils.Body;
 
 /**
  * Handles weaving of methods annotated with {@link Privileged}.
@@ -449,22 +450,22 @@ public abstract class Privilizer<SELF ex
             propagatedParameters.add(f);
         }
         {
-            final StrBuilder constructor = new StrBuilder(simpleName).append('(');
+            final StrBuilder sig = new StrBuilder(simpleName).append('(');
             boolean sep = false;
-            final Body body = new Body();
+            final Body body = new Body(this, "adding to %s: %s", result.getName(), sig);
 
             for (final CtField fld : result.getDeclaredFields()) {
                 if (sep) {
-                    constructor.append(", ");
+                    sig.append(", ");
                 } else {
                     sep = true;
                 }
-                constructor.append(fld.getType().getName()).append(' ').append(fld.getName());
+                sig.append(fld.getType().getName()).append(' ').append(fld.getName());
                 body.appendLine("this.%1$s = %1$s;", fld.getName());
             }
-            constructor.append(") ").append(body.complete());
+            sig.append(") ").append(body.complete());
 
-            final String c = constructor.toString();
+            final String c = sig.toString();
             debug("Creating action constructor:");
             debug(c);
             result.addConstructor(CtNewConstructor.make(c, result));
@@ -474,7 +475,7 @@ public abstract class Privilizer<SELF ex
             if (exc) {
                 run.append("throws Exception ");
             }
-            final Body body = new Body();
+            final Body body = new Body(this, "add to %s: %s", result.getName(), run.toString());
             final CtClass rt = impl.getReturnType();
             final boolean isVoid = rt.equals(CtClass.voidType);
             if (!isVoid) {
@@ -540,7 +541,7 @@ public abstract class Privilizer<SELF ex
         debug("Copied %2$s %1$s.%3$s to %4$s %1$s.%5$s", type.getName(), accessLevel, toString(method),
             AccessLevel.PRIVATE, toString(impl));
 
-        final Body body = new Body();
+        final Body body = new Body(this, "new body of %s", toString(method));
         if (policy.isConditional()) {
             body.startBlock("if (%s)", policy.condition);
         }

Copied: commons/sandbox/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Body.java (from r1460006, commons/sandbox/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Body.java)
URL: http://svn.apache.org/viewvc/commons/sandbox/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Body.java?p2=commons/sandbox/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Body.java&p1=commons/sandbox/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Body.java&r1=1460006&r2=1460190&rev=1460190&view=diff
==============================================================================
--- commons/sandbox/weaver/trunk/modules/privilizer/weaver/src/main/java/org/apache/commons/weaver/privilizer/Body.java (original)
+++ commons/sandbox/weaver/trunk/processor/src/main/java/org/apache/commons/weaver/utils/Body.java Sat Mar 23 16:37:29 2013
@@ -13,30 +13,78 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
-package org.apache.commons.weaver.privilizer;
+package org.apache.commons.weaver.utils;
+
+import java.util.Formatter;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.Validate;
 import org.apache.commons.lang3.text.StrBuilder;
 
-class Body implements CharSequence {
+/**
+ * Represents a basic block level Java code construct for simple formatted code generation.
+ */
+public class Body implements CharSequence {
+    private static Logger getLogger(Object category) {
+        if (category == null) {
+            return Logger.getAnonymousLogger();
+        }
+        if (category instanceof CharSequence) {
+            return Logger.getLogger(category.toString());
+        }
+        return Logger.getLogger(category.getClass().getName());
+    }
+
+    private final Object category;
+    private final String message;
+    private final Object[] args;
     private final String indent = "  ";
     private final StrBuilder content = new StrBuilder();
     private int level = 0;
     private boolean lineStarted;
 
-    {
+    /**
+     * Create a new Body instance.
+     * 
+     * @param category
+     *            used for logging
+     * @param message
+     *            {@link Formatter} style
+     * @param args
+     *            to message
+     */
+    public Body(Object category, String message, Object... args) {
         startBlock();
+        this.category = category;
+        this.message = message;
+        this.args = args;
     }
 
+    /**
+     * @param index
+     * @return char
+     * @see CharSequence#charAt(int)
+     */
     public char charAt(int index) {
         return content.charAt(index);
     }
 
+    /**
+     * @return int
+     * @see CharSequence#length()
+     */
     public int length() {
         return content.length();
     }
 
+    /**
+     * @param start
+     * @param end
+     * @return CharSequence
+     * @see CharSequence#subSequence(int, int)
+     */
     public CharSequence subSequence(int start, int end) {
         return content.subSequence(start, end);
     }
@@ -46,36 +94,79 @@ class Body implements CharSequence {
         return content.toString();
     }
 
-    Body append(char c) {
+    /**
+     * Append a character.
+     * 
+     * @param c
+     * @return this
+     */
+    public Body append(char c) {
         content.append(c);
         return this;
     }
 
-    Body append(String format, Object... args) {
+    /**
+     * Append a formatted message.
+     * 
+     * @param format
+     * @param args
+     * @return this
+     * @see Formatter
+     */
+    public Body append(String format, Object... args) {
         prepare();
         content.append(String.format(format, args));
         return this;
     }
 
-    Body appendLine(String format, Object... args) {
+    /**
+     * Append a formatted line.
+     * 
+     * @param format
+     * @param args
+     * @return this
+     * @see Formatter
+     */
+    public Body appendLine(String format, Object... args) {
         return append(format, args).appendNewLine();
     }
 
-    Body appendNewLine() {
+    /**
+     * Append a platform-specific newline.
+     * 
+     * @return this
+     */
+    public Body appendNewLine() {
         content.appendNewLine();
         lineStarted = false;
         return this;
     }
 
-    Body complete() {
+    /**
+     * Complete this Body and, if enabled at FINE level, log it.
+     * 
+     * @return this
+     * @see Level
+     */
+    public Body complete() {
         try {
             return endBlock();
         } finally {
             Validate.validState(level == 0);
+            final Logger log = getLogger(category);
+            if (log.isLoggable(Level.FINE)) {
+                log.fine(String.format(message, args));
+                log.fine(toString());
+            }
         }
     }
 
-    Body endBlock() {
+    /**
+     * End the innermost open block and dedent.
+     * 
+     * @return this
+     */
+    public Body endBlock() {
         if (level < 1) {
             throw new IllegalStateException();
         }
@@ -85,7 +176,12 @@ class Body implements CharSequence {
         return this;
     }
 
-    Body startBlock() {
+    /**
+     * Start a new block and indent.
+     * 
+     * @return this
+     */
+    public Body startBlock() {
         if (lineStarted) {
             append(' ');
         }
@@ -93,7 +189,15 @@ class Body implements CharSequence {
         return append('{').appendNewLine();
     }
 
-    Body startBlock(String format, Object... args) {
+    /**
+     * Start a new block with some formatted text (e.g. if statement) and indent.
+     * 
+     * @param format
+     * @param args
+     * @return this
+     * @see Formatter
+     */
+    public Body startBlock(String format, Object... args) {
         append(format, args);
         return startBlock();
     }
@@ -104,4 +208,5 @@ class Body implements CharSequence {
             content.append(StringUtils.repeat(indent, level));
         }
     }
+
 }