summaryrefslogtreecommitdiffstats
path: root/src/main/javassist/expr/Expr.java
diff options
context:
space:
mode:
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2005-01-09 17:15:25 +0000
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2005-01-09 17:15:25 +0000
commit91895bb38cf5cf4feaf8dcb3ba76555d67d765db (patch)
treec107f606ed972dec2956b335cadc84437114c085 /src/main/javassist/expr/Expr.java
parentb28caee37389d844b4d9c537f031a5bc294c89c0 (diff)
downloadjavassist-91895bb38cf5cf4feaf8dcb3ba76555d67d765db.tar.gz
javassist-91895bb38cf5cf4feaf8dcb3ba76555d67d765db.zip
Reformatted the soruce files modified by Bill.
The "created* field in MethodInfo has been commented out since (maybe) it is not used at all. git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@150 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
Diffstat (limited to 'src/main/javassist/expr/Expr.java')
-rw-r--r--src/main/javassist/expr/Expr.java469
1 files changed, 225 insertions, 244 deletions
diff --git a/src/main/javassist/expr/Expr.java b/src/main/javassist/expr/Expr.java
index 8d2b75ab..3f47054a 100644
--- a/src/main/javassist/expr/Expr.java
+++ b/src/main/javassist/expr/Expr.java
@@ -41,250 +41,231 @@ import java.util.LinkedList;
/**
* Expression.
*/
-public abstract class Expr implements Opcode
-{
- int currentPos;
- CodeIterator iterator;
- CtClass thisClass;
- MethodInfo thisMethod;
-
- boolean edited;
- int maxLocals, maxStack;
-
- static final String javaLangObject = "java.lang.Object";
-
- /**
- * Undocumented constructor. Do not use; internal-use only.
- */
- protected Expr(int pos, CodeIterator i, CtClass declaring, MethodInfo m)
- {
- currentPos = pos;
- iterator = i;
- thisClass = declaring;
- thisMethod = m;
- }
-
- protected final ConstPool getConstPool()
- {
- return thisMethod.getConstPool();
- }
-
- protected final boolean edited()
- {
- return edited;
- }
-
- protected final int locals()
- {
- return maxLocals;
- }
-
- protected final int stack()
- {
- return maxStack;
- }
-
- /**
- * Returns true if this method is static.
- */
- protected final boolean withinStatic()
- {
- return (thisMethod.getAccessFlags() & AccessFlag.STATIC) != 0;
- }
-
- /**
- * Returns the constructor or method containing the expression.
- */
- public CtBehavior where()
- {
- MethodInfo mi = thisMethod;
- CtBehavior[] cb = thisClass.getDeclaredBehaviors();
- for (int i = cb.length - 1; i >= 0; --i)
- if (cb[i].getMethodInfo2() == mi)
- return cb[i];
-
- CtConstructor init = thisClass.getClassInitializer();
- if (init != null && init.getMethodInfo2() == mi)
- return init;
-
- // todo REVISIT I needed to add this because for some reason mi != cb[i]
- for (int i = cb.length - 1; i >= 0; --i)
- {
- if (thisMethod.getName().equals(cb[i].getMethodInfo2().getName()) && thisMethod.getDescriptor().equals(cb[i].getMethodInfo2().getDescriptor()))
- {
- return cb[i];
- }
- }
-
- String msg = "fatal: not found";
- throw new RuntimeException(msg);
- }
-
- /**
- * Returns the list of exceptions that the expression may throw.
- * This list includes both the exceptions that the try-catch statements
- * including the expression can catch and the exceptions that
- * the throws declaration allows the method to throw.
- */
- public CtClass[] mayThrow()
- {
- ClassPool pool = thisClass.getClassPool();
- ConstPool cp = thisMethod.getConstPool();
- LinkedList list = new LinkedList();
- try
- {
- CodeAttribute ca = thisMethod.getCodeAttribute();
- ExceptionTable et = ca.getExceptionTable();
- int pos = currentPos;
- int n = et.size();
- for (int i = 0; i < n; ++i)
- if (et.startPc(i) <= pos && pos < et.endPc(i))
- {
- int t = et.catchType(i);
- if (t > 0)
- try
- {
- addClass(list, pool.get(cp.getClassInfo(t)));
- }
- catch (NotFoundException e)
- {
- }
+public abstract class Expr implements Opcode {
+ int currentPos;
+
+ CodeIterator iterator;
+
+ CtClass thisClass;
+
+ MethodInfo thisMethod;
+
+ boolean edited;
+
+ int maxLocals, maxStack;
+
+ static final String javaLangObject = "java.lang.Object";
+
+ /**
+ * Undocumented constructor. Do not use; internal-use only.
+ */
+ protected Expr(int pos, CodeIterator i, CtClass declaring, MethodInfo m) {
+ currentPos = pos;
+ iterator = i;
+ thisClass = declaring;
+ thisMethod = m;
+ }
+
+ protected final ConstPool getConstPool() {
+ return thisMethod.getConstPool();
+ }
+
+ protected final boolean edited() {
+ return edited;
+ }
+
+ protected final int locals() {
+ return maxLocals;
+ }
+
+ protected final int stack() {
+ return maxStack;
+ }
+
+ /**
+ * Returns true if this method is static.
+ */
+ protected final boolean withinStatic() {
+ return (thisMethod.getAccessFlags() & AccessFlag.STATIC) != 0;
+ }
+
+ /**
+ * Returns the constructor or method containing the expression.
+ */
+ public CtBehavior where() {
+ MethodInfo mi = thisMethod;
+ CtBehavior[] cb = thisClass.getDeclaredBehaviors();
+ for (int i = cb.length - 1; i >= 0; --i)
+ if (cb[i].getMethodInfo2() == mi)
+ return cb[i];
+
+ CtConstructor init = thisClass.getClassInitializer();
+ if (init != null && init.getMethodInfo2() == mi)
+ return init;
+
+ /* getDeclaredBehaviors() returns a list of methods/constructors.
+ * Although the list is cached in a CtClass object, it might be
+ * recreated for some reason. Thus, the member name and the signature
+ * must be also checked.
+ */
+ for (int i = cb.length - 1; i >= 0; --i) {
+ if (thisMethod.getName().equals(cb[i].getMethodInfo2().getName())
+ && thisMethod.getDescriptor()
+ .equals(cb[i].getMethodInfo2().getDescriptor())) {
+ return cb[i];
}
- }
- catch (NullPointerException e)
- {
- }
-
- ExceptionsAttribute ea = thisMethod.getExceptionsAttribute();
- if (ea != null)
- {
- String[] exceptions = ea.getExceptions();
- if (exceptions != null)
- {
- int n = exceptions.length;
+ }
+
+ throw new RuntimeException("fatal: not found");
+ }
+
+ /**
+ * Returns the list of exceptions that the expression may throw. This list
+ * includes both the exceptions that the try-catch statements including the
+ * expression can catch and the exceptions that the throws declaration
+ * allows the method to throw.
+ */
+ public CtClass[] mayThrow() {
+ ClassPool pool = thisClass.getClassPool();
+ ConstPool cp = thisMethod.getConstPool();
+ LinkedList list = new LinkedList();
+ try {
+ CodeAttribute ca = thisMethod.getCodeAttribute();
+ ExceptionTable et = ca.getExceptionTable();
+ int pos = currentPos;
+ int n = et.size();
for (int i = 0; i < n; ++i)
- try
- {
- addClass(list, pool.get(exceptions[i]));
- }
- catch (NotFoundException e)
- {
- }
- }
- }
-
- return (CtClass[]) list.toArray(new CtClass[list.size()]);
- }
-
- private static void addClass(LinkedList list, CtClass c)
- {
- Iterator it = list.iterator();
- while (it.hasNext())
- if (it.next() == c)
+ if (et.startPc(i) <= pos && pos < et.endPc(i)) {
+ int t = et.catchType(i);
+ if (t > 0)
+ try {
+ addClass(list, pool.get(cp.getClassInfo(t)));
+ }
+ catch (NotFoundException e) {
+ }
+ }
+ }
+ catch (NullPointerException e) {
+ }
+
+ ExceptionsAttribute ea = thisMethod.getExceptionsAttribute();
+ if (ea != null) {
+ String[] exceptions = ea.getExceptions();
+ if (exceptions != null) {
+ int n = exceptions.length;
+ for (int i = 0; i < n; ++i)
+ try {
+ addClass(list, pool.get(exceptions[i]));
+ }
+ catch (NotFoundException e) {
+ }
+ }
+ }
+
+ return (CtClass[])list.toArray(new CtClass[list.size()]);
+ }
+
+ private static void addClass(LinkedList list, CtClass c) {
+ Iterator it = list.iterator();
+ while (it.hasNext())
+ if (it.next() == c)
+ return;
+
+ list.add(c);
+ }
+
+ /**
+ * Returns the index of the bytecode corresponding to the expression. It is
+ * the index into the byte array containing the Java bytecode that
+ * implements the method.
+ */
+ public int indexOfBytecode() {
+ return currentPos;
+ }
+
+ /**
+ * Returns the line number of the source line containing the expression.
+ *
+ * @return -1 if this information is not available.
+ */
+ public int getLineNumber() {
+ return thisMethod.getLineNumber(currentPos);
+ }
+
+ /**
+ * Returns the source file containing the expression.
+ *
+ * @return null if this information is not available.
+ */
+ public String getFileName() {
+ ClassFile cf = thisClass.getClassFile2();
+ if (cf == null)
+ return null;
+ else
+ return cf.getSourceFile();
+ }
+
+ static final boolean checkResultValue(CtClass retType, String prog)
+ throws CannotCompileException {
+ /*
+ * Is $_ included in the source code?
+ */
+ boolean hasIt = (prog.indexOf(Javac.resultVarName) >= 0);
+ if (!hasIt && retType != CtClass.voidType)
+ throw new CannotCompileException(
+ "the resulting value is not stored in "
+ + Javac.resultVarName);
+
+ return hasIt;
+ }
+
+ /*
+ * If isStaticCall is true, null is assigned to $0. So $0 must be declared
+ * by calling Javac.recordParams().
+ *
+ * After executing this method, the current stack depth might be less than
+ * 0.
+ */
+ static final void storeStack(CtClass[] params, boolean isStaticCall,
+ int regno, Bytecode bytecode) {
+ storeStack0(0, params.length, params, regno + 1, bytecode);
+ if (isStaticCall)
+ bytecode.addOpcode(ACONST_NULL);
+
+ bytecode.addAstore(regno);
+ }
+
+ private static void storeStack0(int i, int n, CtClass[] params, int regno,
+ Bytecode bytecode) {
+ if (i >= n)
return;
-
- list.add(c);
- }
-
- /**
- * Returns the index of the bytecode corresponding to the
- * expression.
- * It is the index into the byte array containing the Java bytecode
- * that implements the method.
- */
- public int indexOfBytecode()
- {
- return currentPos;
- }
-
- /**
- * Returns the line number of the source line containing the
- * expression.
- *
- * @return -1 if this information is not available.
- */
- public int getLineNumber()
- {
- return thisMethod.getLineNumber(currentPos);
- }
-
- /**
- * Returns the source file containing the expression.
- *
- * @return null if this information is not available.
- */
- public String getFileName()
- {
- ClassFile cf = thisClass.getClassFile2();
- if (cf == null)
- return null;
- else
- return cf.getSourceFile();
- }
-
- static final boolean checkResultValue(CtClass retType, String prog)
- throws CannotCompileException
- {
- /* Is $_ included in the source code?
- */
- boolean hasIt = (prog.indexOf(Javac.resultVarName) >= 0);
- if (!hasIt && retType != CtClass.voidType)
- throw new CannotCompileException("the resulting value is not stored in "
- + Javac.resultVarName);
-
- return hasIt;
- }
-
- /* If isStaticCall is true, null is assigned to $0. So $0 must
- * be declared by calling Javac.recordParams().
- *
- * After executing this method, the current stack depth might
- * be less than 0.
- */
- static final void storeStack(CtClass[] params, boolean isStaticCall,
- int regno, Bytecode bytecode)
- {
- storeStack0(0, params.length, params, regno + 1, bytecode);
- if (isStaticCall)
- bytecode.addOpcode(ACONST_NULL);
-
- bytecode.addAstore(regno);
- }
-
- private static void storeStack0(int i, int n, CtClass[] params,
- int regno, Bytecode bytecode)
- {
- if (i >= n)
- return;
- else
- {
- CtClass c = params[i];
- int size;
- if (c instanceof CtPrimitiveType)
- size = ((CtPrimitiveType) c).getDataSize();
- else
- size = 1;
-
- storeStack0(i + 1, n, params, regno + size, bytecode);
- bytecode.addStore(regno, c);
- }
- }
-
- protected void replace0(int pos, Bytecode bytecode, int size)
- throws BadBytecode
- {
- byte[] code = bytecode.get();
- edited = true;
- int gap = code.length - size;
- for (int i = 0; i < size; ++i)
- iterator.writeByte(NOP, pos + i);
-
- if (gap > 0)
- iterator.insertGap(pos, gap);
-
- iterator.write(code, pos);
- iterator.insert(bytecode.getExceptionTable(), pos);
- maxLocals = bytecode.getMaxLocals();
- maxStack = bytecode.getMaxStack();
- }
-}
+ else {
+ CtClass c = params[i];
+ int size;
+ if (c instanceof CtPrimitiveType)
+ size = ((CtPrimitiveType)c).getDataSize();
+ else
+ size = 1;
+
+ storeStack0(i + 1, n, params, regno + size, bytecode);
+ bytecode.addStore(regno, c);
+ }
+ }
+
+ protected void replace0(int pos, Bytecode bytecode, int size)
+ throws BadBytecode {
+ byte[] code = bytecode.get();
+ edited = true;
+ int gap = code.length - size;
+ for (int i = 0; i < size; ++i)
+ iterator.writeByte(NOP, pos + i);
+
+ if (gap > 0)
+ iterator.insertGap(pos, gap);
+
+ iterator.write(code, pos);
+ iterator.insert(bytecode.getExceptionTable(), pos);
+ maxLocals = bytecode.getMaxLocals();
+ maxStack = bytecode.getMaxStack();
+ }
+} \ No newline at end of file