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));
}
}
+
}