org.objectweb.asm.tree.analysis.BasicValue类的使用及代码示例

x33g5p2x  于2022-01-17 转载在 其他  
字(10.8k)|赞(0)|评价(0)|浏览(88)

本文整理了Java中org.objectweb.asm.tree.analysis.BasicValue类的一些代码示例,展示了BasicValue类的具体用法。这些代码示例主要来源于Github/Stackoverflow/Maven等平台,是从一些精选项目中提取出来的代码,具有较强的参考意义,能在一定程度帮忙到你。BasicValue类的具体详情如下:
包路径:org.objectweb.asm.tree.analysis.BasicValue
类名称:BasicValue

BasicValue介绍

[英]A Value that is represented by its type in a seven types type system. This type system distinguishes the UNINITIALZED, INT, FLOAT, LONG, DOUBLE, REFERENCE and RETURNADDRESS types.
[中]在七种类型系统中由其类型表示的值。此类型系统区分未初始化、INT、FLOAT、LONG、DOUBLE、REFERENCE和RETURNADDRESS类型。

代码示例

代码示例来源:origin: org.ow2.asm/asm-debug-all

@Override
public BasicValue newValue(final Type type) {
  if (type == null) {
    return BasicValue.UNINITIALIZED_VALUE;
  }
  boolean isArray = type.getSort() == Type.ARRAY;
  if (isArray) {
    switch (type.getElementType().getSort()) {
    case Type.BOOLEAN:
    case Type.CHAR:
    case Type.BYTE:
    case Type.SHORT:
      return new BasicValue(type);
    }
  }
  BasicValue v = super.newValue(type);
  if (BasicValue.REFERENCE_VALUE.equals(v)) {
    if (isArray) {
      v = newValue(type.getElementType());
      String desc = v.getType().getDescriptor();
      for (int i = 0; i < type.getDimensions(); ++i) {
        desc = '[' + desc;
      }
      v = new BasicValue(Type.getType(desc));
    } else {
      v = new BasicValue(type);
    }
  }
  return v;
}

代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5

private static boolean isNull(BasicValue value) {
  if (null == value)
    return true;
  if (!value.isReference())
    return false;
  Type type = value.getType();
  return "Lnull;".equals(type.getDescriptor()); 
}

代码示例来源:origin: fge/grappa

@Override
  public String toString()
  {
    return instruction.getOpcode() != -1
      ? Printer.OPCODES[instruction.getOpcode()]
      : super.toString();
  }
}

代码示例来源:origin: co.paralleluniverse/quasar

static boolean isNullType(BasicValue v) {
  return (v == BasicValue.UNINITIALIZED_VALUE)
      || (v.isReference() && v.getType().getInternalName().equals("null"));
}

代码示例来源:origin: co.paralleluniverse/quasar

@Override
public BasicValue binaryOperation(AbstractInsnNode insn, BasicValue value1, BasicValue value2) throws AnalyzerException {
  if(insn.getOpcode() == Opcodes.AALOAD) {
    Type t1 = value1.getType();
    if(t1 == null || t1.getSort() != Type.ARRAY) {
      throw new AnalyzerException(insn, "AALOAD needs an array as first parameter");
    }
    
    Type resultType = Type.getType(t1.getDescriptor().substring(1));
    return new BasicValue(resultType);
  }
  return super.binaryOperation(insn, value1, value2);
}

代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5

Type returnType = Type.getReturnType(desc);
boolean hasReturn = returnType != Type.VOID_TYPE;
if (hasReturn) {
  mv.visitInsn(returnType.getSize() == 1 ? POP : POP2);
Type[] params = Type.getArgumentTypes(desc);
int argSize = params.length;
int ownerSize = opcode == INVOKESTATIC || opcode == INVOKEDYNAMIC ? 0 : 1;  // TODO
  } else if (value == BasicValue.UNINITIALIZED_VALUE) {
  } else if (value.isReference()) {
    mv.visitVarInsn(ALOAD, stackRecorderVar);
    mv.visitInsn(SWAP);
    mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, PUSH_METHOD + "Object", "(Ljava/lang/Object;)V", false);
  } else {
    Type type = value.getType();
    if (type.getSize() > 1) {
  } else if (value.isReference()) {
    mv.visitVarInsn(ALOAD, stackRecorderVar);
    mv.visitVarInsn(ALOAD, j);
  } else {
    mv.visitVarInsn(ALOAD, stackRecorderVar);
    Type type = value.getType();
    mv.visitVarInsn(type.getOpcode(ILOAD), j);
    mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, getPushMethod(type), "(" + type.getDescriptor() + ")V", false);

代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5

Type type = value.getType();
  if (value.isReference()) {
    mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, POP_METHOD + "Object", "()Ljava/lang/Object;", false);
    Type t = value.getType();
    String desc = t.getDescriptor();
    if (desc.charAt(0) == '[') {
      mv.visitTypeInsn(CHECKCAST, desc);
    } else {
      mv.visitTypeInsn(CHECKCAST, t.getInternalName());
    mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, getPopMethod(type), "()" + type.getDescriptor(), false);
    mv.visitVarInsn(type.getOpcode(ISTORE), j);
} else if (value.isReference()) {
  mv.visitVarInsn(ALOAD, stackRecorderVar);
  mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, POP_METHOD + "Object", "()Ljava/lang/Object;", false);
  mv.visitTypeInsn(CHECKCAST, value.getType().getInternalName());
} else {
  Type type = value.getType();
  mv.visitVarInsn(ALOAD, stackRecorderVar);
  mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, getPopMethod(type), "()" + type.getDescriptor(), false);
  mv.visitVarInsn(ALOAD, stackRecorderVar);
  mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, POP_METHOD + "Reference", "()Ljava/lang/Object;", false);
  mv.visitTypeInsn(CHECKCAST, value.getType().getInternalName());

代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5

@Override
protected boolean isAssignableFrom(Type t, Type u) {
  if (t.equals(u)) {
    return true;
  if ("Lnull;".equals(u.getDescriptor()) && t.getSort() >= Type.ARRAY) {
    return true;
    int dt = t.getDimensions();
    int du = u.getDimensions();
    boolean isObject = et.equals(BasicValue.REFERENCE_VALUE.getType());

代码示例来源:origin: net.tascalate.javaflow/net.tascalate.javaflow.providers.asm5

@Override
public BasicValue merge(BasicValue v, BasicValue w) {
  if (!v.equals(w)) {
    Type t = v.getType();
    Type u = w.getType();
    if (t != null
        && (t.getSort() == Type.OBJECT || t.getSort() == Type.ARRAY)) {
      if (u != null
          && (u.getSort() == Type.OBJECT || u.getSort() == Type.ARRAY)) {
        if ("Lnull;".equals(t.getDescriptor())) {
          return w;
        }
        if ("Lnull;".equals(u.getDescriptor())) {
          return v;
        }
        if (isAssignableFrom(t, u)) {
          return v;
        }
        if (isAssignableFrom(u, t)) {
          return w;
        }
        return new BasicValue(inheritanceLookup.getCommonSuperType(t, u));
      }
    }
    return BasicValue.UNINITIALIZED_VALUE;
  }
  return v;
}

代码示例来源:origin: co.paralleluniverse/quasar

@Override
public BasicValue merge(BasicValue v, BasicValue w) {
  if (!v.equals(w)) {
    if(v.isReference() && w.isReference()) {
      int dimensions = 0;
      Type typeV = v.getType();
      Type typeW = w.getType();
      if(typeV.getSort() != typeW.getSort()) {
        db.log(LogLevel.DEBUG, "Array and none array type can't be merged: %s %s", v, w);
        return BasicValue.UNINITIALIZED_VALUE;
      if(typeW.getSort() == Type.ARRAY) {
        dimensions = typeV.getDimensions();
        if(dimensions != typeW.getDimensions()) {
      return new BasicValue(Type.getType(typeDescriptor));

代码示例来源:origin: org.ow2.asm/asm-debug-all

@Override
protected BasicValue getElementValue(final BasicValue objectArrayValue)
    throws AnalyzerException {
  Type arrayType = objectArrayValue.getType();
  if (arrayType != null) {
    if (arrayType.getSort() == Type.ARRAY) {
      return newValue(Type.getType(arrayType.getDescriptor()
          .substring(1)));
    } else if ("Lnull;".equals(arrayType.getDescriptor())) {
      return objectArrayValue;
    }
  }
  throw new Error("Internal error");
}

代码示例来源:origin: dragome/dragome-sdk

Type type= value.getType();
  if (value.isReference())
    Type t= value.getType();
    String desc= t.getDescriptor();
    if (desc.charAt(0) == '[')
      mv.visitTypeInsn(CHECKCAST, t.getInternalName());
    mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, getPopMethod(type), "()" + type.getDescriptor(), false);
    mv.visitVarInsn(type.getOpcode(ISTORE), j);
else if (value.isReference())
  mv.visitTypeInsn(CHECKCAST, value.getType().getInternalName());
  Type type= value.getType();
  mv.visitVarInsn(ALOAD, stackRecorderVar);
  mv.visitMethodInsn(INVOKEVIRTUAL, STACK_RECORDER, getPopMethod(type), "()" + type.getDescriptor(), false);
  mv.visitTypeInsn(CHECKCAST, value.getType().getInternalName());

代码示例来源:origin: co.paralleluniverse/quasar

emitConst(mv, idx);
switch (v.getType().getSort()) {
  case Type.OBJECT:
    String internalName = v.getType().getInternalName();
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, STACK_NAME, "getObject", "(I)Ljava/lang/Object;");
    if (!internalName.equals("java/lang/Object")) {  // don't cast to Object ;)
  case Type.ARRAY:
    mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, STACK_NAME, "getObject", "(I)Ljava/lang/Object;");
    mv.visitTypeInsn(Opcodes.CHECKCAST, v.getType().getDescriptor());
    break;
  case Type.BYTE:
    break;
  default:
    throw new InternalError("Unexpected type: " + v.getType());

代码示例来源:origin: fge/grappa

@Override
public void returnOperation(final AbstractInsnNode insn,
  final BasicValue value, final BasicValue expected)
  throws AnalyzerException
{
  Preconditions.checkState(insn.getOpcode() == ARETURN);
  Preconditions.checkState(unwrap(value).getType().equals(
    Type.getType(Rule.class)));
  Preconditions.checkState(unwrap(expected).getType().equals(
    Type.getType(Rule.class)));
  Preconditions.checkState(method.getReturnInstructionNode() == null);
  method.setReturnInstructionNode(createNode(insn, null, value));
}

代码示例来源:origin: org.ow2.asm/asm-debug-all

@Override
protected boolean isSubTypeOf(final BasicValue value,
    final BasicValue expected) {
  Type expectedType = expected.getType();
  Type type = value.getType();
  switch (expectedType.getSort()) {
  case Type.INT:
  case Type.FLOAT:
  case Type.LONG:
  case Type.DOUBLE:
    return type.equals(expectedType);
  case Type.ARRAY:
  case Type.OBJECT:
    if ("Lnull;".equals(type.getDescriptor())) {
      return true;
    } else if (type.getSort() == Type.OBJECT
        || type.getSort() == Type.ARRAY) {
      return isAssignableFrom(expectedType, type);
    } else {
      return false;
    }
  default:
    throw new Error("Internal error");
  }
}

代码示例来源:origin: com.amazon.device.tools.lint/lint-checks

Frame frame = frames[instructions.indexOf(call)];
int stackSlot = frame.getStackSize();
for (Type type : Type.getArgumentTypes(desc)) {
  stackSlot -= type.getSize();
Type type = stackValue.getType();
if (type != null && type.getDescriptor().equals(VM_SECURE_RANDOM)) {
  checkValidSetSeed(context, call);

代码示例来源:origin: org.ow2.asm/asm-debug-all

final BasicValue value) throws AnalyzerException {
BasicValue expected;
switch (insn.getOpcode()) {
case INEG:
case IINC:
case GETFIELD:
  expected = newValue(Type
      .getObjectType(((FieldInsnNode) insn).owner));
  break;
case CHECKCAST:
  if (!value.isReference()) {
    throw new AnalyzerException(insn, null, "an object reference",
        value);
case IFNULL:
case IFNONNULL:
  if (!value.isReference()) {
    throw new AnalyzerException(insn, null, "an object reference",
        value);
  expected = newValue(Type.getType(((FieldInsnNode) insn).desc));
  break;
default:

代码示例来源:origin: org.ow2.asm/asm-debug-all

@Override
protected boolean isArrayValue(final BasicValue value) {
  Type t = value.getType();
  return t != null
      && ("Lnull;".equals(t.getDescriptor()) || t.getSort() == Type.ARRAY);
}

代码示例来源:origin: com.amazon.device.tools.lint/lint-checks

Type type = stackValue.getType();
if (type == null) {
  return;
String internalName = type.getInternalName();
String className = type.getClassName();
LintDriver driver = context.getDriver();

代码示例来源:origin: org.ow2.asm/asm-debug-all

@Override
public BasicValue naryOperation(final AbstractInsnNode insn,
    final List<? extends BasicValue> values) throws AnalyzerException {
  int opcode = insn.getOpcode();
  if (opcode == MULTIANEWARRAY) {
    for (int i = 0; i < values.size(); ++i) {
      if (!BasicValue.INT_VALUE.equals(values.get(i))) {
        throw new AnalyzerException(insn, null,
            BasicValue.INT_VALUE, values.get(i));
    int j = 0;
    if (opcode != INVOKESTATIC && opcode != INVOKEDYNAMIC) {
      Type owner = Type.getObjectType(((MethodInsnNode) insn).owner);
      if (!isSubTypeOf(values.get(i++), newValue(owner))) {
        throw new AnalyzerException(insn, "Method owner",
    Type[] args = Type.getArgumentTypes(desc);
    while (i < values.size()) {
      BasicValue expected = newValue(args[j++]);

相关文章