Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #218 from dmitri-gb/master
Add support for Java 11 NestHost and NestMembers attributes (JEP-181)
- Loading branch information
Showing
3 changed files
with
92 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} | ||
} |