Index: C:/src/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDef.java
===================================================================
--- C:/src/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDef.java (revision 418367)
+++ C:/src/jackrabbit/trunk/jackrabbit/src/main/java/org/apache/jackrabbit/core/nodetype/NodeTypeDef.java (working copy)
@@ -69,7 +69,7 @@
if (dependencies == null) {
dependencies = new HashSet();
// supertypes
- dependencies.addAll(supertypes);
+ dependencies.addAll(Arrays.asList(getSupertypes()));
// child node definitions
for (Iterator iter = nodeDefs.iterator(); iter.hasNext();) {
NodeDef nd = (NodeDef) iter.next();
@@ -192,17 +192,21 @@
}
/**
- * Returns an array containing the names of the supertypes or
- * null if not set.
+ * Returns an array containing the names of the supertypes. If no
+ * supertypes have been set, then nt:base or an empty
+ * array is returned depending on whether type defined type is a
+ * mixin type or nt:base itself.
*
- * @return an array listing the names of the supertypes or
- * null if not set.
+ * @return an array listing the names of the supertypes (if any)
*/
public QName[] getSupertypes() {
- if (supertypes.isEmpty()) {
+ if (!supertypes.isEmpty()) {
+ return (QName[]) supertypes.toArray(new QName[supertypes.size()]);
+ } else if (isMixin() || QName.NT_BASE.equals(getName())) {
return QName.EMPTY_ARRAY;
+ } else {
+ return new QName[] { QName.NT_BASE };
}
- return (QName[]) supertypes.toArray(new QName[supertypes.size()]);
}
/**
@@ -282,7 +286,7 @@
NodeTypeDef other = (NodeTypeDef) obj;
return (name == null ? other.name == null : name.equals(other.name))
&& (primaryItemName == null ? other.primaryItemName == null : primaryItemName.equals(other.primaryItemName))
- && supertypes.equals(other.supertypes)
+ && equals(getSupertypes(), other.getSupertypes())
&& mixin == other.mixin
&& orderableChildNodes == other.orderableChildNodes
&& propDefs.equals(other.propDefs)
@@ -291,6 +295,12 @@
return false;
}
+ private static boolean equals(QName[] a, QName[] b) {
+ Arrays.sort(a);
+ Arrays.sort(b);
+ return Arrays.equals(a, b);
+ }
+
/**
* Returns zero to satisfy the Object equals/hashCode contract.
* This class is mutable and not meant to be used as a hash key.