Issue518758

classification
Title: java.lang.Class for itself broken
Type: Severity: normal
Components: Core Versions:
Milestone:
process
Status: closed Resolution: works for me
Dependencies: Superseder:
Assigned To: Nosy List: bzimmer, francisd
Priority: normal Keywords:

Created on 2002-02-17.14:38:51 by francisd, last changed 2005-02-28.05:40:00 by bzimmer.

Files
File name Uploaded Description Edit Remove
ForNameTest.java francisd, 2002-02-17.14:38:54 ForNameTest.java
Messages
msg578 (view) Author: Francis Devereux (francisd) Date: 2002-02-17.14:38:51
The object resulting from cl =
java.lang.Class.forName('java.lang.Class') should be an
instance of java.lang.Class and therefore have the
methods and properties of java.lang.Class.  For
example, cl.name should be 'java.lang.Class'.  However,
cl.name causes an AttributeError:
>>> import java.lang
>>> cl = java.lang.Class.forName('java.lang.Class')
>>> cl.name
Traceback (innermost last):
  File "<console>", line 1, in ?
AttributeError: instance attr: name
>>> cl.getName()
Traceback (innermost last):
  File "<console>", line 1, in ?
TypeError: getName(): expected 1 args; got 0
>>> cl.methods
Traceback (innermost last):
  File "<console>", line 1, in ?
AttributeError: instance attr: methods
>>> 

java.lang.Class.forName() works OK for other classes
though, for example:
>>> import java.lang
>>> al = java.lang.Class.forName('java.util.ArrayList')
>>> al.name
'java.util.ArrayList'
>>> al.getName()
'java.util.ArrayList'
>>> al.methods
array([public final native void
java.lang.Object.wait(long) throws
java.lang.InterruptedException, public final void
java.lang.Object.wait(long,int) throws
java.lang.InterruptedException, public final void
java.lang.Object.wait() throws
java.lang.InterruptedException, public final native
java.lang.Class java.lang.Object.getClass(), public
final native void java.lang.Object.notify(), public
final native void java.lang.Object.notifyAll(), public
java.lang.String
java.util.AbstractCollection.toString(), public boolean
java.util.AbstractCollection.remove(java.lang.Object),
public boolean
java.util.AbstractCollection.containsAll(java.util.Collection),
public boolean
java.util.AbstractCollection.removeAll(java.util.Collection),
public boolean
java.util.AbstractCollection.retainAll(java.util.Collection),
public int java.util.AbstractList.hashCode(), public
boolean
java.util.AbstractList.equals(java.lang.Object), public
java.util.Iterator java.util.AbstractList.iterator(),
public java.util.List
java.util.AbstractList.subList(int,int), public
java.util.ListIterator
java.util.AbstractList.listIterator(), public
java.util.ListIterator
java.util.AbstractList.listIterator(int), public
java.lang.Object java.util.ArrayList.clone(), public
int java.util.ArrayList.indexOf(java.lang.Object),
public int
java.util.ArrayList.lastIndexOf(java.lang.Object),
public java.lang.Object java.util.ArrayList.get(int),
public java.lang.Object
java.util.ArrayList.set(int,java.lang.Object), public
boolean java.util.ArrayList.add(java.lang.Object),
public void
java.util.ArrayList.add(int,java.lang.Object), public
int java.util.ArrayList.size(), public
java.lang.Object[] java.util.ArrayList.toArray(),
public java.lang.Object[]
java.util.ArrayList.toArray(java.lang.Object[]), public
boolean java.util.ArrayList.contains(java.lang.Object),
public void java.util.ArrayList.clear(), public
java.lang.Object java.util.ArrayList.remove(int),
public boolean java.util.ArrayList.isEmpty(), public
void java.util.ArrayList.trimToSize(), public void
java.util.ArrayList.ensureCapacity(int), public boolean
java.util.ArrayList.addAll(java.util.Collection),
public boolean
java.util.ArrayList.addAll(int,java.util.Collection)],
java.lang.reflect.Method)
>>> 

Also, using Class.forName("java.lang.Class") works OK
in plain java - see attached ForNameTest.java
[francis@gecko java]$ java ForNameTest 
cl.getName() = java.lang.Class
cl.getMethods() = [Ljava.lang.reflect.Method;@6ec612
[francis@gecko java]$

So it seems that jython is getting confused when it has
an instance of java.lang.Class for java.lang.Class
itself.

I am using jython 2.1 (final), and have tested on Sun
JDK 1.3.1 on Linux 2.4.14 and Sun JDK 1.3.0 on Windows
2000 SP2
msg579 (view) Author: Brian Zimmer (bzimmer) Date: 2005-02-28.05:40:00
Logged In: YES 
user_id=37674

I cannot reproduce this with the current CVS build.
History
Date User Action Args
2002-02-17 14:38:51francisdcreate