diff --git a/src/main/javassist/bytecode/LocalVariableAttribute.java b/src/main/javassist/bytecode/LocalVariableAttribute.java
index a0a62cc3..dcee7965 100644
--- a/src/main/javassist/bytecode/LocalVariableAttribute.java
+++ b/src/main/javassist/bytecode/LocalVariableAttribute.java
@@ -217,6 +217,22 @@ public String variableName(int i) {
return getConstPool().getUtf8Info(nameIndex(i));
}
+ /**
+ * Returns the name of the local variable with given index.
+ * If you want get the parameter name of method with correct order,
+ * should using this method.
+ *
+ * @param index the index of the local variable.
+ */
+ public String variableNameByIndex(int index) {
+ for (int i = 0; i < tableLength(); i++) {
+ if (index(i) == index) {
+ return variableName(i);
+ }
+ }
+ throw new ArrayIndexOutOfBoundsException();
+ }
+
/**
* Returns the value of
* local_variable_table[i].descriptor_index
.
diff --git a/src/main/javassist/bytecode/MethodParametersAttribute.java b/src/main/javassist/bytecode/MethodParametersAttribute.java
index 12521095..b9c252a9 100644
--- a/src/main/javassist/bytecode/MethodParametersAttribute.java
+++ b/src/main/javassist/bytecode/MethodParametersAttribute.java
@@ -56,6 +56,14 @@ public int name(int i) {
return ByteArray.readU16bit(info, i * 4 + 1);
}
+ /**
+ * Returns the name of the i-th element of parameters
.
+ * @param i the position of the parameter.
+ */
+ public String parameterName(int i) {
+ return getConstPool().getUtf8Info(name(i));
+ }
+
/**
* Returns the value of access_flags
of the i-th element of parameters
.
*
diff --git a/src/test/javassist/JvstTest4.java b/src/test/javassist/JvstTest4.java
index d53148bd..259451b9 100644
--- a/src/test/javassist/JvstTest4.java
+++ b/src/test/javassist/JvstTest4.java
@@ -1019,11 +1019,15 @@ public void testMethodParameters() throws Exception {
assertEquals(2, attr.size());
assertEquals("i", cp.getUtf8Info(attr.name(0)));
assertEquals("s", cp.getUtf8Info(attr.name(1)));
+ assertEquals("i", attr.parameterName(0));
+ assertEquals("s", attr.parameterName(1));
attr = (MethodParametersAttribute)attr.copy(cp, null);
assertEquals(2, attr.size());
assertEquals("i", cp.getUtf8Info(attr.name(0)));
assertEquals("s", cp.getUtf8Info(attr.name(1)));
+ assertEquals("i", attr.parameterName(0));
+ assertEquals("s", attr.parameterName(1));
}
// JIRA JASSIST-220
diff --git a/src/test/javassist/bytecode/BytecodeTest.java b/src/test/javassist/bytecode/BytecodeTest.java
index 5ddf5d5b..7aef1cce 100644
--- a/src/test/javassist/bytecode/BytecodeTest.java
+++ b/src/test/javassist/bytecode/BytecodeTest.java
@@ -354,6 +354,9 @@ public void testLocalVarAttribute() throws Exception {
assertEquals("I", ainfo2.descriptor(i));
}
print("**** end ***");
+
+ assertEquals("this", ainfo2.variableNameByIndex(0));
+ assertEquals("i", ainfo2.variableNameByIndex(1));
}
public void testAnnotations() throws Exception {