summaryrefslogtreecommitdiff
path: root/cli_ure/source/basetypes/uno
diff options
context:
space:
mode:
Diffstat (limited to 'cli_ure/source/basetypes/uno')
-rw-r--r--cli_ure/source/basetypes/uno/Any.cs211
-rw-r--r--cli_ure/source/basetypes/uno/BoundAttribute.cs46
-rw-r--r--cli_ure/source/basetypes/uno/ExceptionAttribute.cs70
-rw-r--r--cli_ure/source/basetypes/uno/OnewayAttribute.cs43
-rw-r--r--cli_ure/source/basetypes/uno/ParameterizedTypeAttribute.cs68
-rw-r--r--cli_ure/source/basetypes/uno/PolymorphicType.cs443
-rw-r--r--cli_ure/source/basetypes/uno/TypeArgumentsAttribute.cs84
-rw-r--r--cli_ure/source/basetypes/uno/TypeParametersAttribute.cs65
8 files changed, 1030 insertions, 0 deletions
diff --git a/cli_ure/source/basetypes/uno/Any.cs b/cli_ure/source/basetypes/uno/Any.cs
new file mode 100644
index 000000000000..69ba69c2754e
--- /dev/null
+++ b/cli_ure/source/basetypes/uno/Any.cs
@@ -0,0 +1,211 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+using System;
+using System.Text;
+
+namespace uno
+{
+
+/** This class can be used as a base class for UNO objects.
+ It implements the capability to be kept weakly
+ (unoidl.com.sun.star.uno.XWeak) and it implements
+ unoidl.com.sun.star.lang.XTypeProvider which is necessary for
+ using the object from StarBasic.
+*/
+public struct Any
+{
+ private object _value;
+ private Type _type;
+
+ public static Any VOID = new Any(typeof(void), null);
+
+ private static void checkArgs(Type type, Object value)
+ {
+ //value can only be null if type == void
+ if (type == null
+ || (value == null
+ && type != typeof(void)
+ && type != typeof(object)
+ && type.IsInterface == false))
+ throw new System.Exception(
+ "uno.Any: Constructor called with illegal arguments!");
+ //If value is a polymorphic struct then type must be
+ //uno.Polymorphic
+ if (value != null)
+ {
+ TypeParametersAttribute t = (TypeParametersAttribute) Attribute.GetCustomAttribute(
+ value.GetType(), typeof(TypeParametersAttribute));
+ if (t != null && !(type is PolymorphicType))
+ throw new System.Exception(
+ "uno.Any: The value has a polymorphic type but the type argument is not " +
+ "uno.PolymorphicType. Please use the constructor Any(Type, object) and " +
+ "supply a uno.PolymorphicType as type argument!");
+ }
+ }
+
+ /** constructs an instance.
+
+ <p>If the arguments ar invalid then an exception is thrown.</p>
+ @exception System.Exception
+ */
+ public Any(Type type, object value)
+ {
+ checkArgs(type, value);
+ _type = type;
+ _value = value;
+ }
+
+ /** sets the type and value.
+ <p>If the arguments ar invalid then an exception is thrown.</p>
+ @exception System.Exception
+ */
+ public void setValue(Type type, object value)
+ {
+ checkArgs(type, value);
+ _type = type;
+ _value = value;
+ }
+
+ public Type Type
+ {
+ get
+ {
+ if (_type == null)
+ _type = typeof(void);
+ return _type;
+ }
+ }
+
+ public Object Value
+ {
+ get
+ {
+ return _value;
+ }
+ }
+
+ public Any(char value): this(typeof(char), value)
+ {
+ }
+
+ public Any(bool value): this(typeof(bool), value)
+ {
+ }
+
+ public Any(byte value): this(typeof(byte), value)
+ {
+ }
+
+ public Any(short value): this(typeof(short), value)
+ {
+ }
+
+ public Any(ushort value): this(typeof(ushort), value)
+ {
+ }
+
+ public Any(int value): this(typeof(int), value)
+ {
+ }
+
+ public Any(uint value): this(typeof(uint), value)
+ {
+ }
+
+ public Any(long value): this(typeof(long), value)
+ {
+ }
+
+ public Any(ulong value): this(typeof(ulong), value)
+ {
+ }
+
+ public Any(float value): this(typeof(float), value)
+ {
+ }
+
+ public Any(double value): this(typeof(double), value)
+ {
+ }
+
+ public Any(Type value): this(typeof(Type), value)
+ {
+ }
+
+ public Any(string value): this(typeof(string), value)
+ {
+ }
+
+ public override string ToString()
+ {
+ StringBuilder msg = new StringBuilder("uno.Any { Type= ");
+ msg.Append(Type.ToString());
+ msg.Append(", Value=");
+ msg.Append(Value.ToString());
+ msg.Append("}");
+ return msg.ToString();
+ }
+
+ public bool hasValue()
+ {
+ if (Type == null || Type == typeof(void))
+ return false;
+ return true;
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj != null)
+ {
+ try
+ {
+ return Equals((Any) obj);
+ }
+ catch (InvalidCastException)
+ {
+ }
+ }
+ return false;
+ }
+
+ public bool Equals(Any obj)
+ {
+ return Type.Equals(obj.Type)
+ && (Value == null ?
+ obj.Value == null :
+ Value.Equals(obj.Value));
+ }
+
+ public override int GetHashCode()
+ {
+ return Type.GetHashCode() ^ (Value != null ? Value.GetHashCode() : 0);
+ }
+}
+
+}
+
diff --git a/cli_ure/source/basetypes/uno/BoundAttribute.cs b/cli_ure/source/basetypes/uno/BoundAttribute.cs
new file mode 100644
index 000000000000..145e41a05439
--- /dev/null
+++ b/cli_ure/source/basetypes/uno/BoundAttribute.cs
@@ -0,0 +1,46 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+using System;
+
+
+namespace uno
+{
+/** is used to mark UNO interface attributes as &quot;bound&quot.
+
+ <p>It corresponds to <const
+ scope="com::sun::star::beans">PropertyAttribute::BOUND</const>.
+ </p>
+ UNO interface attributes are mapped to CLI properties.
+ */
+[AttributeUsage(AttributeTargets.Property, Inherited=false)]
+public sealed class BoundAttribute: System.Attribute
+{
+}
+
+}
+
diff --git a/cli_ure/source/basetypes/uno/ExceptionAttribute.cs b/cli_ure/source/basetypes/uno/ExceptionAttribute.cs
new file mode 100644
index 000000000000..4370477f943b
--- /dev/null
+++ b/cli_ure/source/basetypes/uno/ExceptionAttribute.cs
@@ -0,0 +1,70 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+using System;
+
+
+namespace uno
+{
+/** is used to mark a UNO method to throw exceptions.
+
+ <p>A method can be an ordinary interface method, a get or set method from
+ an interface attribute, or the constructor methods of service creator
+ classes. If there are no exceptions specified for a method then this
+ attribute should not be applied. Because a
+ <type scope="com.sun.star.uno">RuntimeException</type>
+ can always be thrown it is not specified. Hence no
+ <code>ExceptionAttribute</code>
+ should be applied in that case.</p>
+ */
+[AttributeUsage(AttributeTargets.Method, Inherited=false)]
+public sealed class ExceptionAttribute: System.Attribute
+{
+ /** initializes an instance with the specified values.
+
+ @param raises
+ array of types of Exceptions which are declared in UNOIDL.
+ It must not be null.
+ */
+ public ExceptionAttribute(Type[] raises)
+ {
+ m_raises = raises;
+ }
+
+ public Type[] Raises
+ {
+ get
+ {
+ return m_raises;
+ }
+ }
+
+ private Type[] m_raises;
+}
+
+}
+
diff --git a/cli_ure/source/basetypes/uno/OnewayAttribute.cs b/cli_ure/source/basetypes/uno/OnewayAttribute.cs
new file mode 100644
index 000000000000..8873ac42ce38
--- /dev/null
+++ b/cli_ure/source/basetypes/uno/OnewayAttribute.cs
@@ -0,0 +1,43 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+using System;
+
+
+namespace uno
+{
+/** is used to mark UNO interface methods as being one - way according to the
+ UNOIDL <code>oneway<code> attribute.
+ <p>
+ */
+[AttributeUsage(AttributeTargets.Method, Inherited=false)]
+public sealed class OnewayAttribute: System.Attribute
+{
+
+}
+}
+
diff --git a/cli_ure/source/basetypes/uno/ParameterizedTypeAttribute.cs b/cli_ure/source/basetypes/uno/ParameterizedTypeAttribute.cs
new file mode 100644
index 000000000000..056dc6eea13b
--- /dev/null
+++ b/cli_ure/source/basetypes/uno/ParameterizedTypeAttribute.cs
@@ -0,0 +1,68 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+using System;
+
+
+namespace uno
+{
+/** is used to mark a UNO entity to have a parameterized type.
+
+ <p>Currently it is only applied to members of polymorphic structs. That is structs,
+ which have a type parameter list.
+ </p>
+
+ @see TypeParametersAttribute
+ */
+[AttributeUsage(AttributeTargets.Field, Inherited=false)]
+public sealed class ParameterizedTypeAttribute: System.Attribute
+{
+ /** initializes an instance with the specified value.
+
+ @param parameter
+ the name of parameter from the parameter list from
+ <type scope="uno.idl">TypeParametersAttribute</type>
+ It must not be null.
+ */
+ public ParameterizedTypeAttribute(string parameter)
+ {
+ m_parameter = parameter;
+ }
+
+ public string Type
+ {
+ get
+ {
+ return m_parameter;
+ }
+ }
+
+ private string m_parameter;
+}
+
+}
+
diff --git a/cli_ure/source/basetypes/uno/PolymorphicType.cs b/cli_ure/source/basetypes/uno/PolymorphicType.cs
new file mode 100644
index 000000000000..3a299bef3bdd
--- /dev/null
+++ b/cli_ure/source/basetypes/uno/PolymorphicType.cs
@@ -0,0 +1,443 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+using System;
+using System.Collections;
+using System.Reflection;
+using System.Globalization;
+
+namespace uno {
+
+
+
+/** represents a polymorphic type.
+
+ This class is used to carry type information for polymorphic struct types
+ and arrays of polymorphic struct types. These types would be easiest represented
+ with type templates, which are not available in .NET 1.1. Therefore
+ the System.Type cannot contain information about template parameters. To
+ retain this information we use PolymorphicType which directly inherits from
+ System.Type. The additional information about type parameters are passed
+ as simple string when creating an instance of PolymorphicType. Usually one
+ only needs a PolymorphicType when a polymporphic type is put into an
+ uno.Any. For example, let's assume there is a idl type PolyStruct:
+
+ module test {
+ struct PolyStruct< T >
+ {
+ T member;
+ };
+ };
+
+ Then one would use it in C# in this way:
+
+ uno.Any myAny = new uno.Any( PolymorphicType.GetType(
+ typeof(PolyStruct), "unoidl.test.PolyStruct<System.Boolean>"),
+ new PolyStruct(true));
+
+ or if one has a sequence of polymorphic structs:
+
+ uno.Any myAny = new uno.Any( PolymorphicType.GetType(
+ typeof(PolyStruct), "unoidl.test.PolyStruct<System.Boolean>[]"),
+ new PolyStruct[] {new PolyStruct(true)} );
+
+
+ To get a new instance of PolymorphicType one uses the static method
+ PolymorphicType.GetType. The method ensures that there is only one instance
+ for each distinct name. For example, if GetType is called multiple times with
+ the name "unoidl.test.PolyStruct<System.Boolean>" then the same instance of
+ PolymorphicType is returned. This makes it possible to compare the instances
+ by reference, thas is using the operator "==".
+
+ The polymorphic name, which is passed as second argument to PolymorphicType.GetType,
+ contains a list of type names. Only type names common
+ to all CLI languages can be used. That is, instead of using names, such as
+ char, int, float, the names System.Char, System.Int32 and
+ System.Single are to be used. Spaces are not allowed.
+ The name will always start with "unoidl", when the type was generated by climaker.
+ Here are a couple of possible strings:
+
+ unoidl.test.PolyStruct<System.Int32>
+ unoidl.test.PolyStruct<System.Char[]>
+ unoidl.test.PolyStruct<System.Int64>[]
+ unoidl.test.PolyStruct<unoidl.test.PolyStruct<System.Int64>>
+ unoidl.test.PolyStruct<unoidl.test.PolyStruct<System.Int64[]>[]>[]
+
+ In the future, when the CLI supports templates, we will probably adapt the cli-uno
+ bridge accordingly to use real template types. Then this class will become obsolete.
+ */
+public class PolymorphicType: Type
+{
+ private Type m_base;
+ private string m_type_name;
+
+ private static Hashtable m_ht_types = Hashtable.Synchronized(new Hashtable(256));
+
+ /** provides a unique instance of this class.
+
+ This function returns null if the specified type is no polymorphic struct.
+
+ @param type
+ the type of the polymorphic struct. For example, created by
+ <code>typeof(unoidl.com.sun.star.beans.Defaulted)</code>
+ @param name
+ the full name of the struct (including the type list).
+ @return
+ null - the argument type is no valid polymorphic struct or <br>
+ an instance of this class.
+ @exception System.ArgumentNullException
+ The argument was null.
+ */
+ public static PolymorphicType GetType(Type type, string name)
+ {
+ if (name == null || type == null)
+ throw new ArgumentNullException(
+ "cli-uno: uno.PolymorphicType.GetType was called with a null argument");
+ //check if the type is either a array of structs or a polymorphic struct.
+ if (type.IsArray)
+ {
+ Type elementType = type;
+ while ((elementType = elementType.GetElementType()).IsArray);
+ //unfortunately we cannot check if it is a real polymorphic struct here.
+ if ( ! elementType.IsClass)
+ return null;
+
+
+ }
+ else if (Attribute.GetCustomAttribute(type, typeof(uno.TypeParametersAttribute))
+ == null)
+ {
+ return null;
+ }
+
+ lock (m_ht_types.SyncRoot)
+ {
+ PolymorphicType t = (PolymorphicType) m_ht_types[name];
+ if (t == null)
+ {
+ t = new PolymorphicType(type, name);
+ m_ht_types.Add(name, t);
+ }
+ return t;
+ }
+ }
+
+ private PolymorphicType(Type type, string name)
+ {
+ m_type_name = name;
+ m_base = type;
+ }
+
+ public string PolymorphicName
+ {
+ get
+ {
+ return m_type_name;
+ }
+ }
+
+ public Type OriginalType
+ {
+ get
+ {
+ return m_base;
+ }
+ }
+
+
+ //implementations of abstract methods and properties from base class
+ public override string Name
+ {
+ get
+ {
+ return m_base.Name;
+ }
+ }
+
+ public override Assembly Assembly
+ {
+ get
+ {
+ return m_base.Assembly;
+ }
+ }
+
+ public override string AssemblyQualifiedName
+ {
+ get
+ {
+ return m_base.AssemblyQualifiedName;
+ }
+ }
+
+ public override Type BaseType
+ {
+ get
+ {
+ return m_base.BaseType;
+ }
+ }
+
+ public override string FullName
+ {
+ get
+ {
+ return m_base.FullName;
+ }
+ }
+
+ public override Guid GUID
+ {
+ get
+ {
+ return m_base.GUID;
+ }
+ }
+
+ public override Module Module
+ {
+ get
+ {
+ return m_base.Module;
+ }
+ }
+
+ public override string Namespace
+ {
+ get
+ {
+ return m_base.Namespace;
+ }
+ }
+
+ public override RuntimeTypeHandle TypeHandle
+ {
+ get
+ {
+ return m_base.TypeHandle;
+ }
+ }
+
+ public override Type UnderlyingSystemType
+ {
+ get
+ {
+ return m_base.UnderlyingSystemType;
+ }
+ }
+
+ public override Type DeclaringType
+ {
+ get
+ {
+ return m_base.DeclaringType;
+ }
+ }
+
+ public override object[] GetCustomAttributes(
+ bool inherit)
+ {
+ return m_base.GetCustomAttributes(inherit);
+ }
+
+ public override object[] GetCustomAttributes(
+ Type attributeType,
+ bool inherit)
+ {
+ return m_base.GetCustomAttributes(attributeType, inherit);
+ }
+
+ public override bool IsDefined(
+ Type attributeType,
+ bool inherit)
+ {
+ return IsDefined(attributeType, inherit);
+ }
+
+ protected override TypeAttributes GetAttributeFlagsImpl()
+ {
+ return m_base.Attributes;
+ }
+
+ protected override ConstructorInfo GetConstructorImpl(
+ BindingFlags bindingAttr,
+ Binder binder,
+ CallingConventions callConvention,
+ Type[] types,
+ ParameterModifier[] modifiers)
+ {
+ return m_base.GetConstructor(
+ bindingAttr, binder, callConvention, types, modifiers);
+ }
+
+ public override ConstructorInfo[] GetConstructors(
+ BindingFlags bindingAttr)
+ {
+ return m_base.GetConstructors(bindingAttr);
+ }
+
+ public override Type GetElementType()
+ {
+ return m_base.GetElementType();
+ }
+
+ public override EventInfo GetEvent(
+ string name,
+ BindingFlags bindingAttr)
+ {
+ return m_base.GetEvent(name, bindingAttr);
+ }
+
+ public override EventInfo[] GetEvents(
+ BindingFlags bindingAttr)
+ {
+ return m_base.GetEvents(bindingAttr);
+ }
+
+ public override FieldInfo GetField(
+ string name,
+ BindingFlags bindingAttr)
+ {
+ return m_base.GetField(name, bindingAttr);
+ }
+
+ public override FieldInfo[] GetFields(
+ BindingFlags bindingAttr)
+ {
+ return m_base.GetFields(bindingAttr);
+ }
+
+ public override Type GetInterface(
+ string name, bool ignoreCase)
+ {
+ return m_base.GetInterface(name, ignoreCase);
+ }
+
+ public override Type[] GetInterfaces()
+ {
+ return m_base.GetInterfaces();
+ }
+
+ public override MemberInfo[] GetMembers(
+ BindingFlags bindingAttr)
+ {
+ return m_base.GetMembers(bindingAttr);
+ }
+
+ protected override MethodInfo GetMethodImpl(
+ string name,
+ BindingFlags bindingAttr,
+ Binder binder,
+ CallingConventions callConvention,
+ Type[] types,
+ ParameterModifier[] modifiers)
+ {
+ return m_base.GetMethod(
+ name, bindingAttr, binder, callConvention, types, modifiers);
+ }
+
+ public override MethodInfo[] GetMethods(
+ BindingFlags bindingAttr)
+ {
+ return m_base.GetMethods(bindingAttr);
+ }
+
+ public override Type GetNestedType(
+ string name, BindingFlags bindingAttr)
+ {
+ return m_base.GetNestedType(name, bindingAttr);
+ }
+
+ public override Type[] GetNestedTypes(
+ BindingFlags bindingAttr)
+ {
+ return m_base.GetNestedTypes(bindingAttr);
+ }
+
+ public override PropertyInfo[] GetProperties(
+ BindingFlags bindingAttr)
+ {
+ return m_base.GetProperties(bindingAttr);
+ }
+
+ protected override PropertyInfo GetPropertyImpl(
+ string name,
+ BindingFlags bindingAttr,
+ Binder binder,
+ Type returnType,
+ Type[] types,
+ ParameterModifier[] modifiers)
+ {
+ return m_base.GetProperty(
+ name, bindingAttr, binder, returnType, types, modifiers);
+ }
+
+ protected override bool HasElementTypeImpl()
+ {
+ return m_base.HasElementType;
+ }
+
+ public override object InvokeMember(
+ string name,
+ BindingFlags invokeAttr,
+ Binder binder,
+ object target,
+ object[] args,
+ ParameterModifier[] modifiers,
+ CultureInfo culture,
+ string[] namedParameters)
+ {
+ return m_base.InvokeMember(
+ name, invokeAttr, binder, target, args, modifiers, culture, namedParameters);
+ }
+
+ protected override bool IsArrayImpl()
+ {
+ return m_base.IsArray;
+ }
+
+ protected override bool IsByRefImpl()
+ {
+ return m_base.IsByRef;
+ }
+
+ protected override bool IsCOMObjectImpl()
+ {
+ return m_base.IsCOMObject;
+ }
+
+ protected override bool IsPointerImpl()
+ {
+ return m_base.IsPointer;
+ }
+
+ protected override bool IsPrimitiveImpl()
+ {
+ return m_base.IsPrimitive;
+ }
+}
+}
diff --git a/cli_ure/source/basetypes/uno/TypeArgumentsAttribute.cs b/cli_ure/source/basetypes/uno/TypeArgumentsAttribute.cs
new file mode 100644
index 000000000000..79c3745a161a
--- /dev/null
+++ b/cli_ure/source/basetypes/uno/TypeArgumentsAttribute.cs
@@ -0,0 +1,84 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+using System;
+
+
+namespace uno
+{
+/** is used to mark a parameterized UNO entity(i.e. struct)
+ to be an instantiation of a
+ template with the specified type arguments.
+
+ <p>Currently only UNO structs can have type parameters.</p>
+
+ <pre>
+
+ [TypeParameters(new string[]{"T"})]
+ struct Foo {
+ [ParameterizedType("T")]
+ Object member;
+ }
+
+ public interface XFoo {
+ [return:TypeArguments(new string[]{typeof(char)})]
+ Foo func( [TypeArguments(new string[]{typeof(char)})] Foo f);
+ }
+ </pre>
+
+ @see TypeParametersAttribute
+ @see ParameterizedTypeAttribute
+ */
+[AttributeUsage(AttributeTargets.ReturnValue
+ | AttributeTargets.Parameter
+ | AttributeTargets.Field, Inherited=false)]
+public sealed class TypeArgumentsAttribute: System.Attribute
+{
+ /** initializes an instance with the specified value.
+
+ @param parameters
+ arrayay of names representing the types.
+ It must not be null.
+ */
+ public TypeArgumentsAttribute(Type[] arguments)
+ {
+ m_arguments = arguments;
+ }
+
+ public Type[] Arguments
+ {
+ get
+ {
+ return m_arguments;
+ }
+ }
+
+ private Type[] m_arguments;
+}
+
+}
+
diff --git a/cli_ure/source/basetypes/uno/TypeParametersAttribute.cs b/cli_ure/source/basetypes/uno/TypeParametersAttribute.cs
new file mode 100644
index 000000000000..273f59393c5f
--- /dev/null
+++ b/cli_ure/source/basetypes/uno/TypeParametersAttribute.cs
@@ -0,0 +1,65 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+using System;
+
+
+namespace uno
+{
+/** is used to mark a UNO entity to have type parameters.
+
+ <p>Currently it is only applied with polymorphic structs. That is structs,
+ which have a type parameter list.
+ </p>
+ */
+[AttributeUsage(AttributeTargets.Class, Inherited=false)]
+public sealed class TypeParametersAttribute: System.Attribute
+{
+ /** initializes an instance with the specified value.
+
+ @param parameters
+ array of names representing the types.
+ It must not be null.
+ */
+ public TypeParametersAttribute(string[] parameters)
+ {
+ m_parameters = parameters;
+ }
+
+ public string[] Parameters
+ {
+ get
+ {
+ return m_parameters;
+ }
+ }
+
+ private string[] m_parameters;
+}
+
+}
+