Community
Participate
Working Groups
For this weeks (proposed) I-build, there was an additional comparator error that was not in previous weeks: canonical: osgi.bundle,org.eclipse.jpt.jpa.db,2.0.0.v201104110000 Difference found for canonical: osgi.bundle,org.eclipse.jpt.jpa.db,2.0.0.v201104110000 between file:/home/data/httpd/download.eclipse.org/webtools/downloads/drops/R3.3.0/I-3.3.0-20110414085808/repository/ and file:/shared/webtools/projects/wtp-R3.3.0-I/workdir/I-3.3.0-20110428114127/buildrepository/dali-sdk The class org/eclipse/jpt/jpa/db/internal/DTPConnectionProfileWrapper.class is different. Since one difference between the two builds was our DTP pre-req, and this class appears DTP related, we should investigate, to make sure it wasn't due to some change in a string constant, or similar.
From decompiling (with JDT) and looking at resulting "byte codes" it appears the difference is in a "synthetic bridge" class being synchronized in one case (the old case) but not in newly compiled code. (pasted below). I'm a little amazed this can happen at all (and, could be an artifact of the "decompile"?) ... but does not sound like a "show stopper" for M7. Might want to fix in in RC candidate (by freshly re-tagging the org.eclipse.jpt.jpa.db bundle so the "newly compiled" one would be picked up. // Method descriptor #203 ()Lorg/eclipse/jpt/jpa/db/Database; // Stack: 1, Locals: 1 public synchronized bridge synthetic org.eclipse.jpt.jpa.db.Database getDatabase(); 0 aload_0 [this] 1 invokevirtual org.eclipse.jpt.jpa.db.internal.DTPConnectionProfileWrapper.getDatabase() : org.eclipse.jpt.jpa.db.internal.DTPDatabaseWrapper [341] 4 areturn Line numbers: [pc: 0, line: 1] vs. // Method descriptor #203 ()Lorg/eclipse/jpt/jpa/db/Database; // Stack: 1, Locals: 1 public bridge synthetic org.eclipse.jpt.jpa.db.Database getDatabase(); 0 aload_0 [this] 1 invokevirtual org.eclipse.jpt.jpa.db.internal.DTPConnectionProfileWrapper.getDatabase() : org.eclipse.jpt.jpa.db.internal.DTPDatabaseWrapper [341] 4 areturn Line numbers: [pc: 0, line: 1]
Created attachment 194317 [details] zip of the two jars in question The bundle in the "old" directory is the one previously compiled, and the one we are currently distributing. The bundle in the "new" directory is the newly compiled one, with new DTP pre-req, but not delivered (since same qualifier as previous build).
Neil, and Tran ... I'll turn this over to you now, to see what action you'd like to take, if any. My advice is to re-tag it for RC1, but I'd be happy to respin M7 if you think it is important to do so. I did only glance at the differences ... and don't really understand even what I see ... so, will leave to you. Besides the one class that was reported different, there were three other "wrapper" classes that show "different" when imported into Eclipse, and compared (I guess the comparator stops at first one if find different). I'm not sure how those other three were different from each other ... but my guess is sometime similarly related to synchronized synthetics?
The re-tag for rc1 sounds good. Thanks for investigting.
My guess is this is either a change to the compiler or to the decompiler. If it is a change to the decompiler, we can ignore it. If it is a change to the compiler, we can probably ignore it also. :-) The only change might be an ever-so-slight performance improvement when the bridge method is called from external clients that use the public interface (i.e. the interface). For the most part, inside the jpt.jpa.db plug-in we reference the implementation class, so the change would have no effect in those cases, since those would be calling the non-bridge version of the method.
I have re-tagged the org.eclipse.jpt.jpa.db bundle and released.
.