1

私は次のクラスを持っています

public class Booking{

    public String name;
    public String comment;

    public String session;

    public void test(){
        this.name = "hi";
    }
}

以下を使用して計測します。

cc.instrument(new ExprEditor(){
    public void edit(FieldAccess arg) throws CannotCompileException {
        if (arg.isWriter()) {
            StringBuffer code = new StringBuffer();
            code.append("$0.");
            code.append(arg.getFieldName());
            code.append("=$1.toUpperCase();");
            arg.replace(code.toString());
        }
    }           
});

これを呼び出すと:

Booking b = new Booking();
b.name = "hello";
System.out.println(b.name); // Edited correction

b.test();
System.out.println(b.name);

私に与えます

hello // Externally, doesn't.
HI    // Internally, works as expected

私は何が欠けていますか?簡単に達成できるはずのことの1つに思えます。

すべてのクラスで一括「fieldAccess.replace」を実行する必要があるとは言わないでください。OO

4

1 に答える 1

3

ステートメント b.name = "hello"; を含むサンプル コード フラグメント。インストルメント化されていないため、書き込まれる値は大文字に変換されません。ExprEditor は、それによって計測されたクラスからのフィールド アクセスのみを変換できます。「名前」フィールドへのすべての書き込みを大文字に変換する場合は、そのフィールドの書き込みステートメントを含むすべてのクラスを計測する必要があります。

于 2012-02-13T03:19:58.617 に答える