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