src/share/classes/com/sun/tools/classfile/ClassTranslator.java

changeset 826
5cf6c432ef2f
parent 581
f2fdd52e4e87
child 1013
8eb952f43b11
     1.1 --- a/src/share/classes/com/sun/tools/classfile/ClassTranslator.java	Fri Jan 14 13:59:18 2011 -0800
     1.2 +++ b/src/share/classes/com/sun/tools/classfile/ClassTranslator.java	Tue Jan 18 08:37:05 2011 -0800
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved.
     1.6 + * Copyright (c) 2008, 2011 Oracle and/or its affiliates. All rights reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -31,7 +31,10 @@
    1.11  import com.sun.tools.classfile.ConstantPool.CONSTANT_Float_info;
    1.12  import com.sun.tools.classfile.ConstantPool.CONSTANT_Integer_info;
    1.13  import com.sun.tools.classfile.ConstantPool.CONSTANT_InterfaceMethodref_info;
    1.14 +import com.sun.tools.classfile.ConstantPool.CONSTANT_InvokeDynamic_info;
    1.15  import com.sun.tools.classfile.ConstantPool.CONSTANT_Long_info;
    1.16 +import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodHandle_info;
    1.17 +import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodType_info;
    1.18  import com.sun.tools.classfile.ConstantPool.CONSTANT_Methodref_info;
    1.19  import com.sun.tools.classfile.ConstantPool.CONSTANT_NameAndType_info;
    1.20  import com.sun.tools.classfile.ConstantPool.CONSTANT_String_info;
    1.21 @@ -304,6 +307,20 @@
    1.22          return info;
    1.23      }
    1.24  
    1.25 +    public CPInfo visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, Map<Object, Object> translations) {
    1.26 +        CONSTANT_InvokeDynamic_info info2 = (CONSTANT_InvokeDynamic_info) translations.get(info);
    1.27 +        if (info2 == null) {
    1.28 +            ConstantPool cp2 = translate(info.cp, translations);
    1.29 +            if (cp2 == info.cp) {
    1.30 +                info2 = info;
    1.31 +            } else {
    1.32 +                info2 = new CONSTANT_InvokeDynamic_info(cp2, info.bootstrap_method_attr_index, info.name_and_type_index);
    1.33 +            }
    1.34 +            translations.put(info, info2);
    1.35 +        }
    1.36 +        return info;
    1.37 +    }
    1.38 +
    1.39      public CPInfo visitLong(CONSTANT_Long_info info, Map<Object, Object> translations) {
    1.40          CONSTANT_Long_info info2 = (CONSTANT_Long_info) translations.get(info);
    1.41          if (info2 == null) {
    1.42 @@ -339,6 +356,34 @@
    1.43          return info;
    1.44      }
    1.45  
    1.46 +    public CPInfo visitMethodHandle(CONSTANT_MethodHandle_info info, Map<Object, Object> translations) {
    1.47 +        CONSTANT_MethodHandle_info info2 = (CONSTANT_MethodHandle_info) translations.get(info);
    1.48 +        if (info2 == null) {
    1.49 +            ConstantPool cp2 = translate(info.cp, translations);
    1.50 +            if (cp2 == info.cp) {
    1.51 +                info2 = info;
    1.52 +            } else {
    1.53 +                info2 = new CONSTANT_MethodHandle_info(cp2, info.reference_kind, info.reference_index);
    1.54 +            }
    1.55 +            translations.put(info, info2);
    1.56 +        }
    1.57 +        return info;
    1.58 +    }
    1.59 +
    1.60 +    public CPInfo visitMethodType(CONSTANT_MethodType_info info, Map<Object, Object> translations) {
    1.61 +        CONSTANT_MethodType_info info2 = (CONSTANT_MethodType_info) translations.get(info);
    1.62 +        if (info2 == null) {
    1.63 +            ConstantPool cp2 = translate(info.cp, translations);
    1.64 +            if (cp2 == info.cp) {
    1.65 +                info2 = info;
    1.66 +            } else {
    1.67 +                info2 = new CONSTANT_MethodType_info(cp2, info.descriptor_index);
    1.68 +            }
    1.69 +            translations.put(info, info2);
    1.70 +        }
    1.71 +        return info;
    1.72 +    }
    1.73 +
    1.74      public CPInfo visitString(CONSTANT_String_info info, Map<Object, Object> translations) {
    1.75          CONSTANT_String_info info2 = (CONSTANT_String_info) translations.get(info);
    1.76          if (info2 == null) {

mercurial