On 4/14/16 6:21 AM, Remi Forax wrote:
you are not the first one to try to change the integers defined in 
org.objectweb.asm.Opcodes, those values are compared by ref (not by value) 
inside ASM.
You're patch will change the behavior of any Interpreters that also use some 
Integers created by Integer.valueOf() because valueOf may cache the Integer 
references.

I will add a comment in the ASM trunk for avoid such refactoring in the future.

Hi Remi,

Oh! This is the kind of issue that I was concerned about. Most code doesn't depend on identity semantics, and it's sometimes hard to tell if it does. I'll revert the autoboxing changes.

Since we still need to get rid of the warnings, we'll need to suppress them. I think adding @SuppressWarnings at the top of the file is a little cleaner than adding it in front of each declaration, even though it's farther away. What do you think of the diff below?

(I agree with Brian's comments about cleaning up this code, but I think that should be done separately from this changeset.)

Thanks,

s'marks



diff -r 36025112dfdb src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java --- a/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java Thu Apr 14 12:17:23 2016 -0700 +++ b/src/java.base/share/classes/jdk/internal/org/objectweb/asm/Opcodes.java Thu Apr 14 15:14:46 2016 -0700
@@ -70,6 +70,7 @@
  * @author Eric Bruneton
  * @author Eugene Kuleshov
  */
+@SuppressWarnings("deprecation") // for Integer(int) constructor
 public interface Opcodes {

     // ASM API versions
@@ -176,6 +177,8 @@
      */
     int F_SAME1 = 4;

+    // For reference comparison purposes, construct new instances
+    // instead of using valueOf() or autoboxing.
     Integer TOP = new Integer(0);
     Integer INTEGER = new Integer(1);
     Integer FLOAT = new Integer(2);

Reply via email to