org.objectweb.asm.Opcodes# V1_5 ( ) 源码实例Demo

下面列出了org.objectweb.asm.Opcodes# V1_5 ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: Concurnas   文件: CheckMethodAdapter.java

/**
 * Checks that the given string is a valid Java identifier.
 *
 * @param version the class version.
 * @param name the string to be checked.
 * @param message the message to use in case of error.
 */
static void checkMethodIdentifier(final int version, final String name, final String message) {
  if (name == null || name.length() == 0) {
    throw new IllegalArgumentException(INVALID + message + MUST_NOT_BE_NULL_OR_EMPTY);
  }
  if ((version & 0xFFFF) >= Opcodes.V1_5) {
    for (int i = 0; i < name.length(); i = name.offsetByCodePoints(i, 1)) {
      if (".;[/<>".indexOf(name.codePointAt(i)) != -1) {
        throw new IllegalArgumentException(
            INVALID + message + " (must be a valid unqualified name): " + name);
      }
    }
    return;
  }
  for (int i = 0; i < name.length(); i = name.offsetByCodePoints(i, 1)) {
    if (i == 0
        ? !Character.isJavaIdentifierStart(name.codePointAt(i))
        : !Character.isJavaIdentifierPart(name.codePointAt(i))) {
      throw new IllegalArgumentException(
          INVALID
              + message
              + " (must be a '<init>', '<clinit>' or a valid Java identifier): "
              + name);
    }
  }
}
 

void checkLDCConstant(final Object cst) {
  if (cst instanceof Type) {
    int s = ((Type) cst).getSort();
    if (s != Type.OBJECT && s != Type.ARRAY && s != Type.METHOD) {
      throw new IllegalArgumentException("Illegal LDC constant value");
    }
    if (s != Type.METHOD && (version & 0xFFFF) < Opcodes.V1_5) {
      throw new IllegalArgumentException("ldc of a constant class requires at least version 1.5");
    }
    if (s == Type.METHOD && (version & 0xFFFF) < Opcodes.V1_7) {
      throw new IllegalArgumentException("ldc of a method type requires at least version 1.7");
    }
  } else if (cst instanceof Handle) {
    if ((version & 0xFFFF) < Opcodes.V1_7) {
      throw new IllegalArgumentException("ldc of a handle requires at least version 1.7");
    }
    int tag = ((Handle) cst).getTag();
    if (tag < Opcodes.H_GETFIELD || tag > Opcodes.H_INVOKEINTERFACE) {
      throw new IllegalArgumentException("invalid handle tag " + tag);
    }
  } else {
    checkConstant(cst);
  }
}
 

/**
 * Checks that the given string is a valid Java identifier.
 * 
 * @param version
 *          the class version.
 * @param name
 *          the string to be checked.
 * @param msg
 *          a message to be used in case of error.
 */
static void checkMethodIdentifier(int version, final String name, final String msg) {
  if (name == null || name.length() == 0) {
    throw new IllegalArgumentException("Invalid " + msg + " (must not be null or empty)");
  }
  if ((version & 0xFFFF) >= Opcodes.V1_5) {
    for (int i = 0; i < name.length(); ++i) {
      if (".;[/<>".indexOf(name.charAt(i)) != -1) {
        throw new IllegalArgumentException("Invalid " + msg + " (must be a valid unqualified name): " + name);
      }
    }
    return;
  }
  if (!Character.isJavaIdentifierStart(name.charAt(0))) {
    throw new IllegalArgumentException("Invalid " + msg + " (must be a '<init>', '<clinit>' or a valid Java identifier): " + name);
  }
  for (int i = 1; i < name.length(); ++i) {
    if (!Character.isJavaIdentifierPart(name.charAt(i))) {
      throw new IllegalArgumentException("Invalid " + msg + " (must be '<init>' or '<clinit>' or a valid Java identifier): " + name);
    }
  }
}
 

/**
 * Checks that the given string is a valid Java identifier.
 *
 * @param version the class version.
 * @param name the string to be checked.
 * @param message the message to use in case of error.
 */
static void checkMethodIdentifier(final int version, final String name, final String message) {
  if (name == null || name.length() == 0) {
    throw new IllegalArgumentException(INVALID + message + MUST_NOT_BE_NULL_OR_EMPTY);
  }
  if ((version & 0xFFFF) >= Opcodes.V1_5) {
    for (int i = 0; i < name.length(); i = name.offsetByCodePoints(i, 1)) {
      if (".;[/<>".indexOf(name.codePointAt(i)) != -1) {
        throw new IllegalArgumentException(
            INVALID + message + " (must be a valid unqualified name): " + name);
      }
    }
    return;
  }
  for (int i = 0; i < name.length(); i = name.offsetByCodePoints(i, 1)) {
    if (i == 0
        ? !Character.isJavaIdentifierStart(name.codePointAt(i))
        : !Character.isJavaIdentifierPart(name.codePointAt(i))) {
      throw new IllegalArgumentException(
          INVALID
              + message
              + " (must be a '<init>', '<clinit>' or a valid Java identifier): "
              + name);
    }
  }
}
 

/**
 * Checks that the given string is a valid Java identifier.
 *
 * @param version the class version.
 * @param name the string to be checked.
 * @param message the message to use in case of error.
 */
static void checkMethodIdentifier(final int version, final String name, final String message) {
  if (name == null || name.length() == 0) {
    throw new IllegalArgumentException(INVALID + message + MUST_NOT_BE_NULL_OR_EMPTY);
  }
  if ((version & 0xFFFF) >= Opcodes.V1_5) {
    for (int i = 0; i < name.length(); i = name.offsetByCodePoints(i, 1)) {
      if (".;[/<>".indexOf(name.codePointAt(i)) != -1) {
        throw new IllegalArgumentException(
            INVALID + message + " (must be a valid unqualified name): " + name);
      }
    }
    return;
  }
  for (int i = 0; i < name.length(); i = name.offsetByCodePoints(i, 1)) {
    if (i == 0
        ? !Character.isJavaIdentifierStart(name.codePointAt(i))
        : !Character.isJavaIdentifierPart(name.codePointAt(i))) {
      throw new IllegalArgumentException(
          INVALID
              + message
              + " (must be a '<init>', '<clinit>' or a valid Java identifier): "
              + name);
    }
  }
}
 
源代码6 项目: buck   文件: SourceVersionUtils.java

/** Gets the class file version corresponding to the given source version constant. */
public static int sourceVersionToClassFileVersion(SourceVersion version) {
  switch (version) {
    case RELEASE_0:
      return Opcodes.V1_1; // JVMS8 4.1: 1.0 and 1.1 both support version 45.3 (Opcodes.V1_1)
    case RELEASE_1:
      return Opcodes.V1_1;
    case RELEASE_2:
      return Opcodes.V1_2;
    case RELEASE_3:
      return Opcodes.V1_3;
    case RELEASE_4:
      return Opcodes.V1_4;
    case RELEASE_5:
      return Opcodes.V1_5;
    case RELEASE_6:
      return Opcodes.V1_6;
    case RELEASE_7:
      return Opcodes.V1_7;
    case RELEASE_8:
      return Opcodes.V1_8;
    default:
      throw new IllegalArgumentException(String.format("Unexpected source version: %s", version));
  }
}
 
源代码7 项目: Concurnas   文件: CheckMethodAdapter.java

/**
 * Checks that the given substring is a valid Java identifier.
 *
 * @param version the class version.
 * @param name the string to be checked.
 * @param startPos the index of the first character of the identifier (inclusive).
 * @param endPos the index of the last character of the identifier (exclusive). -1 is equivalent
 *     to {@code name.length()} if name is not {@literal null}.
 * @param message the message to use in case of error.
 */
static void checkIdentifier(
    final int version,
    final String name,
    final int startPos,
    final int endPos,
    final String message) {
  if (name == null || (endPos == -1 ? name.length() <= startPos : endPos <= startPos)) {
    throw new IllegalArgumentException(INVALID + message + MUST_NOT_BE_NULL_OR_EMPTY);
  }
  int max = endPos == -1 ? name.length() : endPos;
  if ((version & 0xFFFF) >= Opcodes.V1_5) {
    for (int i = startPos; i < max; i = name.offsetByCodePoints(i, 1)) {
      if (".;[/".indexOf(name.codePointAt(i)) != -1) {
        throw new IllegalArgumentException(
            INVALID + message + " (must not contain . ; [ or /): " + name);
      }
    }
    return;
  }
  for (int i = startPos; i < max; i = name.offsetByCodePoints(i, 1)) {
    if (i == startPos
        ? !Character.isJavaIdentifierStart(name.codePointAt(i))
        : !Character.isJavaIdentifierPart(name.codePointAt(i))) {
      throw new IllegalArgumentException(
          INVALID + message + " (must be a valid Java identifier): " + name);
    }
  }
}
 

/**
 * Checks that the given string is a valid unqualified name.
 * 
 * @param version
 *          the class version.
 * @param name
 *          the string to be checked.
 * @param msg
 *          a message to be used in case of error.
 */
static void checkUnqualifiedName(int version, final String name, final String msg) {
  if ((version & 0xFFFF) < Opcodes.V1_5) {
    checkIdentifier(name, msg);
  } else {
    for (int i = 0; i < name.length(); ++i) {
      if (".;[/".indexOf(name.charAt(i)) != -1) {
        throw new IllegalArgumentException("Invalid " + msg + " (must be a valid unqualified name): " + name);
      }
    }
  }
}
 

/**
 * Checks that the given substring is a valid Java identifier.
 *
 * @param version the class version.
 * @param name the string to be checked.
 * @param startPos the index of the first character of the identifier (inclusive).
 * @param endPos the index of the last character of the identifier (exclusive). -1 is equivalent
 *     to {@code name.length()} if name is not {@literal null}.
 * @param message the message to use in case of error.
 */
static void checkIdentifier(
    final int version,
    final String name,
    final int startPos,
    final int endPos,
    final String message) {
  if (name == null || (endPos == -1 ? name.length() <= startPos : endPos <= startPos)) {
    throw new IllegalArgumentException(INVALID + message + MUST_NOT_BE_NULL_OR_EMPTY);
  }
  int max = endPos == -1 ? name.length() : endPos;
  if ((version & 0xFFFF) >= Opcodes.V1_5) {
    for (int i = startPos; i < max; i = name.offsetByCodePoints(i, 1)) {
      if (".;[/".indexOf(name.codePointAt(i)) != -1) {
        throw new IllegalArgumentException(
            INVALID + message + " (must not contain . ; [ or /): " + name);
      }
    }
    return;
  }
  for (int i = startPos; i < max; i = name.offsetByCodePoints(i, 1)) {
    if (i == startPos
        ? !Character.isJavaIdentifierStart(name.codePointAt(i))
        : !Character.isJavaIdentifierPart(name.codePointAt(i))) {
      throw new IllegalArgumentException(
          INVALID + message + " (must be a valid Java identifier): " + name);
    }
  }
}
 
源代码10 项目: JReFrameworker   文件: CheckMethodAdapter.java

/**
 * Checks that the given substring is a valid Java identifier.
 *
 * @param version the class version.
 * @param name the string to be checked.
 * @param startPos the index of the first character of the identifier (inclusive).
 * @param endPos the index of the last character of the identifier (exclusive). -1 is equivalent
 *     to {@code name.length()} if name is not {@literal null}.
 * @param message the message to use in case of error.
 */
static void checkIdentifier(
    final int version,
    final String name,
    final int startPos,
    final int endPos,
    final String message) {
  if (name == null || (endPos == -1 ? name.length() <= startPos : endPos <= startPos)) {
    throw new IllegalArgumentException(INVALID + message + MUST_NOT_BE_NULL_OR_EMPTY);
  }
  int max = endPos == -1 ? name.length() : endPos;
  if ((version & 0xFFFF) >= Opcodes.V1_5) {
    for (int i = startPos; i < max; i = name.offsetByCodePoints(i, 1)) {
      if (".;[/".indexOf(name.codePointAt(i)) != -1) {
        throw new IllegalArgumentException(
            INVALID + message + " (must not contain . ; [ or /): " + name);
      }
    }
    return;
  }
  for (int i = startPos; i < max; i = name.offsetByCodePoints(i, 1)) {
    if (i == startPos
        ? !Character.isJavaIdentifierStart(name.codePointAt(i))
        : !Character.isJavaIdentifierPart(name.codePointAt(i))) {
      throw new IllegalArgumentException(
          INVALID + message + " (must be a valid Java identifier): " + name);
    }
  }
}
 
源代码11 项目: instrumentation   文件: TreeInstructions.java

public static InsnList getClassConstantReference(Type type, int majorVersion) {
    InsnList il = new InsnList();

    if (majorVersion >= Opcodes.V1_5) {
        il.add(new LdcInsnNode(type));

    } else {
        String fullyQualifiedName = type.getInternalName().replaceAll("/", ".");
        il.add(new LdcInsnNode(fullyQualifiedName));
        il.add(new MethodInsnNode(Opcodes.INVOKESTATIC,
                "java/lang/Class", "forName",
                "(Ljava/lang/String;)Ljava/lang/Class;", false));
    }
    return il;
}
 
源代码12 项目: buck   文件: SourceVersionUtils.java

/** Gets the class file version corresponding to the given source version constant. */
public static int sourceVersionToClassFileVersion(SourceVersion version) {
  switch (version) {
    case RELEASE_0:
      return Opcodes.V1_1; // JVMS8 4.1: 1.0 and 1.1 both support version 45.3 (Opcodes.V1_1)
    case RELEASE_1:
      return Opcodes.V1_1;
    case RELEASE_2:
      return Opcodes.V1_2;
    case RELEASE_3:
      return Opcodes.V1_3;
    case RELEASE_4:
      return Opcodes.V1_4;
    case RELEASE_5:
      return Opcodes.V1_5;
    case RELEASE_6:
      return Opcodes.V1_6;
    case RELEASE_7:
      return Opcodes.V1_7;
    case RELEASE_8:
      return Opcodes.V1_8;
    case RELEASE_9:
      return Opcodes.V9;
    case RELEASE_10:
      return Opcodes.V10;
    case RELEASE_11:
      return Opcodes.V11;
    default:
      throw new IllegalArgumentException(String.format("Unexpected source version: %s", version));
  }
}
 
源代码13 项目: Concurnas   文件: CheckMethodAdapter.java

/**
 * Checks that the given value is a valid operand for the LDC instruction.
 *
 * @param value the value to be checked.
 */
private void checkLdcConstant(final Object value) {
  if (value instanceof Type) {
    int sort = ((Type) value).getSort();
    if (sort != Type.OBJECT && sort != Type.ARRAY && sort != Type.METHOD) {
      throw new IllegalArgumentException("Illegal LDC constant value");
    }
    if (sort != Type.METHOD && (version & 0xFFFF) < Opcodes.V1_5) {
      throw new IllegalArgumentException("ldc of a constant class requires at least version 1.5");
    }
    if (sort == Type.METHOD && (version & 0xFFFF) < Opcodes.V1_7) {
      throw new IllegalArgumentException("ldc of a method type requires at least version 1.7");
    }
  } else if (value instanceof Handle) {
    if ((version & 0xFFFF) < Opcodes.V1_7) {
      throw new IllegalArgumentException("ldc of a Handle requires at least version 1.7");
    }
    Handle handle = (Handle) value;
    int tag = handle.getTag();
    if (tag < Opcodes.H_GETFIELD || tag > Opcodes.H_INVOKEINTERFACE) {
      throw new IllegalArgumentException("invalid handle tag " + tag);
    }
    checkInternalName(this.version, handle.getOwner(), "handle owner");
    if (tag <= Opcodes.H_PUTSTATIC) {
      checkDescriptor(this.version, handle.getDesc(), false);
    } else {
      checkMethodDescriptor(this.version, handle.getDesc());
    }
    String handleName = handle.getName();
    if (!("<init>".equals(handleName) && tag == Opcodes.H_NEWINVOKESPECIAL)) {
      checkMethodIdentifier(this.version, handleName, "handle name");
    }
  } else if (value instanceof ConstantDynamic) {
    if ((version & 0xFFFF) < Opcodes.V11) {
      throw new IllegalArgumentException("ldc of a ConstantDynamic requires at least version 11");
    }
    ConstantDynamic constantDynamic = (ConstantDynamic) value;
    checkMethodIdentifier(this.version, constantDynamic.getName(), "constant dynamic name");
    checkDescriptor(this.version, constantDynamic.getDescriptor(), false);
    checkLdcConstant(constantDynamic.getBootstrapMethod());
    int bootstrapMethodArgumentCount = constantDynamic.getBootstrapMethodArgumentCount();
    for (int i = 0; i < bootstrapMethodArgumentCount; ++i) {
      checkLdcConstant(constantDynamic.getBootstrapMethodArgument(i));
    }
  } else {
    checkConstant(value);
  }
}
 
源代码14 项目: JByteMod-Beta   文件: ASMifier.java

@Override
public void visit(final int version, final int access, final String name, final String signature, final String superName,
    final String[] interfaces) {
  String simpleName;
  if (name == null) {
    simpleName = "module-info";
  } else {
    int n = name.lastIndexOf('/');
    if (n == -1) {
      simpleName = name;
    } else {
      text.add("package asm." + name.substring(0, n).replace('/', '.') + ";\n");
      simpleName = name.substring(n + 1).replace('-', '_');
    }
  }
  text.add("import java.util.*;\n");
  text.add("import org.objectweb.asm.*;\n");
  text.add("public class " + simpleName + "Dump implements Opcodes {\n\n");
  text.add("public static byte[] dump () throws Exception {\n\n");
  text.add("ClassWriter cw = new ClassWriter(0);\n");
  text.add("FieldVisitor fv;\n");
  text.add("MethodVisitor mv;\n");
  text.add("AnnotationVisitor av0;\n\n");

  buf.setLength(0);
  buf.append("cw.visit(");
  switch (version) {
  case Opcodes.V1_1:
    buf.append("V1_1");
    break;
  case Opcodes.V1_2:
    buf.append("V1_2");
    break;
  case Opcodes.V1_3:
    buf.append("V1_3");
    break;
  case Opcodes.V1_4:
    buf.append("V1_4");
    break;
  case Opcodes.V1_5:
    buf.append("V1_5");
    break;
  case Opcodes.V1_6:
    buf.append("V1_6");
    break;
  case Opcodes.V1_7:
    buf.append("V1_7");
    break;
  case Opcodes.V1_8:
    buf.append("V1_8");
    break;
  case Opcodes.V9:
    buf.append("V9");
    break;
  default:
    buf.append(version);
    break;
  }
  buf.append(", ");
  appendAccess(access | ACCESS_CLASS);
  buf.append(", ");
  appendConstant(name);
  buf.append(", ");
  appendConstant(signature);
  buf.append(", ");
  appendConstant(superName);
  buf.append(", ");
  if (interfaces != null && interfaces.length > 0) {
    buf.append("new String[] {");
    for (int i = 0; i < interfaces.length; ++i) {
      buf.append(i == 0 ? " " : ", ");
      appendConstant(interfaces[i]);
    }
    buf.append(" }");
  } else {
    buf.append("null");
  }
  buf.append(");\n\n");
  text.add(buf.toString());
}
 
源代码15 项目: JAADAS   文件: AbstractASMBackend.java

/**
 * Creates a new ASM backend
 * @param sc The SootClass that is to be converted into bytecode
 * @param javaVersion A particular Java version enforced by the user, may be 0 for automatic detection, must not be lower than necessary for all features used
 */
public AbstractASMBackend(SootClass sc, int javaVersion) {
	this.sc = sc;
	
	int minVersion = getMinJavaVersion(sc);		

	if (javaVersion == 0)
		javaVersion = Options.java_version_default;
	
	if(javaVersion != Options.java_version_default && javaVersion < minVersion){
		throw new IllegalArgumentException("Enforced Java version " + translateJavaVersion(javaVersion) + " too low to support required features (" + translateJavaVersion(minVersion) + " required)");
	}
	
	javaVersion = Math.max(javaVersion, minVersion);

	switch (javaVersion) {
	case Options.java_version_1_1:
		this.javaVersion = Opcodes.V1_1;
		break;
	case Options.java_version_1_2:
		this.javaVersion = Opcodes.V1_2;
		break;
	case Options.java_version_1_3:
		this.javaVersion = Opcodes.V1_3;
		break;
	case Options.java_version_1_4:
		this.javaVersion = Opcodes.V1_4;
		break;
	case Options.java_version_1_5:
		this.javaVersion = Opcodes.V1_5;
		break;
	case Options.java_version_1_6:
		this.javaVersion = Opcodes.V1_6;
		break;
	case Options.java_version_1_7:
		this.javaVersion = Opcodes.V1_7;
		break;
	case Options.java_version_1_8:
		this.javaVersion = Opcodes.V1_8;
		break;
	}
}
 
源代码16 项目: JReFrameworker   文件: CheckMethodAdapter.java

/**
 * Checks that the given value is a valid operand for the LDC instruction.
 *
 * @param value the value to be checked.
 */
private void checkLdcConstant(final Object value) {
  if (value instanceof Type) {
    int sort = ((Type) value).getSort();
    if (sort != Type.OBJECT && sort != Type.ARRAY && sort != Type.METHOD) {
      throw new IllegalArgumentException("Illegal LDC constant value");
    }
    if (sort != Type.METHOD && (version & 0xFFFF) < Opcodes.V1_5) {
      throw new IllegalArgumentException("ldc of a constant class requires at least version 1.5");
    }
    if (sort == Type.METHOD && (version & 0xFFFF) < Opcodes.V1_7) {
      throw new IllegalArgumentException("ldc of a method type requires at least version 1.7");
    }
  } else if (value instanceof Handle) {
    if ((version & 0xFFFF) < Opcodes.V1_7) {
      throw new IllegalArgumentException("ldc of a Handle requires at least version 1.7");
    }
    Handle handle = (Handle) value;
    int tag = handle.getTag();
    if (tag < Opcodes.H_GETFIELD || tag > Opcodes.H_INVOKEINTERFACE) {
      throw new IllegalArgumentException("invalid handle tag " + tag);
    }
    checkInternalName(this.version, handle.getOwner(), "handle owner");
    if (tag <= Opcodes.H_PUTSTATIC) {
      checkDescriptor(this.version, handle.getDesc(), false);
    } else {
      checkMethodDescriptor(this.version, handle.getDesc());
    }
    String handleName = handle.getName();
    if (!("<init>".equals(handleName) && tag == Opcodes.H_NEWINVOKESPECIAL)) {
      checkMethodIdentifier(this.version, handleName, "handle name");
    }
  } else if (value instanceof ConstantDynamic) {
    if ((version & 0xFFFF) < Opcodes.V11) {
      throw new IllegalArgumentException("ldc of a ConstantDynamic requires at least version 11");
    }
    ConstantDynamic constantDynamic = (ConstantDynamic) value;
    checkMethodIdentifier(this.version, constantDynamic.getName(), "constant dynamic name");
    checkDescriptor(this.version, constantDynamic.getDescriptor(), false);
    checkLdcConstant(constantDynamic.getBootstrapMethod());
    int bootstrapMethodArgumentCount = constantDynamic.getBootstrapMethodArgumentCount();
    for (int i = 0; i < bootstrapMethodArgumentCount; ++i) {
      checkLdcConstant(constantDynamic.getBootstrapMethodArgument(i));
    }
  } else {
    checkConstant(value);
  }
}
 
源代码17 项目: JReFrameworker   文件: CheckMethodAdapter.java

/**
 * Checks that the given value is a valid operand for the LDC instruction.
 *
 * @param value the value to be checked.
 */
private void checkLdcConstant(final Object value) {
  if (value instanceof Type) {
    int sort = ((Type) value).getSort();
    if (sort != Type.OBJECT && sort != Type.ARRAY && sort != Type.METHOD) {
      throw new IllegalArgumentException("Illegal LDC constant value");
    }
    if (sort != Type.METHOD && (version & 0xFFFF) < Opcodes.V1_5) {
      throw new IllegalArgumentException("ldc of a constant class requires at least version 1.5");
    }
    if (sort == Type.METHOD && (version & 0xFFFF) < Opcodes.V1_7) {
      throw new IllegalArgumentException("ldc of a method type requires at least version 1.7");
    }
  } else if (value instanceof Handle) {
    if ((version & 0xFFFF) < Opcodes.V1_7) {
      throw new IllegalArgumentException("ldc of a Handle requires at least version 1.7");
    }
    Handle handle = (Handle) value;
    int tag = handle.getTag();
    if (tag < Opcodes.H_GETFIELD || tag > Opcodes.H_INVOKEINTERFACE) {
      throw new IllegalArgumentException("invalid handle tag " + tag);
    }
    checkInternalName(this.version, handle.getOwner(), "handle owner");
    if (tag <= Opcodes.H_PUTSTATIC) {
      checkDescriptor(this.version, handle.getDesc(), false);
    } else {
      checkMethodDescriptor(this.version, handle.getDesc());
    }
    String handleName = handle.getName();
    if (!("<init>".equals(handleName) && tag == Opcodes.H_NEWINVOKESPECIAL)) {
      checkMethodIdentifier(this.version, handleName, "handle name");
    }
  } else if (value instanceof ConstantDynamic) {
    if ((version & 0xFFFF) < Opcodes.V11) {
      throw new IllegalArgumentException("ldc of a ConstantDynamic requires at least version 11");
    }
    ConstantDynamic constantDynamic = (ConstantDynamic) value;
    checkMethodIdentifier(this.version, constantDynamic.getName(), "constant dynamic name");
    checkDescriptor(this.version, constantDynamic.getDescriptor(), false);
    checkLdcConstant(constantDynamic.getBootstrapMethod());
    int bootstrapMethodArgumentCount = constantDynamic.getBootstrapMethodArgumentCount();
    for (int i = 0; i < bootstrapMethodArgumentCount; ++i) {
      checkLdcConstant(constantDynamic.getBootstrapMethodArgument(i));
    }
  } else {
    checkConstant(value);
  }
}
 
源代码18 项目: radon   文件: ClassWrapper.java

/**
 * See https://docs.oracle.com/javase/specs/jvms/se12/html/jvms-4.html#jvms-4.9.1
 *
 * @return true if the wrapped {@link ClassNode} supports JSR instructions.
 */
public boolean allowsJSR() {
    return classNode.version <= Opcodes.V1_5 || classNode.version == Opcodes.V1_1;
}
 
 方法所在类
 同类方法