}
XInterfaceMemberTypeDescription[] members = ifc.getMembers();
for (int i = 0; i < members.length; ++i) {
if (members[i].getTypeClass() == TypeClass.INTERFACE_ATTRIBUTE)
{
XInterfaceAttributeTypeDescription2 attr
= ((XInterfaceAttributeTypeDescription2)
UnoRuntime.queryInterface(
XInterfaceAttributeTypeDescription2.class,
members[i]));
short attrAttribs = 0;
if (attr.isBound()) {
attrAttribs |= PropertyAttribute.BOUND;
}
boolean setUnknown = false;
if (attr.isReadOnly()) {
attrAttribs |= PropertyAttribute.READONLY;
setUnknown = true;
}
XCompoundTypeDescription[] excs = attr.getGetExceptions();
boolean getUnknown = false;
//XXX Special interpretation of getter/setter exceptions
// only works if the specified exceptions are of the exact
// type, not of a supertype:
for (int j = 0; j < excs.length; ++j) {
if (excs[j].getName().equals(
"com.sun.star.beans.UnknownPropertyException"))
{
getUnknown = true;
break;
}
}
excs = attr.getSetExceptions();
for (int j = 0; j < excs.length; ++j) {
if (excs[j].getName().equals(
"com.sun.star.beans.UnknownPropertyException"))
{
setUnknown = true;
} else if (excs[j].getName().equals(
"com.sun.star.beans."
+ "PropertyVetoException"))
{
attrAttribs |= PropertyAttribute.CONSTRAINED;
}
}
if (getUnknown && setUnknown) {
attrAttribs |= PropertyAttribute.OPTIONAL;
}
XTypeDescription t = attr.getType();
for (;;) {
t = resolveTypedefs(t);
short n;
if (t.getName().startsWith(
"com.sun.star.beans.Ambiguous<"))