Issue1659616
Created on 2007-02-14.09:38:02 by pqu, last changed 2008-09-14.01:22:14 by zyasoft.
| Messages | |||
|---|---|---|---|
| msg1451 (view) | Author: Peter Quade (pqu) | Date: 2007-02-14.09:38:02 | |
Using the SwingWorker backport: https://swingworker.dev.java.net/ The publish method is protected, generic and has a variable number of arguments. Jythonc creates a transient super__publish method. Javac does not like transient methods. Code sample ======== import org.jdesktop.swingworker.SwingWorker as SwingWorker class MySwingWorker(SwingWorker): def doInBackground(self): # Explicitly creating a list seems to be necessary self.super__publish([""]) Works with jython (does nothing), breaks in jythonc. jythonc output ========= [...] 1 ./jpywork/swbug.java:93: modifier transient not allowed here public transient void super__publish(java.lang.Object[] arg0) { [...] system information ============ Mac OS X 10.4.8 (Darwin 8.8.1 Darwin Kernel Version 8.8.1: Mon Sep 25 19:42:00 PDT 2006; root:xnu-792.13.8.obj~1/RELEASE_I386 i386) java version "1.5.0_06" Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-112) Java HotSpot(TM) Client VM (build 1.5.0_06-64, mixed mode, sharing) |
|||
| msg1452 (view) | Author: Peter Quade (pqu) | Date: 2007-02-14.09:53:04 | |
jython2.2b1 Sorry. I frogot. I am currently investigating this with the svn HEAD version. The supplied codesample works, but the code in my project still breaks... |
|||
| msg1453 (view) | Author: Peter Quade (pqu) | Date: 2007-02-14.09:54:39 | |
no. it still won't compile if swing-worker.jar is in the classpath. |
|||
| msg1454 (view) | Author: Peter Quade (pqu) | Date: 2007-02-14.11:10:03 | |
It's me again. Still investigating with the SwingWorker class. It looks like jython is innocent. Using pure Java code to extract the methods of the class,
I found out that java itself thinks the publish method is transient.
--- snip ---
import java.lang.reflect.Method;
import org.jdesktop.swingworker.SwingWorker;
public class demo{
public static final void main(String[] args) {
System.out.println(SwingWorker.class.getName());
for (Method method : SwingWorker.class.getDeclaredMethods()) {
System.out.println(method.toString());
}
}
}
--- snap ----
$ java demo|grep publish
protected final transient void org.jdesktop.swingworker.SwingWorker.publish(java.lang.Object[])
javap get's it right... interesting. for jython this case is closed. sorry.
|
|||
| msg1455 (view) | Author: Peter Quade (pqu) | Date: 2007-02-14.11:18:32 | |
It seems jython still has to handle this problem: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6516895 varargs are marked transient by java.lang.reflect.Modifiers. This has to be filtered out for methods. I will try and create a patch. |
|||
| msg1456 (view) | Author: Peter Quade (pqu) | Date: 2007-02-14.11:48:38 | |
The Patch:
Index: Tools/jythonc/proxies.py
===================================================================
--- Tools/jythonc/proxies.py (revision 3105)
+++ Tools/jythonc/proxies.py (working copy)
@@ -252,6 +252,12 @@
for name in names:
for sig, (access, ret, throws) in self.jmethods[name].items():
#print name, access, isProtected(access), isFinal(access)
+
+ if isTransient(access):
+ # transient uses the same bits as vararg, transient make no sense for methods
+ # same problem might occur with bridge methods and volatile
+ access &= ~TRANSIENT
+
if isProtected(access):
supername = name
if isFinal(access):
|
|||
| msg3571 (view) | Author: Jim Baker (zyasoft) | Date: 2008-09-14.01:22:14 | |
jythonc will not be fixed |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2008-09-14 01:22:14 | zyasoft | set | status: open -> closed resolution: wont fix messages: + msg3571 nosy: + zyasoft |
| 2007-02-14 09:38:02 | pqu | create | |
Supported by Python Software Foundation,
Powered by Roundup