diff options
author | Rüdiger Timm <rt@openoffice.org> | 2003-04-23 15:53:06 +0000 |
---|---|---|
committer | Rüdiger Timm <rt@openoffice.org> | 2003-04-23 15:53:06 +0000 |
commit | 1573789b92d6b968730157273f35f009b12cca8a (patch) | |
tree | 10d1a12d599bd8548341eaa576dc9afa672fdd3e /ridljar/com | |
parent | d52f3c2091e848ce27f381d11314802dc4195a8b (diff) |
INTEGRATION: CWS uno2 (1.8.2.1.12); FILE MERGED
2003/04/07 08:29:40 sb 1.8.2.1.12.1: #108678# Make getZClass return a useful class in more cases (esp. always if the Type represents a UNO interface).
Diffstat (limited to 'ridljar/com')
-rw-r--r-- | ridljar/com/sun/star/uno/Type.java | 104 |
1 files changed, 98 insertions, 6 deletions
diff --git a/ridljar/com/sun/star/uno/Type.java b/ridljar/com/sun/star/uno/Type.java index 9e368500d15a..a7fc38ed0bf0 100644 --- a/ridljar/com/sun/star/uno/Type.java +++ b/ridljar/com/sun/star/uno/Type.java @@ -2,9 +2,9 @@ * * $RCSfile: Type.java,v $ * - * $Revision: 1.9 $ + * $Revision: 1.10 $ * - * last change: $Author: hr $ $Date: 2003-03-26 15:44:55 $ + * last change: $Author: rt $ $Date: 2003-04-23 16:53:06 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -321,15 +321,107 @@ public class Type { /** * Gets the Java class. * - * <p>Returns <code>null</code> if this type has not been constructed by - * <code>Class</code>.</p> + * <p>The implementation of + * <code>com.sun.star.lib.uno.typedesc.TypeDescription</code> (for example, + * <code>getTypeDescription(Type)</code>) seems to require that the mapping + * from UNO types to Java classes is an injection. Therefore, for example, + * the UNO type <code>SHORT</code> maps to the Java class + * <code>short.class</code>, but the UNO type <code>UNSIGNED SHORT</code> + * maps to <code>null</code>. * - * @return the type name; may be <code>null</code> + * @return the type name; may be <code>null</code> in extreme situations + * (inconsistent <code>TypeClass</code>, error loading a class), or when + * there is no distinct Java class to represent a UNO type (so that the + * mapping from UNO types to Java classes is an injection) * * @since UDK1.0 */ public Class getZClass() { - return _class; + if (_class != null) { + return _class; + } else switch (_typeClass.getValue()) { + case TypeClass.VOID_value: + return void.class; + case TypeClass.BOOLEAN_value: + return boolean.class; + case TypeClass.BYTE_value: + return byte.class; + case TypeClass.SHORT_value: + return short.class; + case TypeClass.LONG_value: + return int.class; + case TypeClass.HYPER_value: + return long.class; + case TypeClass.FLOAT_value: + return float.class; + case TypeClass.DOUBLE_value: + return double.class; + case TypeClass.CHAR_value: + return char.class; + case TypeClass.STRING_value: + return String.class; + case TypeClass.TYPE_value: + return Type.class; + case TypeClass.ANY_value: + return Object.class; + case TypeClass.SEQUENCE_value: + StringBuffer buf = new StringBuffer(); + int offset = 0; + for (; _typeName.startsWith("[]", offset); offset += "[]".length()) + { + buf.append('['); + } + String base = _typeName.substring(offset); + if (base.equals("void")) { + buf.append('V'); + } else if (base.equals("boolean")) { + buf.append('Z'); + } else if (base.equals("byte")) { + buf.append('B'); + } else if (base.equals("short")) { + buf.append('S'); + } else if (base.equals("long")) { + buf.append('I'); + } else if (base.equals("hyper")) { + buf.append('J'); + } else if (base.equals("float")) { + buf.append('F'); + } else if (base.equals("double")) { + buf.append('D'); + } else if (base.equals("char")) { + buf.append('C'); + } else if (base.equals("string")) { + buf.append("Ljava.lang.String;"); + } else if (base.equals("type")) { + buf.append("Lcom.sun.star.uno.Type;"); + } else if (base.equals("any")) { + buf.append("Ljava.lang.Object;"); + } else if (base.equals("unsigned short") + || base.equals("unsigned long") + || base.equals("unsigned hyper")) { + return null; + } else { + buf.append('L'); + buf.append(base); + buf.append(';'); + } + try { + return Class.forName(buf.toString()); + } catch (ClassNotFoundException e) { + return null; + } + case TypeClass.ENUM_value: + case TypeClass.STRUCT_value: + case TypeClass.EXCEPTION_value: + case TypeClass.INTERFACE_value: + try { + return Class.forName(_typeName); + } catch (ClassNotFoundException e) { + return null; + } + default: + return null; + } } /** |