case DOCUMENT_TEST: {
DocumentTestNode dt = (DocumentTestNode) itemType;
if (dt.getElementTest() == null) {
return DocumentType.ANYDOCUMENT;
}
ElementType eType = (ElementType) createItemType(dt.getElementTest());
return new DocumentType(eType);
}
case TEXT_TEST:
return TextType.INSTANCE;
case COMMENT_TEST:
return CommentType.INSTANCE;
case PI_TEST: {
PITestNode pit = (PITestNode) itemType;
if (pit.getTarget() == null) {
return ProcessingInstructionType.ANYPI;
}
return new ProcessingInstructionType(createUTF8String(pit.getTarget()));
}
case ATTRIBUTE_TEST: {
AttributeTestNode at = (AttributeTestNode) itemType;
if (at.getNameTest() == null) {
return AttributeType.ANYATTRIBUTE;
}
NameTestNode ntNode = at.getNameTest();
NameTest nt = NameTest.STAR_NAMETEST;
if (ntNode.getPrefix() == null && ntNode.getLocalName() == null) {
if (at.getTypeName() == null) {
return AttributeType.ANYATTRIBUTE;
}
} else {
String uri;
if (!"".equals(ntNode.getPrefix())) {
uri = currCtx.lookupNamespaceUri(ntNode.getPrefix());
if (uri == null) {
throw new SystemException(ErrorCode.XPST0081, ntNode.getSourceLocation());
}
} else {
uri = "";
}
nt = new NameTest(createUTF8String(uri), createUTF8String(ntNode.getLocalName()));
}
SchemaType cType = BuiltinTypeRegistry.XS_ANY_ATOMIC;
if (at.getTypeName() != null) {
cType = moduleCtx.lookupSchemaType(createQName(at.getTypeName()));
if (cType == null) {
throw new SystemException(ErrorCode.XPST0051, at.getSourceLocation());
}
}
return new AttributeType(nt, cType);
}
case SCHEMA_ATTRIBUTE_TEST: {
throw new UnsupportedOperationException("schema-attribute(...) is not supported");
}
case ELEMENT_TEST: {
ElementTestNode et = (ElementTestNode) itemType;
if (et.getNameTest() == null) {
return ElementType.ANYELEMENT;
}
NameTestNode ntNode = et.getNameTest();
NameTest nt = NameTest.STAR_NAMETEST;
if (ntNode.getPrefix() == null && ntNode.getLocalName() == null) {
if (et.getTypeName() == null) {
return ElementType.ANYELEMENT;
}
} else {
String uri;
if (!"".equals(ntNode.getPrefix())) {
uri = currCtx.lookupNamespaceUri(ntNode.getPrefix());
if (uri == null) {
throw new SystemException(ErrorCode.XPST0081, ntNode.getSourceLocation());
}
} else {
uri = "";
}
nt = new NameTest(createUTF8String(uri), createUTF8String(ntNode.getLocalName()));
}
SchemaType cType = AnyType.INSTANCE;
if (et.getTypeName() != null) {
cType = moduleCtx.lookupSchemaType(createQName(et.getTypeName()));
if (cType == null) {
throw new SystemException(ErrorCode.XPST0051, et.getSourceLocation());
}
}
return new ElementType(nt, cType, et.isNillable());
}
case SCHEMA_ELEMENT_TEST: {
throw new UnsupportedOperationException("schema-element(...) is not supported");
}