aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/javassist/expr/FieldAccess.java
diff options
context:
space:
mode:
authorchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2003-04-23 17:08:37 +0000
committerchiba <chiba@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>2003-04-23 17:08:37 +0000
commitcdeddfd6fc34a06734f9fa525cf5c7437a6c8fb6 (patch)
tree0471a4d9b985b11969ecd6f521f660e3d468f1d1 /src/main/javassist/expr/FieldAccess.java
parentfb431982111b03608b888953f7ed8ba7e98f421c (diff)
downloadjavassist-cdeddfd6fc34a06734f9fa525cf5c7437a6c8fb6.tar.gz
javassist-cdeddfd6fc34a06734f9fa525cf5c7437a6c8fb6.zip
Changed the copyright notices and removed tab characters.
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@9 30ef5769-5b8d-40dd-aea6-55b5d6557bb3
Diffstat (limited to 'src/main/javassist/expr/FieldAccess.java')
-rw-r--r--src/main/javassist/expr/FieldAccess.java341
1 files changed, 165 insertions, 176 deletions
diff --git a/src/main/javassist/expr/FieldAccess.java b/src/main/javassist/expr/FieldAccess.java
index a524b07d..75382830 100644
--- a/src/main/javassist/expr/FieldAccess.java
+++ b/src/main/javassist/expr/FieldAccess.java
@@ -1,28 +1,17 @@
/*
- * This file is part of the Javassist toolkit.
+ * Javassist, a Java-bytecode translator toolkit.
+ * Copyright (C) 1999-2003 Shigeru Chiba. All Rights Reserved.
*
- * The contents of this file are subject to the Mozilla Public License
- * Version 1.1 (the "License"); you may not use this file except in
- * compliance with the License. You may obtain a copy of the License at
- * either http://www.mozilla.org/MPL/.
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
*
- * Software distributed under the License is distributed on an "AS IS"
- * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
- * the License for the specific language governing rights and limitations
- * under the License.
- *
- * The Original Code is Javassist.
- *
- * The Initial Developer of the Original Code is Shigeru Chiba. Portions
- * created by Shigeru Chiba are Copyright (C) 1999-2003 Shigeru Chiba.
- * All Rights Reserved.
- *
- * Contributor(s):
- *
- * The development of this software is supported in part by the PRESTO
- * program (Sakigake Kenkyu 21) of Japan Science and Technology Corporation.
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*/
-
package javassist.expr;
import javassist.*;
@@ -37,9 +26,9 @@ public class FieldAccess extends Expr {
int opcode;
FieldAccess(int pos, CodeIterator i, CtClass declaring, MethodInfo m,
- int op) {
- super(pos, i, declaring, m);
- opcode = op;
+ int op) {
+ super(pos, i, declaring, m);
+ opcode = op;
}
/**
@@ -52,75 +41,75 @@ public class FieldAccess extends Expr {
* Returns the line number of the source line containing the
* field access.
*
- * @return -1 if this information is not available.
+ * @return -1 if this information is not available.
*/
public int getLineNumber() {
- return super.getLineNumber();
+ return super.getLineNumber();
}
/**
* Returns the source file containing the field access.
*
- * @return null if this information is not available.
+ * @return null if this information is not available.
*/
public String getFileName() {
- return super.getFileName();
+ return super.getFileName();
}
/**
* Returns true if the field is static.
*/
public boolean isStatic() {
- return isStatic(opcode);
+ return isStatic(opcode);
}
static boolean isStatic(int c) {
- return c == Opcode.GETSTATIC || c == Opcode.PUTSTATIC;
+ return c == Opcode.GETSTATIC || c == Opcode.PUTSTATIC;
}
/**
* Returns true if the field is read.
*/
public boolean isReader() {
- return opcode == Opcode.GETFIELD || opcode == Opcode.GETSTATIC;
+ return opcode == Opcode.GETFIELD || opcode == Opcode.GETSTATIC;
}
/**
* Returns true if the field is written in.
*/
public boolean isWriter() {
- return opcode == Opcode.PUTFIELD || opcode == Opcode.PUTSTATIC;
+ return opcode == Opcode.PUTFIELD || opcode == Opcode.PUTSTATIC;
}
/**
* Returns the class in which the field is declared.
*/
private CtClass getCtClass() throws NotFoundException {
- return thisClass.getClassPool().get(getClassName());
+ return thisClass.getClassPool().get(getClassName());
}
/**
* Returns the name of the class in which the field is declared.
*/
public String getClassName() {
- int index = iterator.u16bitAt(currentPos + 1);
- return getConstPool().getFieldrefClassName(index);
+ int index = iterator.u16bitAt(currentPos + 1);
+ return getConstPool().getFieldrefClassName(index);
}
/**
* Returns the name of the field.
*/
public String getFieldName() {
- int index = iterator.u16bitAt(currentPos + 1);
- return getConstPool().getFieldrefName(index);
+ int index = iterator.u16bitAt(currentPos + 1);
+ return getConstPool().getFieldrefName(index);
}
/**
* Returns the field accessed by this expression.
*/
public CtField getField() throws NotFoundException {
- CtClass cc = getCtClass();
- return cc.getField(getFieldName());
+ CtClass cc = getCtClass();
+ return cc.getField(getFieldName());
}
/**
@@ -130,16 +119,16 @@ public class FieldAccess extends Expr {
* the throws declaration allows the method to throw.
*/
public CtClass[] mayThrow() {
- return super.mayThrow();
+ return super.mayThrow();
}
/*
* Returns the type of the field.
public CtClass getFieldType() throws NotFoundException {
- int index = iterator.u16bitAt(currentPos + 1);
- String type = getConstPool().getFieldrefType(index);
- return Descriptor.toCtClass(type, thisClass.getClassPool());
+ int index = iterator.u16bitAt(currentPos + 1);
+ String type = getConstPool().getFieldrefType(index);
+ return Descriptor.toCtClass(type, thisClass.getClassPool());
}
*/
@@ -151,150 +140,150 @@ public class FieldAccess extends Expr {
* If the field access is writing, $_ is available but the value
* of $_ is ignored.
*
- * @param statement a Java statement.
+ * @param statement a Java statement.
*/
public void replace(String statement) throws CannotCompileException {
- ConstPool constPool = getConstPool();
- int pos = currentPos;
- int index = iterator.u16bitAt(pos + 1);
-
- Javac jc = new Javac(thisClass);
- CodeAttribute ca = iterator.get();
- try {
- CtClass[] params;
- CtClass retType;
- CtClass fieldType
- = Descriptor.toCtClass(constPool.getFieldrefType(index),
- thisClass.getClassPool());
- boolean read = isReader();
- if (read) {
- params = new CtClass[0];
- retType = fieldType;
- }
- else {
- params = new CtClass[1];
- params[0] = fieldType;
- retType = CtClass.voidType;
- }
-
- int paramVar = ca.getMaxLocals();
- jc.recordParams(constPool.getFieldrefClassName(index), params,
- true, paramVar, withinStatic());
-
- /* Is $_ included in the source code?
- */
- boolean included = checkResultValue(retType, statement);
-
- int retVar = jc.recordReturnType(retType, included);
- if (read)
- jc.recordProceed(new ProceedForRead(retType, opcode,
- index, paramVar));
- else {
- // because $type is not the return type...
- jc.recordType(fieldType);
- jc.recordProceed(new ProceedForWrite(params[0], opcode,
- index, paramVar));
- }
-
- Bytecode bytecode = jc.getBytecode();
- storeStack(params, isStatic(), paramVar, bytecode);
- jc.compileStmnt(statement);
- if (read)
- bytecode.addLoad(retVar, retType);
-
- replace0(pos, bytecode, 3);
- }
- catch (CompileError e) { throw new CannotCompileException(e); }
- catch (NotFoundException e) { throw new CannotCompileException(e); }
- catch (BadBytecode e) {
- throw new CannotCompileException("broken method");
- }
+ ConstPool constPool = getConstPool();
+ int pos = currentPos;
+ int index = iterator.u16bitAt(pos + 1);
+
+ Javac jc = new Javac(thisClass);
+ CodeAttribute ca = iterator.get();
+ try {
+ CtClass[] params;
+ CtClass retType;
+ CtClass fieldType
+ = Descriptor.toCtClass(constPool.getFieldrefType(index),
+ thisClass.getClassPool());
+ boolean read = isReader();
+ if (read) {
+ params = new CtClass[0];
+ retType = fieldType;
+ }
+ else {
+ params = new CtClass[1];
+ params[0] = fieldType;
+ retType = CtClass.voidType;
+ }
+
+ int paramVar = ca.getMaxLocals();
+ jc.recordParams(constPool.getFieldrefClassName(index), params,
+ true, paramVar, withinStatic());
+
+ /* Is $_ included in the source code?
+ */
+ boolean included = checkResultValue(retType, statement);
+
+ int retVar = jc.recordReturnType(retType, included);
+ if (read)
+ jc.recordProceed(new ProceedForRead(retType, opcode,
+ index, paramVar));
+ else {
+ // because $type is not the return type...
+ jc.recordType(fieldType);
+ jc.recordProceed(new ProceedForWrite(params[0], opcode,
+ index, paramVar));
+ }
+
+ Bytecode bytecode = jc.getBytecode();
+ storeStack(params, isStatic(), paramVar, bytecode);
+ jc.compileStmnt(statement);
+ if (read)
+ bytecode.addLoad(retVar, retType);
+
+ replace0(pos, bytecode, 3);
+ }
+ catch (CompileError e) { throw new CannotCompileException(e); }
+ catch (NotFoundException e) { throw new CannotCompileException(e); }
+ catch (BadBytecode e) {
+ throw new CannotCompileException("broken method");
+ }
}
/* <field type> $proceed()
*/
static class ProceedForRead implements ProceedHandler {
- CtClass fieldType;
- int opcode;
- int targetVar, index;
-
- ProceedForRead(CtClass type, int op, int i, int var) {
- fieldType = type;
- targetVar = var;
- opcode = op;
- index = i;
- }
-
- public void doit(JvstCodeGen gen, Bytecode bytecode, ASTList args)
- throws CompileError
- {
- if (args != null && !gen.isParamListName(args))
- throw new CompileError(Javac.proceedName
- + "() cannot take a parameter for field reading");
-
- int stack;
- if (isStatic(opcode))
- stack = 0;
- else {
- stack = -1;
- bytecode.addAload(targetVar);
- }
-
- if (fieldType instanceof CtPrimitiveType)
- stack += ((CtPrimitiveType)fieldType).getDataSize();
- else
- ++stack;
-
- bytecode.add(opcode);
- bytecode.addIndex(index);
- bytecode.growStack(stack);
- gen.setType(fieldType);
- }
+ CtClass fieldType;
+ int opcode;
+ int targetVar, index;
+
+ ProceedForRead(CtClass type, int op, int i, int var) {
+ fieldType = type;
+ targetVar = var;
+ opcode = op;
+ index = i;
+ }
+
+ public void doit(JvstCodeGen gen, Bytecode bytecode, ASTList args)
+ throws CompileError
+ {
+ if (args != null && !gen.isParamListName(args))
+ throw new CompileError(Javac.proceedName
+ + "() cannot take a parameter for field reading");
+
+ int stack;
+ if (isStatic(opcode))
+ stack = 0;
+ else {
+ stack = -1;
+ bytecode.addAload(targetVar);
+ }
+
+ if (fieldType instanceof CtPrimitiveType)
+ stack += ((CtPrimitiveType)fieldType).getDataSize();
+ else
+ ++stack;
+
+ bytecode.add(opcode);
+ bytecode.addIndex(index);
+ bytecode.growStack(stack);
+ gen.setType(fieldType);
+ }
}
/* void $proceed(<field type>)
- * the return type is not the field type but void.
+ * the return type is not the field type but void.
*/
static class ProceedForWrite implements ProceedHandler {
- CtClass fieldType;
- int opcode;
- int targetVar, index;
-
- ProceedForWrite(CtClass type, int op, int i, int var) {
- fieldType = type;
- targetVar = var;
- opcode = op;
- index = i;
- }
-
- public void doit(JvstCodeGen gen, Bytecode bytecode, ASTList args)
- throws CompileError
- {
- if (gen.atMethodArgsLength(args) != 1)
- throw new CompileError(Javac.proceedName
- + "() cannot take more than one parameter "
- + "for field writing");
-
- int stack;
- if (isStatic(opcode))
- stack = 0;
- else {
- stack = -1;
- bytecode.addAload(targetVar);
- }
-
- gen.atMethodArgs(args, new int[1], new int[1], new String[1]);
- gen.doNumCast(fieldType);
- if (fieldType instanceof CtPrimitiveType)
- stack -= ((CtPrimitiveType)fieldType).getDataSize();
- else
- --stack;
-
- bytecode.add(opcode);
- bytecode.addIndex(index);
- bytecode.growStack(stack);
- gen.setType(CtClass.voidType);
- gen.addNullIfVoid();
- }
+ CtClass fieldType;
+ int opcode;
+ int targetVar, index;
+
+ ProceedForWrite(CtClass type, int op, int i, int var) {
+ fieldType = type;
+ targetVar = var;
+ opcode = op;
+ index = i;
+ }
+
+ public void doit(JvstCodeGen gen, Bytecode bytecode, ASTList args)
+ throws CompileError
+ {
+ if (gen.atMethodArgsLength(args) != 1)
+ throw new CompileError(Javac.proceedName
+ + "() cannot take more than one parameter "
+ + "for field writing");
+
+ int stack;
+ if (isStatic(opcode))
+ stack = 0;
+ else {
+ stack = -1;
+ bytecode.addAload(targetVar);
+ }
+
+ gen.atMethodArgs(args, new int[1], new int[1], new String[1]);
+ gen.doNumCast(fieldType);
+ if (fieldType instanceof CtPrimitiveType)
+ stack -= ((CtPrimitiveType)fieldType).getDataSize();
+ else
+ --stack;
+
+ bytecode.add(opcode);
+ bytecode.addIndex(index);
+ bytecode.growStack(stack);
+ gen.setType(CtClass.voidType);
+ gen.addNullIfVoid();
+ }
}
}