private static boolean referencesClone(TypeDefinition td) { return StreamSupport.stream(td.getConstantPool().spliterator(), false) .anyMatch(entry -> entry instanceof NameAndTypeDescriptorEntry && ((NameAndTypeDescriptorEntry)entry).getName().equals("clone") && ((NameAndTypeDescriptorEntry)entry).getType().startsWith("()")); } }
@Override public DynamicCallSite lookupDynamicCallSite(final int token) { final ConstantPool.InvokeDynamicInfoEntry entry = _constantPool.getEntry(token); final BootstrapMethodsAttribute attribute = SourceAttribute.find(AttributeNames.BootstrapMethods, _typeDefinition.getSourceAttributes()); final BootstrapMethodsTableEntry bootstrapMethod = attribute.getBootstrapMethods() .get(entry.bootstrapMethodAttributeIndex); final ConstantPool.NameAndTypeDescriptorEntry nameAndType = _constantPool.getEntry(entry.nameAndTypeDescriptorIndex); return new DynamicCallSite( bootstrapMethod.getMethod(), bootstrapMethod.getArguments(), nameAndType.getName(), _parser.parseMethodSignature(nameAndType.getType()) ); }
@Override public DynamicCallSite lookupDynamicCallSite(final int token) { final ConstantPool.InvokeDynamicInfoEntry entry = _constantPool.getEntry(token); final BootstrapMethodsAttribute attribute = SourceAttribute.find(AttributeNames.BootstrapMethods, _typeDefinition.getSourceAttributes()); final BootstrapMethodsTableEntry bootstrapMethod = attribute.getBootstrapMethods() .get(entry.bootstrapMethodAttributeIndex); final ConstantPool.NameAndTypeDescriptorEntry nameAndType = _constantPool.getEntry(entry.nameAndTypeDescriptorIndex); return new DynamicCallSite( bootstrapMethod.getMethod(), bootstrapMethod.getArguments(), nameAndType.getName(), _parser.parseMethodSignature(nameAndType.getType()) ); }
@Override public void visitNameAndTypeDescriptor(final ConstantPool.NameAndTypeDescriptorEntry info) { final int startColumn = _output.getColumn(); _output.writeDelimiter("#"); _output.writeLiteral(info.nameIndex); _output.writeDelimiter("."); _output.writeDelimiter("#"); _output.writeLiteral(info.typeDescriptorIndex); final int endColumn = _output.getColumn(); final int padding = (14 - (endColumn - startColumn)); final String paddingText = padding > 0 ? StringUtilities.repeat(' ', padding) : ""; _output.writeComment( format( paddingText + " // %1$s:%2$s", StringUtilities.escape(info.getName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(info.getType(), false, _settings.isUnicodeOutputEnabled()) ) ); }
@Override public void visitInvokeDynamicInfo(final ConstantPool.InvokeDynamicInfoEntry info) { final ConstantPool.NameAndTypeDescriptorEntry nameAndTypeInfo = info.getNameAndTypeDescriptor(); final int startColumn = _output.getColumn(); _output.writeLiteral(info.bootstrapMethodAttributeIndex); _output.writeDelimiter(", "); _output.writeDelimiter("#"); _output.writeLiteral(nameAndTypeInfo.nameIndex); _output.writeDelimiter("."); _output.writeDelimiter("#"); _output.writeLiteral(nameAndTypeInfo.typeDescriptorIndex); final int endColumn = _output.getColumn(); final int padding = (14 - (endColumn - startColumn)); final String paddingText = padding > 0 ? StringUtilities.repeat(' ', padding) : ""; _output.writeComment( format( paddingText + " // %1$s:%2$s", StringUtilities.escape(nameAndTypeInfo.getName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getType(), false, _settings.isUnicodeOutputEnabled()) ) ); }
@Override public void visitInvokeDynamicInfo(final ConstantPool.InvokeDynamicInfoEntry info) { final ConstantPool.NameAndTypeDescriptorEntry nameAndTypeInfo = info.getNameAndTypeDescriptor(); final int startColumn = _output.getColumn(); _output.writeLiteral(info.bootstrapMethodAttributeIndex); _output.writeDelimiter(", "); _output.writeDelimiter("#"); _output.writeLiteral(nameAndTypeInfo.nameIndex); _output.writeDelimiter("."); _output.writeDelimiter("#"); _output.writeLiteral(nameAndTypeInfo.typeDescriptorIndex); final int endColumn = _output.getColumn(); final int padding = (14 - (endColumn - startColumn)); final String paddingText = padding > 0 ? StringUtilities.repeat(' ', padding) : ""; _output.writeComment( format( paddingText + " // %1$s:%2$s", StringUtilities.escape(nameAndTypeInfo.getName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getType(), false, _settings.isUnicodeOutputEnabled()) ) ); }
@Override public void visitInvokeDynamicInfo(final ConstantPool.InvokeDynamicInfoEntry info) { final ConstantPool.NameAndTypeDescriptorEntry nameAndTypeInfo = info.getNameAndTypeDescriptor(); final int startColumn = _output.getColumn(); _output.writeLiteral(info.bootstrapMethodAttributeIndex); _output.writeDelimiter(", "); _output.writeDelimiter("#"); _output.writeLiteral(nameAndTypeInfo.nameIndex); _output.writeDelimiter("."); _output.writeDelimiter("#"); _output.writeLiteral(nameAndTypeInfo.typeDescriptorIndex); final int endColumn = _output.getColumn(); final int padding = (14 - (endColumn - startColumn)); final String paddingText = padding > 0 ? StringUtilities.repeat(' ', padding) : ""; _output.writeComment( format( paddingText + " // %1$s:%2$s", StringUtilities.escape(nameAndTypeInfo.getName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getType(), false, _settings.isUnicodeOutputEnabled()) ) ); }
@Override public void visitMethodReference(final ConstantPool.MethodReferenceEntry info) { final ConstantPool.NameAndTypeDescriptorEntry nameAndTypeInfo = info.getNameAndTypeInfo(); final int startColumn = _output.getColumn(); _output.writeDelimiter("#"); _output.writeLiteral(info.typeInfoIndex); _output.writeDelimiter("."); _output.writeDelimiter("#"); _output.writeLiteral(info.nameAndTypeDescriptorIndex); final int endColumn = _output.getColumn(); final int padding = (14 - (endColumn - startColumn)); final String paddingText = padding > 0 ? StringUtilities.repeat(' ', padding) : ""; _output.writeComment( format( paddingText + " // %1$s.%2$s:%3$s", StringUtilities.escape(info.getClassName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getType(), false, _settings.isUnicodeOutputEnabled()) ) ); }
@Override public void visitInterfaceMethodReference(final ConstantPool.InterfaceMethodReferenceEntry info) { final ConstantPool.NameAndTypeDescriptorEntry nameAndTypeInfo = info.getNameAndTypeInfo(); final int startColumn = _output.getColumn(); _output.writeDelimiter("#"); _output.writeLiteral(info.typeInfoIndex); _output.writeDelimiter("."); _output.writeDelimiter("#"); _output.writeLiteral(info.nameAndTypeDescriptorIndex); final int endColumn = _output.getColumn(); final int padding = (14 - (endColumn - startColumn)); final String paddingText = padding > 0 ? StringUtilities.repeat(' ', padding) : ""; _output.writeComment( format( paddingText + " // %1$s.%2$s:%3$s", StringUtilities.escape(info.getClassName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getType(), false, _settings.isUnicodeOutputEnabled()) ) ); }
@Override public void visitNameAndTypeDescriptor(final ConstantPool.NameAndTypeDescriptorEntry info) { final int startColumn = _output.getColumn(); _output.writeDelimiter("#"); _output.writeLiteral(info.nameIndex); _output.writeDelimiter("."); _output.writeDelimiter("#"); _output.writeLiteral(info.typeDescriptorIndex); final int endColumn = _output.getColumn(); final int padding = (14 - (endColumn - startColumn)); final String paddingText = padding > 0 ? StringUtilities.repeat(' ', padding) : ""; _output.writeComment( format( paddingText + " // %1$s:%2$s", StringUtilities.escape(info.getName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(info.getType(), false, _settings.isUnicodeOutputEnabled()) ) ); }
@Override public void visitMethodReference(final ConstantPool.MethodReferenceEntry info) { final ConstantPool.NameAndTypeDescriptorEntry nameAndTypeInfo = info.getNameAndTypeInfo(); final int startColumn = _output.getColumn(); _output.writeDelimiter("#"); _output.writeLiteral(info.typeInfoIndex); _output.writeDelimiter("."); _output.writeDelimiter("#"); _output.writeLiteral(info.nameAndTypeDescriptorIndex); final int endColumn = _output.getColumn(); final int padding = (14 - (endColumn - startColumn)); final String paddingText = padding > 0 ? StringUtilities.repeat(' ', padding) : ""; _output.writeComment( format( paddingText + " // %1$s.%2$s:%3$s", StringUtilities.escape(info.getClassName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getType(), false, _settings.isUnicodeOutputEnabled()) ) ); }
@Override public void visitInterfaceMethodReference(final ConstantPool.InterfaceMethodReferenceEntry info) { final ConstantPool.NameAndTypeDescriptorEntry nameAndTypeInfo = info.getNameAndTypeInfo(); final int startColumn = _output.getColumn(); _output.writeDelimiter("#"); _output.writeLiteral(info.typeInfoIndex); _output.writeDelimiter("."); _output.writeDelimiter("#"); _output.writeLiteral(info.nameAndTypeDescriptorIndex); final int endColumn = _output.getColumn(); final int padding = (14 - (endColumn - startColumn)); final String paddingText = padding > 0 ? StringUtilities.repeat(' ', padding) : ""; _output.writeComment( format( paddingText + " // %1$s.%2$s:%3$s", StringUtilities.escape(info.getClassName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(nameAndTypeInfo.getType(), false, _settings.isUnicodeOutputEnabled()) ) ); }
@Override public void visitNameAndTypeDescriptor(final ConstantPool.NameAndTypeDescriptorEntry info) { final int startColumn = _output.getColumn(); _output.writeDelimiter("#"); _output.writeLiteral(info.nameIndex); _output.writeDelimiter("."); _output.writeDelimiter("#"); _output.writeLiteral(info.typeDescriptorIndex); final int endColumn = _output.getColumn(); final int padding = (14 - (endColumn - startColumn)); final String paddingText = padding > 0 ? StringUtilities.repeat(' ', padding) : ""; _output.writeComment( format( paddingText + " // %1$s:%2$s", StringUtilities.escape(info.getName(), false, _settings.isUnicodeOutputEnabled()), StringUtilities.escape(info.getType(), false, _settings.isUnicodeOutputEnabled()) ) ); }
@Override public DynamicCallSite lookupDynamicCallSite(final int token) { final ConstantPool.InvokeDynamicInfoEntry entry = _constantPool.getEntry(token); final BootstrapMethodsAttribute attribute = SourceAttribute.find(AttributeNames.BootstrapMethods, _typeDefinition.getSourceAttributes()); final BootstrapMethodsTableEntry bootstrapMethod = attribute.getBootstrapMethods() .get(entry.bootstrapMethodAttributeIndex); final ConstantPool.NameAndTypeDescriptorEntry nameAndType = _constantPool.getEntry(entry.nameAndTypeDescriptorIndex); return new DynamicCallSite( entry.bootstrapMethodAttributeIndex, bootstrapMethod.getMethodHandle(), bootstrapMethod.getArguments(), nameAndType.getName(), _parser.parseMethodSignature(nameAndType.getType()) ); }
@Override public MethodReference lookupMethod(final int typeToken, final int nameAndTypeToken) { final ConstantPool.NameAndTypeDescriptorEntry nameAndDescriptor = _constantPool.getEntry(nameAndTypeToken); return _parser.parseMethod( lookupType(typeToken), nameAndDescriptor.getName(), nameAndDescriptor.getType() ); }
@Override public MethodReference lookupMethod(final int typeToken, final int nameAndTypeToken) { final ConstantPool.NameAndTypeDescriptorEntry nameAndDescriptor = _constantPool.getEntry(nameAndTypeToken); return _parser.parseMethod( lookupType(typeToken), nameAndDescriptor.getName(), nameAndDescriptor.getType() ); }
@Override public FieldReference lookupField(final int typeToken, final int nameAndTypeToken) { final ConstantPool.NameAndTypeDescriptorEntry nameAndDescriptor = _constantPool.getEntry(nameAndTypeToken); return _parser.parseField( lookupType(typeToken), nameAndDescriptor.getName(), nameAndDescriptor.getType() ); }
@Override public FieldReference lookupField(final int typeToken, final int nameAndTypeToken) { final ConstantPool.NameAndTypeDescriptorEntry nameAndDescriptor = _constantPool.getEntry(nameAndTypeToken); return _parser.parseField( lookupType(typeToken), nameAndDescriptor.getName(), nameAndDescriptor.getType() ); }
@Override public MethodReference lookupMethod(final int typeToken, final int nameAndTypeToken) { final ConstantPool.NameAndTypeDescriptorEntry nameAndDescriptor = _constantPool.getEntry(nameAndTypeToken); return _parser.parseMethod( lookupType(typeToken), nameAndDescriptor.getName(), nameAndDescriptor.getType() ); }
@Override public FieldReference lookupField(final int typeToken, final int nameAndTypeToken) { final ConstantPool.NameAndTypeDescriptorEntry nameAndDescriptor = _constantPool.getEntry(nameAndTypeToken); return _parser.parseField( lookupType(typeToken), nameAndDescriptor.getName(), nameAndDescriptor.getType() ); }