public interface FunctionAnnotationHandler
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.
|
java.lang.String getAssertionNamespace()
void check(AnnotationList annotations, java.lang.String construct) throws XPathException
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.boolean satisfiesAssertion(Annotation assertion, AnnotationList annotationList)
assertion
- the annotation assertion present in the function item testannotationList
- the annotations present on the function being tested, filtered by namespaceint 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.
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-2020 Saxonica Limited. All rights reserved.