import static com.google.common.base.Verify.verifyNotNull;
import com.google.common.collect.ImmutableList;
-import java.util.ArrayDeque;
-import java.util.Deque;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
import org.opendaylight.yangtools.yang.model.api.Status;
public final class ExtensionEffectiveStatementImpl extends DefaultArgument<QName, ExtensionStatement>
implements ExtensionDefinition, ExtensionEffectiveStatement, DocumentedNodeMixin<QName, ExtensionStatement> {
- private static final class RecursionDetector extends ThreadLocal<Deque<ExtensionEffectiveStatementImpl>> {
- boolean check(final ExtensionEffectiveStatementImpl current) {
- final Deque<ExtensionEffectiveStatementImpl> stack = get();
- if (stack != null) {
- for (ExtensionEffectiveStatementImpl s : stack) {
- if (s == current) {
- return true;
- }
- }
- }
- return false;
- }
-
- void push(final ExtensionEffectiveStatementImpl current) {
- Deque<ExtensionEffectiveStatementImpl> stack = get();
- if (stack == null) {
- stack = new ArrayDeque<>(1);
- set(stack);
- }
-
- stack.push(current);
- }
-
- void pop() {
- Deque<ExtensionEffectiveStatementImpl> stack = get();
- stack.pop();
- if (stack.isEmpty()) {
- remove();
- }
- }
- }
-
- private static final RecursionDetector TOSTRING_DETECTOR = new RecursionDetector();
-
private final Object substatements;
public ExtensionEffectiveStatementImpl(final ExtensionStatement declared,
@Override
public String toString() {
- if (TOSTRING_DETECTOR.check(this)) {
- return recursedToString();
- }
-
- TOSTRING_DETECTOR.push(this);
- try {
- return ExtensionEffectiveStatementImpl.class.getSimpleName() + "["
- + "argument=" + getArgument()
- + ", qname=" + getQName()
- + ", yin=" + isYinElement()
- + ", extensionSchemaNodes=" + getUnknownSchemaNodes()
- + "]";
- } finally {
- TOSTRING_DETECTOR.pop();
- }
- }
-
- private String recursedToString() {
return ExtensionEffectiveStatementImpl.class.getSimpleName() + "["
- + "argument=" + getArgument()
- + ", qname=" + getQName()
- + ", yin=" + isYinElement()
- + " <RECURSIVE> ]";
+ + "argument=" + getArgument()
+ + ", qname=" + getQName()
+ + ", yin=" + isYinElement()
+ + ", extensionSchemaNodes=" + getUnknownSchemaNodes()
+ + "]";
}
}
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.stmt;
-import static com.google.common.base.Preconditions.checkState;
-
import com.google.common.collect.ImmutableList;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.yang.common.QName;
import org.opendaylight.yangtools.yang.model.api.CopyableNode;
-import org.opendaylight.yangtools.yang.model.api.ExtensionDefinition;
import org.opendaylight.yangtools.yang.model.api.UnknownSchemaNode;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.ExtensionStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.UnknownStatement;
import org.opendaylight.yangtools.yang.model.spi.meta.AbstractEffectiveDocumentedNodeWithStatus;
-import org.opendaylight.yangtools.yang.parser.spi.ExtensionNamespace;
import org.opendaylight.yangtools.yang.parser.spi.meta.EffectiveStmtCtx.Current;
-import org.opendaylight.yangtools.yang.parser.spi.meta.StmtContext;
public abstract class UnknownEffectiveStatementBase<A, D extends UnknownStatement<A>>
extends AbstractEffectiveDocumentedNodeWithStatus<A, D> implements UnknownSchemaNode {
private final boolean addedByUses;
private final boolean augmenting;
- private final ExtensionDefinition extension;
private final QName nodeType;
private final String nodeParameter;
final @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
super(stmt.argument(), stmt.declared(), substatements);
- final StmtContext<?, ExtensionStatement, ExtensionEffectiveStatement> extensionInit =
- stmt.getFromNamespace(ExtensionNamespace.class, stmt.publicDefinition().getStatementName());
-
- if (extensionInit == null) {
- extension = null;
- nodeType = stmt.publicDefinition().getStatementName();
- } else {
- final EffectiveStatement<QName, ExtensionStatement> effective = extensionInit.buildEffective();
- checkState(effective instanceof ExtensionDefinition,
- "Statement %s is not an ExtensionDefinition", effective);
- extension = (ExtensionDefinition) effective;
- nodeType = null;
- }
+ nodeType = stmt.publicDefinition().getStatementName();
// initCopyType
final CopyableNode copyTypesFromOriginal = stmt.history();
nodeParameter = stmt.rawArgument() == null ? "" : stmt.rawArgument();
}
- @Deprecated
- @Override
- public boolean isAugmenting() {
- return augmenting;
- }
-
@Override
public QName getNodeType() {
- return extension == null ? nodeType : extension.getQName();
+ return nodeType;
}
@Override
@Deprecated
@Override
- public ExtensionDefinition getExtensionDefinition() {
- return extension;
+ public boolean isAugmenting() {
+ return augmenting;
}
@Override
public String toString() {
final QName type = getNodeType();
- return String.valueOf(type.getNamespace()) + ":" + type.getLocalName() + " " + nodeParameter;
+ return type.getNamespace() + ":" + type.getLocalName() + " " + nodeParameter;
}
}