This method has been deprecated for removal. Remove it now, which also
means it is not really normal to have recursion in
xtensionEffectiveStatementImpl, allowing further code removal.
JIRA: YANGTOOLS-1137
Change-Id: I5e9341dcd94d03822684f2cc2752212d3642fac7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
* @return string with the name of unknown node.
*/
String getNodeParameter();
* @return string with the name of unknown node.
*/
String getNodeParameter();
-
- /**
- * Get extension definition which identifies this node.
- *
- * @return extension definition if exists, null otherwise
- * @deprecated This method is can cause cyclic dependencies in the object graph. Use
- * {@link SchemaContext#getExtensions()} with {@link #getNodeType()} instead.
- */
- // FIXME: YANGTOOLS-1317: remove this method
- @Deprecated(forRemoval = true, since = "7.0.8")
- ExtensionDefinition getExtensionDefinition();
import static com.google.common.base.Verify.verifyNotNull;
import com.google.common.collect.ImmutableList;
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;
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> {
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,
private final Object substatements;
public ExtensionEffectiveStatementImpl(final ExtensionStatement declared,
@Override
public String toString() {
@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() + "["
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;
*/
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 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.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.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.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 {
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 boolean addedByUses;
private final boolean augmenting;
- private final ExtensionDefinition extension;
private final QName nodeType;
private final String nodeParameter;
private final QName nodeType;
private final String nodeParameter;
final @NonNull ImmutableList<? extends EffectiveStatement<?, ?>> substatements) {
super(stmt.argument(), stmt.declared(), substatements);
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();
// initCopyType
final CopyableNode copyTypesFromOriginal = stmt.history();
nodeParameter = stmt.rawArgument() == null ? "" : stmt.rawArgument();
}
nodeParameter = stmt.rawArgument() == null ? "" : stmt.rawArgument();
}
- @Deprecated
- @Override
- public boolean isAugmenting() {
- return augmenting;
- }
-
@Override
public QName getNodeType() {
@Override
public QName getNodeType() {
- return extension == null ? nodeType : extension.getQName();
- public ExtensionDefinition getExtensionDefinition() {
- return extension;
+ public boolean isAugmenting() {
+ return augmenting;
}
@Override
public String toString() {
final QName type = getNodeType();
}
@Override
public String toString() {
final QName type = getNodeType();
- return String.valueOf(type.getNamespace()) + ":" + type.getLocalName() + " " + nodeParameter;
+ return type.getNamespace() + ":" + type.getLocalName() + " " + nodeParameter;