From: chibash Date: Sun, 2 Sep 2018 13:56:45 +0000 (+0900) Subject: modifies NestHostAttribute and NestMembersAttribute and adds test code X-Git-Tag: rel_3_24_0_rc~10 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=c52b9c7100412288eecf2ed098c63a0ba1643000;p=javassist.git modifies NestHostAttribute and NestMembersAttribute and adds test code --- diff --git a/Readme.html b/Readme.html index 5ffb7165..b1ff16ff 100644 --- a/Readme.html +++ b/Readme.html @@ -283,13 +283,14 @@ see javassist.Dump.

-version 3.24

-version 3.23.1 on July 2, 2018

diff --git a/build.xml b/build.xml index d654536f..365aa604 100644 --- a/build.xml +++ b/build.xml @@ -6,7 +6,7 @@ - + diff --git a/javassist.jar b/javassist.jar index 7a5d8200..4ff2cc13 100644 Binary files a/javassist.jar and b/javassist.jar differ diff --git a/pom.xml b/pom.xml index adb9c619..8900978f 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ Javassist (JAVA programming ASSISTant) makes Java bytecode manipulation simple. It is a class library for editing bytecodes in Java. - 3.23.1-GA + 3.24-GA Javassist http://www.javassist.org/ @@ -151,10 +151,10 @@ maven-compiler-plugin 3.2 - 1.6 - 1.6 - 1.9 - 1.9 + 1.8 + 1.8 + 11 + 11 -parameters diff --git a/src/main/META-INF/MANIFEST.MF b/src/main/META-INF/MANIFEST.MF index 448c6fca..90fb0144 100644 --- a/src/main/META-INF/MANIFEST.MF +++ b/src/main/META-INF/MANIFEST.MF @@ -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 diff --git a/src/main/javassist/bytecode/NestHostAttribute.java b/src/main/javassist/bytecode/NestHostAttribute.java index ae9f1e5d..5a52336d 100644 --- a/src/main/javassist/bytecode/NestHostAttribute.java +++ b/src/main/javassist/bytecode/NestHostAttribute.java @@ -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; /** * NestHost_attribute. + * 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 host_class_index. The constant pool entry + * at this entry is a CONSTANT_Class_info structure. + * @return the value of host_class_index. + */ + public int hostClassIndex() { + return ByteArray.readU16bit(info, 0); + } } diff --git a/src/main/javassist/bytecode/NestMembersAttribute.java b/src/main/javassist/bytecode/NestMembersAttribute.java index 679dc28c..6a3023b4 100644 --- a/src/main/javassist/bytecode/NestMembersAttribute.java +++ b/src/main/javassist/bytecode/NestMembersAttribute.java @@ -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; /** * NestMembers_attribute. + * 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 number_of_classes. + * @return the number of the classes recorded in this attribute. + */ + public int numberOfClasses() { + return ByteArray.readU16bit(info, 0); + } + + /** Returns classes[index]. + * + * @param index the index into classes. + * @return the value at the given index in the classes array. + * It is an index into the constant pool. + * The constant pool entry at the returned index is a + * CONSTANT_Class_info structure. + */ + public int memberClass(int index) { + return ByteArray.readU16bit(info, index * 2 + 2); + } } diff --git a/src/test/javassist/JvstTest5.java b/src/test/javassist/JvstTest5.java index 6f6eb075..b0cbbcca 100644 --- a/src/test/javassist/JvstTest5.java +++ b/src/test/javassist/JvstTest5.java @@ -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")); + } }