diff -r 19f9b6548c70 -r 5cf6c432ef2f src/share/classes/com/sun/tools/classfile/ClassTranslator.java --- a/src/share/classes/com/sun/tools/classfile/ClassTranslator.java Fri Jan 14 13:59:18 2011 -0800 +++ b/src/share/classes/com/sun/tools/classfile/ClassTranslator.java Tue Jan 18 08:37:05 2011 -0800 @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2008, 2011 Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -31,7 +31,10 @@ import com.sun.tools.classfile.ConstantPool.CONSTANT_Float_info; import com.sun.tools.classfile.ConstantPool.CONSTANT_Integer_info; import com.sun.tools.classfile.ConstantPool.CONSTANT_InterfaceMethodref_info; +import com.sun.tools.classfile.ConstantPool.CONSTANT_InvokeDynamic_info; import com.sun.tools.classfile.ConstantPool.CONSTANT_Long_info; +import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodHandle_info; +import com.sun.tools.classfile.ConstantPool.CONSTANT_MethodType_info; import com.sun.tools.classfile.ConstantPool.CONSTANT_Methodref_info; import com.sun.tools.classfile.ConstantPool.CONSTANT_NameAndType_info; import com.sun.tools.classfile.ConstantPool.CONSTANT_String_info; @@ -304,6 +307,20 @@ return info; } + public CPInfo visitInvokeDynamic(CONSTANT_InvokeDynamic_info info, Map translations) { + CONSTANT_InvokeDynamic_info info2 = (CONSTANT_InvokeDynamic_info) translations.get(info); + if (info2 == null) { + ConstantPool cp2 = translate(info.cp, translations); + if (cp2 == info.cp) { + info2 = info; + } else { + info2 = new CONSTANT_InvokeDynamic_info(cp2, info.bootstrap_method_attr_index, info.name_and_type_index); + } + translations.put(info, info2); + } + return info; + } + public CPInfo visitLong(CONSTANT_Long_info info, Map translations) { CONSTANT_Long_info info2 = (CONSTANT_Long_info) translations.get(info); if (info2 == null) { @@ -339,6 +356,34 @@ return info; } + public CPInfo visitMethodHandle(CONSTANT_MethodHandle_info info, Map translations) { + CONSTANT_MethodHandle_info info2 = (CONSTANT_MethodHandle_info) translations.get(info); + if (info2 == null) { + ConstantPool cp2 = translate(info.cp, translations); + if (cp2 == info.cp) { + info2 = info; + } else { + info2 = new CONSTANT_MethodHandle_info(cp2, info.reference_kind, info.reference_index); + } + translations.put(info, info2); + } + return info; + } + + public CPInfo visitMethodType(CONSTANT_MethodType_info info, Map translations) { + CONSTANT_MethodType_info info2 = (CONSTANT_MethodType_info) translations.get(info); + if (info2 == null) { + ConstantPool cp2 = translate(info.cp, translations); + if (cp2 == info.cp) { + info2 = info; + } else { + info2 = new CONSTANT_MethodType_info(cp2, info.descriptor_index); + } + translations.put(info, info2); + } + return info; + } + public CPInfo visitString(CONSTANT_String_info info, Map translations) { CONSTANT_String_info info2 = (CONSTANT_String_info) translations.get(info); if (info2 == null) {