Commit 23a10efb authored by Eric Bruneton's avatar Eric Bruneton

Fix the issue, make the previously added test pass.

parent 2a673125
...@@ -1132,6 +1132,7 @@ public class ClassReader { ...@@ -1132,6 +1132,7 @@ public class ClassReader {
currentOffset - methodInfoOffset, currentOffset - methodInfoOffset,
synthetic, synthetic,
(context.currentMethodAccessFlags & Opcodes.ACC_DEPRECATED) != 0, (context.currentMethodAccessFlags & Opcodes.ACC_DEPRECATED) != 0,
readUnsignedShort(methodInfoOffset + 4),
signatureIndex, signatureIndex,
exceptionsOffset)) { exceptionsOffset)) {
return currentOffset; return currentOffset;
......
...@@ -2003,6 +2003,8 @@ final class MethodWriter extends MethodVisitor { ...@@ -2003,6 +2003,8 @@ final class MethodWriter extends MethodVisitor {
* of this method might be copied contains a Synthetic attribute. * of this method might be copied contains a Synthetic attribute.
* @param hasDeprecatedAttribute whether the method_info JVMS structure from which the attributes * @param hasDeprecatedAttribute whether the method_info JVMS structure from which the attributes
* of this method might be copied contains a Deprecated attribute. * of this method might be copied contains a Deprecated attribute.
* @param descriptorIndex the descriptor_index field of the method_info JVMS structure from which
* the attributes of this method might be copied.
* @param signatureIndex the constant pool index contained in the Signature attribute of the * @param signatureIndex the constant pool index contained in the Signature attribute of the
* method_info JVMS structure from which the attributes of this method might be copied, or 0. * method_info JVMS structure from which the attributes of this method might be copied, or 0.
* @param exceptionsOffset the offset in 'source.b' of the Exceptions attribute of the method_info * @param exceptionsOffset the offset in 'source.b' of the Exceptions attribute of the method_info
...@@ -2017,9 +2019,16 @@ final class MethodWriter extends MethodVisitor { ...@@ -2017,9 +2019,16 @@ final class MethodWriter extends MethodVisitor {
final int methodInfoLength, final int methodInfoLength,
final boolean hasSyntheticAttribute, final boolean hasSyntheticAttribute,
final boolean hasDeprecatedAttribute, final boolean hasDeprecatedAttribute,
final int descriptorIndex,
final int signatureIndex, final int signatureIndex,
final int exceptionsOffset) { final int exceptionsOffset) {
// If the method descriptor has changed, with more locals than the max_locals field of the
// original Code attribute, if any, then the original method attributes can't be copied. A
// conservative check on the descriptor changes alone ensures this (being more precise is not
// worth the additional complexity, because these cases should be rare -- if a transform changes
// a method descriptor, most of the time it needs to change the method's code too).
if (source != symbolTable.getSource() if (source != symbolTable.getSource()
|| descriptorIndex != this.descriptorIndex
|| signatureIndex != this.signatureIndex || signatureIndex != this.signatureIndex
|| hasDeprecatedAttribute != ((accessFlags & Opcodes.ACC_DEPRECATED) != 0)) { || hasDeprecatedAttribute != ((accessFlags & Opcodes.ACC_DEPRECATED) != 0)) {
return false; return false;
......
...@@ -32,7 +32,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows; ...@@ -32,7 +32,6 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.CsvSource;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment