From: Robert Varga Date: Thu, 20 Oct 2016 16:31:11 +0000 (+0200) Subject: BUG-6965: introduce BuiltinDeclaredStatements X-Git-Tag: release/carbon~318 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=5fa70757163c82fc46f1f09208a87a9944553401;p=yangtools.git BUG-6965: introduce BuiltinDeclaredStatements This patch adds squashing of YANG builtin types into singletons when such types are not otherwise modified. Change-Id: I3a146b4c7d6d01daf4892b2d41f813fc9bfcc393 Signed-off-by: Robert Varga --- diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BuiltinTypeStatement.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BuiltinTypeStatement.java new file mode 100644 index 0000000000..dcfcf3bf20 --- /dev/null +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/BuiltinTypeStatement.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2016 Pantheon Technologies s.r.o. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.yangtools.yang.parser.stmt.rfc6020; + +import com.google.common.base.Preconditions; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableMap.Builder; +import java.util.Collection; +import java.util.Map; +import org.opendaylight.yangtools.yang.model.api.Rfc6020Mapping; +import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement; +import org.opendaylight.yangtools.yang.model.api.meta.StatementDefinition; +import org.opendaylight.yangtools.yang.model.api.meta.StatementSource; +import org.opendaylight.yangtools.yang.model.api.stmt.TypeStatement; + +final class BuiltinTypeStatement implements TypeStatement { + private static final Map BUILTINS; + static { + final Builder builder = ImmutableMap.builder(); + putBuiltin(builder, TypeUtils.BINARY); + putBuiltin(builder, TypeUtils.BOOLEAN); + putBuiltin(builder, TypeUtils.EMPTY); + putBuiltin(builder, TypeUtils.INSTANCE_IDENTIFIER); + putBuiltin(builder, TypeUtils.INT8); + putBuiltin(builder, TypeUtils.INT16); + putBuiltin(builder, TypeUtils.INT32); + putBuiltin(builder, TypeUtils.INT64); + putBuiltin(builder, TypeUtils.STRING); + putBuiltin(builder, TypeUtils.UINT8); + putBuiltin(builder, TypeUtils.UINT16); + putBuiltin(builder, TypeUtils.UINT32); + putBuiltin(builder, TypeUtils.UINT64); + BUILTINS = builder.build(); + } + + private static void putBuiltin(final Builder builder, final String argument) { + builder.put(argument, new BuiltinTypeStatement(argument)); + } + + private final String argument; + + private BuiltinTypeStatement(final String argument) { + this.argument = Preconditions.checkNotNull(argument); + } + + static TypeStatement maybeReplace(final TypeStatementImpl orig) { + if (orig.declaredSubstatements().isEmpty() && orig.getStatementSource() == StatementSource.DECLARATION && + orig.statementDefinition() == Rfc6020Mapping.TYPE) { + final BuiltinTypeStatement builtin = BUILTINS.get(orig.argument()); + if (builtin != null) { + return builtin; + } + } + + return orig; + } + + @Override + public String argument() { + return argument; + } + + @Override + public String rawArgument() { + return argument; + } + + @Override + public Collection> declaredSubstatements() { + return ImmutableList.of(); + } + + @Override + public StatementDefinition statementDefinition() { + return Rfc6020Mapping.TYPE; + } + + @Override + public String getName() { + return argument; + } + + @Override + public StatementSource getStatementSource() { + return StatementSource.DECLARATION; + } +} diff --git a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeStatementImpl.java b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeStatementImpl.java index 758f6c1343..4083f1fd69 100644 --- a/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeStatementImpl.java +++ b/yang/yang-parser-impl/src/main/java/org/opendaylight/yangtools/yang/parser/stmt/rfc6020/TypeStatementImpl.java @@ -93,9 +93,8 @@ public class TypeStatementImpl extends AbstractDeclaredStatement } @Override - public TypeStatement createDeclared( - final StmtContext ctx) { - return new TypeStatementImpl(ctx); + public TypeStatement createDeclared(final StmtContext ctx) { + return BuiltinTypeStatement.maybeReplace(new TypeStatementImpl(ctx)); } @Override