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) {