-
- private static final class Declared extends WithSubstatements implements AnnotationStatement {
- Declared(final QName argument, final ImmutableList<? extends DeclaredStatement<?>> substatements) {
- super(argument, substatements);
- }
- }
-
- private static final class Effective extends UnknownEffectiveStatementBase<QName, AnnotationStatement>
- implements AnnotationEffectiveStatement, AnnotationSchemaNode {
-
- private final @NonNull TypeDefinition<?> type;
- private final @Nullable SchemaPath path;
-
- Effective(final Current<QName, AnnotationStatement> stmt,
- final ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
- super(stmt, substatements);
- final QName qname = stmt.getArgument();
-
- // FIXME: move this into onFullDefinitionDeclared()
- final TypeEffectiveStatement<?> typeStmt = SourceException.throwIfNull(
- firstSubstatementOfType(TypeEffectiveStatement.class), stmt,
- "AnnotationStatementSupport %s is missing a 'type' statement", qname);
-
- final ConcreteTypeBuilder<?> builder = ConcreteTypes.concreteTypeBuilder(typeStmt.getTypeDefinition(),
- qname);
- final UnitsEffectiveStatement unitsStmt = firstSubstatementOfType(UnitsEffectiveStatement.class);
- if (unitsStmt != null) {
- builder.setUnits(unitsStmt.argument());
- }
- type = builder.build();
-
- path = SchemaPathSupport.toOptionalPath(stmt.getEffectiveParent().getSchemaPath().createChild(qname));
- }
-
- @Override
- public QName getQName() {
- return verifyNotNull(argument());
- }
-
- @Override
- @Deprecated
- public SchemaPath getPath() {
- return SchemaNodeDefaults.throwUnsupportedIfNull(this, path);
- }
-
- @Override
- public TypeDefinition<?> getType() {
- return type;
- }
-
- @Override
- public TypeDefinition<?> getTypeDefinition() {
- return type;
- }
-
- @Override
- public AnnotationEffectiveStatement asEffectiveStatement() {
- return this;
- }
- }
-