Revert "Update YANG lexer/parser to accept free-standing '+'" 32/91532/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 22 Jul 2020 11:15:56 +0000 (13:15 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Wed, 22 Jul 2020 11:15:56 +0000 (13:15 +0200)
This reverts commit 04ed60d275521fd6e6ee57d5b1ce4e6a519d2e35, as it
causes a regression around "foo" +"foo" construct.

JIRA: YANGTOOLS-1089
Change-Id: Ib5af7a994c19bf99fb5cb2a875063d623cc6c3f7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
yang/yang-parser-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/parser/antlr/YangStatementLexer.g4
yang/yang-parser-antlr/src/main/antlr4/org/opendaylight/yangtools/yang/parser/antlr/YangStatementParser.g4
yang/yang-parser-rfc7950/src/main/java/org/opendaylight/yangtools/yang/parser/rfc7950/repo/ArgumentContextUtils.java
yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1089Test.java [deleted file]
yang/yang-parser-rfc7950/src/test/resources/bugs/YT1089/foo.yang [deleted file]

index 2872acb1616fc5d9279481439870a73a026695fc..8185545f38b047a9d728420be7ac2c6e0fcf978f 100644 (file)
@@ -35,7 +35,7 @@ fragment ESC : '\\' (["\\/bfnrt] | UNICODE);
 fragment UNICODE : 'u' HEX HEX HEX HEX;
 fragment HEX : [0-9a-fA-F] ;
 
-STRING: ((~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '"' | '\'' | '}' | '/')~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '}' )* ) | SUB_STRING );
+STRING: ((~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '"' | '\'' | '}' | '/' | '+')~( '\r' | '\n' | '\t' | ' ' | ';' | '{' | '}' )* ) | SUB_STRING );
 
 mode BLOCK_COMMENT_MODE;
 END_BLOCK_COMMENT : '*/' -> popMode, skip;
index 2408d93a765a09dd54d297335d69ccffae476335..9f836e2e3210053ccbc39cda5eaccdcfcde9111d 100644 (file)
@@ -14,4 +14,4 @@ options {
 statement : SEP* keyword SEP* (argument)? SEP* (SEMICOLON | LEFT_BRACE SEP* (statement)* SEP* RIGHT_BRACE SEP*) SEP*;
 keyword : (IDENTIFIER COLON)? IDENTIFIER;
 
-argument : STRING (SEP* PLUS SEP* STRING)* | PLUS | IDENTIFIER;
+argument : STRING (SEP* PLUS SEP* STRING)* | IDENTIFIER;
index 2aefece439d7042d23d56a41f65a50ef0262b7b6..ea51ac5149b14f58d3924034491a3331d9d3822c 100644 (file)
@@ -118,8 +118,6 @@ abstract class ArgumentContextUtils {
             case YangStatementParser.IDENTIFIER:
                 // Simple case, there is a simple string, which cannot contain anything that we would need to process.
                 return firstNode.getText();
-            case YangStatementParser.PLUS:
-                return "+";
             case YangStatementParser.STRING:
                 // Complex case, defer to a separate method
                 return concatStrings(context, ref);
diff --git a/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1089Test.java b/yang/yang-parser-rfc7950/src/test/java/org/opendaylight/yangtools/yang/stmt/YT1089Test.java
deleted file mode 100644 (file)
index cba0465..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright (c) 2020 PANTHEON.tech, 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.stmt;
-
-import static org.hamcrest.CoreMatchers.instanceOf;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-
-import com.google.common.collect.Iterables;
-import java.util.Iterator;
-import org.junit.Test;
-import org.opendaylight.yangtools.yang.common.QName;
-import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
-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.DescriptionEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.LeafEffectiveStatement;
-import org.opendaylight.yangtools.yang.model.api.stmt.NamespaceEffectiveStatement;
-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.TypeEffectiveStatement;
-
-public class YT1089Test {
-    @Test
-    public void testPlusLexing() throws Exception {
-        final EffectiveModelContext ctx = StmtTestUtils.parseYangSource("/bugs/YT1089/foo.yang");
-        assertEquals(1, ctx.getModuleStatements().size());
-
-        final Iterator<? extends EffectiveStatement<?, ?>> it =
-                Iterables.getOnlyElement(ctx.getModuleStatements().values()).effectiveSubstatements().iterator();
-
-        assertThat(it.next(), instanceOf(NamespaceEffectiveStatement.class));
-        assertThat(it.next(), instanceOf(PrefixEffectiveStatement.class));
-
-        EffectiveStatement<?, ?> stmt = it.next();
-        assertThat(stmt, instanceOf(DescriptionEffectiveStatement.class));
-        assertEquals("+something", stmt.argument());
-
-        stmt = it.next();
-        assertThat(stmt, instanceOf(ContactEffectiveStatement.class));
-        assertEquals("contact++", stmt.argument());
-
-        stmt = it.next();
-        assertThat(stmt, instanceOf(OrganizationEffectiveStatement.class));
-        assertEquals("organiza++tion", stmt.argument());
-
-        assertFoo(it.next());
-        assertBar(it.next());
-        assertFalse(it.hasNext());
-    }
-
-    private static void assertFoo(final EffectiveStatement<?, ?> stmt) {
-        assertThat(stmt, instanceOf(LeafEffectiveStatement.class));
-        assertEquals(QName.create("urn:foo", "foo"), stmt.argument());
-
-        final Iterator<? extends EffectiveStatement<?, ?>> it = stmt.effectiveSubstatements().iterator();
-        assertThat(it.next(), instanceOf(TypeEffectiveStatement.class));
-        assertEquals("+", it.next().argument());
-        assertEquals("squotdquot", it.next().argument());
-        assertEquals("++", it.next().argument());
-        assertFalse(it.hasNext());
-    }
-
-    private static void assertBar(final EffectiveStatement<?, ?> stmt) {
-        assertThat(stmt, instanceOf(LeafEffectiveStatement.class));
-        assertEquals(QName.create("urn:foo", "bar"), stmt.argument());
-        final Iterator<? extends EffectiveStatement<?, ?>> it = stmt.effectiveSubstatements().iterator();
-        assertThat(it.next(), instanceOf(TypeEffectiveStatement.class));
-        assertEquals("++", it.next().argument());
-        assertEquals("+ + ++", it.next().argument());
-        assertEquals("++ + +", it.next().argument());
-        assertFalse(it.hasNext());
-    }
-}
diff --git a/yang/yang-parser-rfc7950/src/test/resources/bugs/YT1089/foo.yang b/yang/yang-parser-rfc7950/src/test/resources/bugs/YT1089/foo.yang
deleted file mode 100644 (file)
index 982dca3..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-module foo {
-    namespace urn:foo;
-    prefix foo;
-
-    description +something;
-    contact contact++;
-    organization organiza++tion;
-
-    leaf foo {
-      type string;
-      default +;
-      description 'squot' + "dquot";
-      reference "+" + '+';
-    }
-
-    leaf bar {
-      type string;
-      default ++;
-      description "+ + ++";
-      reference "++ + +";
-    }
-}