예제 #1
0
 /**
  * Get FieldDescriptor describing the field accessed by given FieldInstruction.
  *
  * @param fins a FieldInstruction
  * @param cpg ConstantPoolGen for the method containing the FieldInstruction
  * @return FieldDescriptor describing the field accessed by given FieldInstruction
  */
 public static FieldDescriptor getAccessedFieldDescriptor(
     FieldInstruction fins, ConstantPoolGen cpg) {
   String className = fins.getClassName(cpg);
   String fieldName = fins.getName(cpg);
   String fieldSig = fins.getSignature(cpg);
   boolean isStatic =
       (fins.getOpcode() == Constants.GETSTATIC || fins.getOpcode() == Constants.PUTSTATIC);
   return DescriptorFactory.instance()
       .getFieldDescriptor(className, fieldName, fieldSig, isStatic);
 }
  /**
   * Look up the field referenced by given FieldInstruction, returning it as an {@link XField
   * XField} object.
   *
   * @param fins the FieldInstruction
   * @param cpg the ConstantPoolGen used by the class containing the instruction
   * @return an XField object representing the field, or null if no such field could be found
   */
  public static XField findXField(FieldInstruction fins, @NonNull ConstantPoolGen cpg)
      throws ClassNotFoundException {

    String className = fins.getClassName(cpg);
    String fieldName = fins.getFieldName(cpg);
    String fieldSig = fins.getSignature(cpg);

    boolean isStatic =
        (fins.getOpcode() == Constants.GETSTATIC || fins.getOpcode() == Constants.PUTSTATIC);

    XField xfield = findXField(className, fieldName, fieldSig, isStatic);
    short opcode = fins.getOpcode();
    if (xfield != null
        && xfield.isResolved()
        && xfield.isStatic() == (opcode == Constants.GETSTATIC || opcode == Constants.PUTSTATIC))
      return xfield;
    else return null;
  }
예제 #3
0
 /** Field access. */
 public void visitFieldInstruction(FieldInstruction i) {
   cv.registerFieldAccess(i.getClassName(cp), i.getFieldName(cp));
   cv.registerCoupling(i.getFieldType(cp));
 }