JAVA BCEL NEWARRAY getType Базовый тип - PullRequest
1 голос
/ 16 августа 2011

Как мне проверить это в BCEL ..

Скажем, байт-код в Java

newarray 10 (int)

Я уже сделал это для посетителя

instruction instanceof NEWARRAY

public boolean visit(Instruction instr) {
    return instr instanceof NEWARRAY;
}

Но я также должен проверить, является ли newarray int[]

как мне проверить это в BCEL?

Я пробовал это

 && ((NEWARRAY) instr).getType() == Type.INT;

к колодцу

return instr instanceof NEWARRAY && ((NEWARRAY) instr).getType() == Type.INT;

Но вы можете видеть, что вышеприведенное ^ не сработает, поскольку никогда не будет int .. но int[]

Но Type.INT это просто int .. а не int[] ..

Как я представляю тип int[]?

Я читал исходный код BCEL, и NEWARRAY.getType () возвращает это ..

     /**
      * @return type of constructed array
      */
     public final Type getType() {
         return new ArrayType(BasicType.getType(type), 1);
     }

Как вы можете видеть, он возвращает класс Type, так что .. глядя на http://commons.apache.org/bcel/apidocs/org/apache/bcel/generic/Type.html

http://commons.apache.org/bcel/apidocs/org/apache/bcel/generic/ArrayType.html

нет никаких Type для ARRAY int[].

1 Ответ

1 голос
/ 16 августа 2011

Не думаю, что я хорошо понимаю ваш вопрос, но как на счет этого:

if(instr.getClass().isArray()) return instr instanceof NEWARRAY[];
else return instr instanceof NEWARRAY;
...