@@ -283,13 +283,14 @@ see javassist.Dump. | |||
<p>-version 3.24 | |||
<ul> | |||
<li>JIRA JASSIST-267. | |||
<li>JIRA JASSIST-267.</li> | |||
<li>Github PR #218.</li> | |||
</ul> | |||
</p> | |||
<p>-version 3.23.1 on July 2, 2018 | |||
<ul> | |||
<li>Github pull issue #171.</li> | |||
<li>Github PR #171.</li> | |||
</ul> | |||
</p> | |||
@@ -6,7 +6,7 @@ | |||
<project name="javassist" default="jar" basedir="."> | |||
<property name="dist-version" value="javassist-3.23.1-GA"/> | |||
<property name="dist-version" value="javassist-3.24-GA"/> | |||
<property environment="env"/> | |||
<property name="target.jar" value="javassist.jar"/> |
@@ -7,7 +7,7 @@ | |||
Javassist (JAVA programming ASSISTant) makes Java bytecode manipulation | |||
simple. It is a class library for editing bytecodes in Java. | |||
</description> | |||
<version>3.23.1-GA</version> | |||
<version>3.24-GA</version> | |||
<name>Javassist</name> | |||
<url>http://www.javassist.org/</url> | |||
@@ -151,10 +151,10 @@ | |||
<artifactId>maven-compiler-plugin</artifactId> | |||
<version>3.2</version> | |||
<configuration> | |||
<source>1.6</source> | |||
<target>1.6</target> | |||
<testSource>1.9</testSource> | |||
<testTarget>1.9</testTarget> | |||
<source>1.8</source> | |||
<target>1.8</target> | |||
<testSource>11</testSource> | |||
<testTarget>11</testTarget> | |||
<testCompilerArgument>-parameters</testCompilerArgument> | |||
</configuration> | |||
</plugin> |
@@ -1,4 +1,4 @@ | |||
Specification-Title: Javassist | |||
Specification-Vendor: Shigeru Chiba, www.javassist.org | |||
Specification-Version: 3.23.1-GA | |||
Specification-Version: 3.24-GA | |||
Main-Class: javassist.CtClass |
@@ -1,3 +1,19 @@ | |||
/* | |||
* Javassist, a Java-bytecode translator toolkit. | |||
* Copyright (C) 1999- Shigeru Chiba. All Rights Reserved. | |||
* | |||
* The contents of this file are subject to the Mozilla Public License Version | |||
* 1.1 (the "License"); you may not use this file except in compliance with | |||
* the License. Alternatively, the contents of this file may be used under | |||
* the terms of the GNU Lesser General Public License Version 2.1 or later, | |||
* or the Apache License Version 2.0. | |||
* | |||
* Software distributed under the License is distributed on an "AS IS" basis, | |||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
* for the specific language governing rights and limitations under the | |||
* License. | |||
*/ | |||
package javassist.bytecode; | |||
import java.io.DataInputStream; | |||
@@ -6,6 +22,7 @@ import java.util.Map; | |||
/** | |||
* <code>NestHost_attribute</code>. | |||
* It was introduced by JEP-181. See JVMS 4.7.28 for the specification. | |||
*/ | |||
public class NestHostAttribute extends AttributeInfo { | |||
/** | |||
@@ -36,4 +53,13 @@ public class NestHostAttribute extends AttributeInfo { | |||
int newHostIndex = getConstPool().copy(hostIndex, newCp, classnames); | |||
return new NestHostAttribute(newCp, newHostIndex); | |||
} | |||
/** | |||
* Returns <code>host_class_index</code>. The constant pool entry | |||
* at this entry is a <code>CONSTANT_Class_info</code> structure. | |||
* @return the value of <code>host_class_index</code>. | |||
*/ | |||
public int hostClassIndex() { | |||
return ByteArray.readU16bit(info, 0); | |||
} | |||
} |
@@ -1,3 +1,19 @@ | |||
/* | |||
* Javassist, a Java-bytecode translator toolkit. | |||
* Copyright (C) 1999- Shigeru Chiba. All Rights Reserved. | |||
* | |||
* The contents of this file are subject to the Mozilla Public License Version | |||
* 1.1 (the "License"); you may not use this file except in compliance with | |||
* the License. Alternatively, the contents of this file may be used under | |||
* the terms of the GNU Lesser General Public License Version 2.1 or later, | |||
* or the Apache License Version 2.0. | |||
* | |||
* Software distributed under the License is distributed on an "AS IS" basis, | |||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License | |||
* for the specific language governing rights and limitations under the | |||
* License. | |||
*/ | |||
package javassist.bytecode; | |||
import java.io.DataInputStream; | |||
@@ -6,6 +22,7 @@ import java.util.Map; | |||
/** | |||
* <code>NestMembers_attribute</code>. | |||
* It was introduced by JEP-181. See JVMS 4.7.29 for the specification. | |||
*/ | |||
public class NestMembersAttribute extends AttributeInfo { | |||
/** | |||
@@ -46,4 +63,24 @@ public class NestMembersAttribute extends AttributeInfo { | |||
return new NestMembersAttribute(newCp, dest); | |||
} | |||
/** | |||
* Returns <code>number_of_classes</code>. | |||
* @return the number of the classes recorded in this attribute. | |||
*/ | |||
public int numberOfClasses() { | |||
return ByteArray.readU16bit(info, 0); | |||
} | |||
/** Returns <code>classes[index]</code>. | |||
* | |||
* @param index the index into <code>classes</code>. | |||
* @return the value at the given index in the <code>classes</code> array. | |||
* It is an index into the constant pool. | |||
* The constant pool entry at the returned index is a | |||
* <code>CONSTANT_Class_info</code> structure. | |||
*/ | |||
public int memberClass(int index) { | |||
return ByteArray.readU16bit(info, index * 2 + 2); | |||
} | |||
} |
@@ -9,6 +9,8 @@ import javassist.bytecode.AttributeInfo; | |||
import javassist.bytecode.ClassFile; | |||
import javassist.bytecode.ConstPool; | |||
import javassist.bytecode.InnerClassesAttribute; | |||
import javassist.bytecode.NestHostAttribute; | |||
import javassist.bytecode.NestMembersAttribute; | |||
import javassist.expr.ExprEditor; | |||
import javassist.expr.Handler; | |||
import javassist.expr.MethodCall; | |||
@@ -416,4 +418,26 @@ public class JvstTest5 extends JvstTestRoot { | |||
Object obj = make(cc.getName()); | |||
assertEquals(1, invoke(obj, "test")); | |||
} | |||
public void testNestHostAttribute() throws Exception { | |||
CtClass cc = sloader.get("test5.NestHost$Foo"); | |||
ClassFile cf = cc.getClassFile(); | |||
NestHostAttribute attr = (NestHostAttribute)cf.getAttribute(NestHostAttribute.tag); | |||
assertEquals(test5.NestHost.class.getName(), | |||
cf.getConstPool().getClassInfo(attr.hostClassIndex())); | |||
} | |||
public void testNestMembersAttribute() throws Exception { | |||
CtClass cc = sloader.get("test5.NestHost"); | |||
ClassFile cf = cc.getClassFile(); | |||
NestMembersAttribute attr = (NestMembersAttribute)cf.getAttribute(NestMembersAttribute.tag); | |||
assertEquals(2, attr.numberOfClasses()); | |||
String[] names = new String[2]; | |||
for (int i = 0; i < 2; i++) | |||
names[i] = cf.getConstPool().getClassInfo(attr.memberClass(i)); | |||
assertFalse(names[0].equals(names[1])); | |||
assertTrue(names[0].equals("test5.NestHost$Foo") || names[0].equals("test5.NestHost$Bar")); | |||
assertTrue(names[1].equals("test5.NestHost$Foo") || names[1].equals("test5.NestHost$Bar")); | |||
} | |||
} |