public class XQueryFunctionAnnotationHandler extends java.lang.Object implements FunctionAnnotationHandler
Constructor and Description |
---|
XQueryFunctionAnnotationHandler() |
Modifier and Type | Method and Description |
---|---|
void |
check(AnnotationList annotations,
java.lang.String construct)
Test whether a given set of annotations in this namespace is valid.
|
java.lang.String |
getAssertionNamespace()
Get the namespace handled by this function annotation handler.
|
int |
relationship(AnnotationList firstList,
AnnotationList secondList)
Test the relationship of one list of annotation assertions to another list of annotation assertions,
all from this namespace.
|
boolean |
satisfiesAssertion(Annotation assertion,
AnnotationList annotationList)
Test whether a function with a given list of annotations satisfies an annotation assertion present
on a function item test.
|
public void check(AnnotationList annotations, java.lang.String construct) throws XPathException
FunctionAnnotationHandler
check
in interface FunctionAnnotationHandler
annotations
- the annotation list (filtered by namespace: all the annotations
will have names in the namespace for this annotation handler)construct
- the construct on which this list of annotations appears. One of "DF" (declare function),
"DV" (declare variable), "IF" (inline function), "FT" (function test)XPathException
- if the annotation is invalid, or if it is inconsistent with the annotations
in the existing list.public java.lang.String getAssertionNamespace()
getAssertionNamespace
in interface FunctionAnnotationHandler
public boolean satisfiesAssertion(Annotation assertion, AnnotationList annotationList)
satisfiesAssertion
in interface FunctionAnnotationHandler
assertion
- the annotation assertion present in the function item testannotationList
- the annotations present on the function being testedpublic int relationship(AnnotationList firstList, AnnotationList secondList)
The lists will always be non-empty, because it is assumed that a test with an empty list of assertions always subsumes a test with a non-empty list.
relationship
in interface FunctionAnnotationHandler
firstList
- the first list of annotation assertionssecondList
- the second list of annotation assertionsTypeHierarchy.SAME_TYPE
,
TypeHierarchy.DISJOINT
, TypeHierarchy.OVERLAPS
,
TypeHierarchy.SUBSUMES
, TypeHierarchy.SUBSUMED_BY
.
For example, if the first list is %colour("blue")
and the second list is %colour("green")
,
and no function can be both blue and green, then return DISJOINT
. But if a function can have more than
one colour, return OVERLAPS
because the set of functions conforming to the two assertions has a non-empty
intersection. If the first list is %colour("any")
and the second list is %colour("blue")
,
then return SUBSUMES
, because the set of functions satisfying the first assertion is a superset of those
satisfying the second assertion.
The result of this method must be consistent with the satisfiesAssertion(Annotation, AnnotationList)
method.
For example, if this method indicates that %big
subsumes %huge
, then it must indeed
be the case that the set of functions that satisfy the assertion %big
is a superset of those that
satisfy the assertion %huge
.
If in doubt, it is always safe to return OVERLAPS
: the worst that can happen is that type-checking is deferred
until run-time.
Copyright (c) 2004-2018 Saxonica Limited. All rights reserved.