Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for Java 11 NestHost and NestMembers attributes #218

Merged
merged 1 commit into from Sep 2, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/main/javassist/bytecode/AttributeInfo.java
Expand Up @@ -108,6 +108,10 @@ else if (nameStr.equals(LocalVariableTypeAttribute.tag))
/* Note that the names of Annotations attributes begin with 'R'. */
if (nameStr.equals(MethodParametersAttribute.tag))
return new MethodParametersAttribute(cp, name, in);
else if (nameStr.equals(NestHostAttribute.tag))
return new NestHostAttribute(cp, name, in);
else if (nameStr.equals(NestMembersAttribute.tag))
return new NestMembersAttribute(cp, name, in);
else if (nameStr.equals(AnnotationsAttribute.visibleTag)
|| nameStr.equals(AnnotationsAttribute.invisibleTag))
// RuntimeVisibleAnnotations or RuntimeInvisibleAnnotations
Expand Down
39 changes: 39 additions & 0 deletions src/main/javassist/bytecode/NestHostAttribute.java
@@ -0,0 +1,39 @@
package javassist.bytecode;

import java.io.DataInputStream;
import java.io.IOException;
import java.util.Map;

/**
* <code>NestHost_attribute</code>.
*/
public class NestHostAttribute extends AttributeInfo {
/**
* The name of this attribute <code>"NestHost"</code>.
*/
public static final String tag = "NestHost";

NestHostAttribute(ConstPool cp, int n, DataInputStream in) throws IOException {
super(cp, n, in);
}

private NestHostAttribute(ConstPool cp, int hostIndex) {
super(cp, tag, new byte[2]);
ByteArray.write16bit(hostIndex, get(), 0);
}

/**
* Makes a copy. Class names are replaced according to the
* given <code>Map</code> object.
*
* @param newCp the constant pool table used by the new copy.
* @param classnames pairs of replaced and substituted
* class names.
*/
@Override
public AttributeInfo copy(ConstPool newCp, Map<String, String> classnames) {
int hostIndex = ByteArray.readU16bit(get(), 0);
int newHostIndex = getConstPool().copy(hostIndex, newCp, classnames);
return new NestHostAttribute(newCp, newHostIndex);
}
}
49 changes: 49 additions & 0 deletions src/main/javassist/bytecode/NestMembersAttribute.java
@@ -0,0 +1,49 @@
package javassist.bytecode;

import java.io.DataInputStream;
import java.io.IOException;
import java.util.Map;

/**
* <code>NestMembers_attribute</code>.
*/
public class NestMembersAttribute extends AttributeInfo {
/**
* The name of this attribute <code>"NestMembers"</code>.
*/
public static final String tag = "NestMembers";

NestMembersAttribute(ConstPool cp, int n, DataInputStream in) throws IOException {
super(cp, n, in);
}

private NestMembersAttribute(ConstPool cp, byte[] info) {
super(cp, tag, info);
}

/**
* Makes a copy. Class names are replaced according to the
* given <code>Map</code> object.
*
* @param newCp the constant pool table used by the new copy.
* @param classnames pairs of replaced and substituted
* class names.
*/
@Override
public AttributeInfo copy(ConstPool newCp, Map<String, String> classnames) {
byte[] src = get();
byte[] dest = new byte[src.length];
ConstPool cp = getConstPool();

int n = ByteArray.readU16bit(src, 0);
ByteArray.write16bit(n, dest, 0);

for (int i = 0, j = 2; i < n; ++i, j += 2) {
int index = ByteArray.readU16bit(src, j);
int newIndex = cp.copy(index, newCp, classnames);
ByteArray.write16bit(newIndex, dest, j);
}

return new NestMembersAttribute(newCp, dest);
}
}