- StmtContext<QName, TypedefStatement, EffectiveStatement<QName, TypedefStatement>> ctx) {
- throw new UnsupportedOperationException();
+ final StmtContext<QName, TypedefStatement, EffectiveStatement<QName, TypedefStatement>> ctx) {
+ return new TypeDefEffectiveStatementImpl(ctx);
+ }
+
+ @Override
+ public void onFullDefinitionDeclared(final StmtContext.Mutable<QName, TypedefStatement,
+ EffectiveStatement<QName, TypedefStatement>> stmt) {
+ super.onFullDefinitionDeclared(stmt);
+ SUBSTATEMENT_VALIDATOR.validate(stmt);
+ if (stmt != null && stmt.getParentContext() != null) {
+ final StmtContext<?, TypedefStatement, TypedefEffectiveStatement> existing = stmt.getParentContext()
+ .getFromNamespace(TypeNamespace.class, stmt.getStatementArgument());
+ SourceException.throwIf(existing != null, stmt.getStatementSourceReference(),
+ "Duplicate name for typedef %s", stmt.getStatementArgument());
+
+ stmt.getParentContext().addContext(TypeNamespace.class, stmt.getStatementArgument(), stmt);
+ }