*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt;
+import static com.google.common.base.Verify.verifyNotNull;
import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.collect.ImmutableSet;
import java.net.URI;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Optional;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ContactEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ImportEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.OrganizationEffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.PrefixEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.PrefixStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.TypedefEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.YangVersionEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.compat.NotificationNodeContainerCompat;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContextUtils;
+import org.opendaylight.yangtools.yang.parser.spi.source.ImportPrefixToModuleCtx;
import org.opendaylight.yangtools.yang.parser.spi.source.SourceException;
@Beta
.orElse(null);
final Set<AugmentationSchemaNode> augmentationsInit = new LinkedHashSet<>();
- final Set<ModuleImport> importsInit = new HashSet<>();
- final Set<NotificationDefinition> notificationsInit = new HashSet<>();
- final Set<RpcDefinition> rpcsInit = new HashSet<>();
- final Set<Deviation> deviationsInit = new HashSet<>();
- final Set<IdentitySchemaNode> identitiesInit = new HashSet<>();
- final Set<FeatureDefinition> featuresInit = new HashSet<>();
+ final Set<ModuleImport> importsInit = new LinkedHashSet<>();
+ final Set<NotificationDefinition> notificationsInit = new LinkedHashSet<>();
+ final Set<RpcDefinition> rpcsInit = new LinkedHashSet<>();
+ final Set<Deviation> deviationsInit = new LinkedHashSet<>();
+ final Set<IdentitySchemaNode> identitiesInit = new LinkedHashSet<>();
+ final Set<FeatureDefinition> featuresInit = new LinkedHashSet<>();
final List<ExtensionDefinition> extensionNodesInit = new ArrayList<>();
- final Set<GroupingDefinition> mutableGroupings = new HashSet<>();
- final Set<UsesNode> mutableUses = new HashSet<>();
+ final Set<GroupingDefinition> mutableGroupings = new LinkedHashSet<>();
+ final Set<UsesNode> mutableUses = new LinkedHashSet<>();
final Set<TypeDefinition<?>> mutableTypeDefinitions = new LinkedHashSet<>();
final Set<DataSchemaNode> mutablePublicChildNodes = new LinkedHashSet<>();
StmtContextUtils.firstAttributeOf(ctx.declaredSubstatements(), PrefixStatement.class),
ctx.getStatementSourceReference(), "Unable to resolve prefix for %s %s.", type, name);
}
+
+ // Alright. this is quite ugly
+ protected final void appendPrefixes(final StmtContext<?, ?, ?> ctx,
+ final Builder<String, ModuleEffectiveStatement> builder) {
+ streamEffectiveSubstatements(ImportEffectiveStatement.class)
+ .map(imp -> imp.findFirstEffectiveSubstatementArgument(PrefixEffectiveStatement.class).get())
+ .forEach(pfx -> {
+ final StmtContext<?, ?, ?> importedCtx =
+ verifyNotNull(ctx.getFromNamespace(ImportPrefixToModuleCtx.class, pfx),
+ "Failed to resolve prefix %s", pfx);
+ builder.put(pfx, (ModuleEffectiveStatement) importedCtx.buildEffective());
+ });
+ }
}