| Summary: | investigate DTP related comparator error | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [WebTools] WTP Releng | Reporter: | David Williams <david_williams> | ||||
| Component: | releng | Assignee: | Tran Le <tranle1> | ||||
| Status: | RESOLVED FIXED | QA Contact: | David Williams <david_williams> | ||||
| Severity: | normal | ||||||
| Priority: | P3 | CC: | brian.vosburgh, neil.hauge, tranle1 | ||||
| Version: | 3.10 | Flags: | david_williams:
pmc_approved+
|
||||
| Target Milestone: | 3.10.0 | ||||||
| Hardware: | PC | ||||||
| OS: | Linux | ||||||
| Whiteboard: | PMC_approved | ||||||
| Attachments: |
|
||||||
|
Description
David Williams
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. . |