TypeFox / yang-lsp

A Language Server for YANG
http://www.yang-central.org
Apache License 2.0
52 stars 13 forks source link

Serialization of nested group using another nested group fails #188

Closed andreasjakobik closed 3 years ago

andreasjakobik commented 4 years ago

Hello,

in the _3gpp_common_fm.yang file (attached) there is a nested group ThresholdInfoGrp that uses another nested group ThresholdPackGrp. In essense we have the following:

grouping AlarmRecordGrp {

        leaf alarmId {
            type string;
        }

        grouping ThresholdPackGrp {
            leaf thresholdLevel {
                type string;
            }
            leaf thresholdValue {
                type string;
            }
        }

        grouping ThresholdInfoGrp {
            leaf measurementType {
                type string;
            }

            uses ThresholdPackGrp;
        }

        list thresholdInfo {
            uses ThresholdInfoGrp;
        }
    }

It seems the fact the groupings are nested (i.e. grouping inside a grouping) makes the serializatin fail as shown in the stacktrace _3gpp-common-fm.zip

below:

# yt eyang-preprocessor --files _3gpp-common-fm2.yang  --module-dirs .
java.lang.RuntimeException: No EObjectDescription could be found in Scope GroupingRef.node for Module'_3gpp-common-fm2'.substatements[5]->Grouping'AlarmRecordGrp'.substatements[1]->Grouping'ThresholdPackGrp'
Semantic Object: Module'_3gpp-common-fm2'.substatements[5]->Grouping'AlarmRecordGrp'.substatements[2]->Grouping'ThresholdInfoGrp'.substatements[1]->Uses.grouping->GroupingRef
URI: file:/home/ericsson/src/ericsson/ADPPRG-38013/_3gpp-common-fm2.yang
EStructuralFeature: yang::GroupingRef.node
        at org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic$ExceptionThrowingAcceptor.accept(ISerializationDiagnostic.java:131)
        at org.eclipse.xtext.serializer.tokens.CrossReferenceSerializer.getCrossReferenceNameFromScope(CrossReferenceSerializer.java:138)
        at io.typefox.yang.resource.YangCrossReferenceSerializer.getCrossReferenceNameFromScope(YangCrossReferenceSerializer.java:148)
        at io.typefox.yang.resource.YangCrossReferenceSerializer.serializeCrossRef(YangCrossReferenceSerializer.java:116)
        at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.getToken(SequenceFeeder.java:482)
        at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:239)
        at io.typefox.yang.serializer.YangSemanticSequencer.sequence_GroupingRef(YangSemanticSequencer.java:1122)
        at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:238)
        at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:67)
        at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:326)
        at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:353)
        at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:247)
        at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:451)
        at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.createSequence(BacktrackingSemanticSequencer.java:511)
        at io.typefox.yang.serializer.YangSemanticSequencer.sequence_StatementEnd_Uses(YangSemanticSequencer.java:1856)
        at io.typefox.yang.serializer.YangSemanticSequencer.sequence(YangSemanticSequencer.java:411)
        at org.eclipse.xtext.serializer.sequencer.AbstractSemanticSequencer.createSequence(AbstractSemanticSequencer.java:67)
        at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptEObjectRuleCall(SequenceFeeder.java:326)
        at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.acceptRuleCall(SequenceFeeder.java:353)
        at org.eclipse.xtext.serializer.acceptor.SequenceFeeder.accept(SequenceFeeder.java:264)
        at org.eclipse.xtext.serializer.sequencer.BacktrackingSemanticSequencer.accept(BacktrackingSemanticSequencer.java:444)
        ...

Any idea how to fix?

Thanks, Andreas