Uploaded image for project: 'yangide'
  1. yangide
  2. YANGIDE-5

No editor view error marker for invalid recursive container definition.

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • None
    • unspecified
    • General
    • None
    • Operating System: All
      Platform: All

    • 5849

      Most syntactical and semantic errors are properly noticed and render proper editor view markers.

      I accidentally discovered an odd example that is syntactically correct, but semantically wrong, and the Yang parser fails to compile it, but it doesn't render an editor view error marker.

      In particular, a yang module with the following pattern will do this:
      -----------------
      grouping machine-def {
      container factory

      { uses baz:machine-def; }

      container factory2

      { uses machine-def; // line 24 }

      }
      ----------------

      This produces the following stack trace in the problems view, but no editor marker:
      ---------------------
      yang-to-sources: Unable to parse yang files from /home/opnfv/workspace-yangidetest/yangproject2/src/main/yang (org.opendaylight.yangtools:yang-maven-plugin:1.0.0-SNAPSHOT:generate-sources:generate-sources:generate-sources)

      org.apache.maven.plugin.MojoExecutionException: yang-to-sources: Unable to parse yang files from /home/opnfv/workspace-yangidetest/yangproject2/src/main/yang
      at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.processYang(YangToSourcesProcessor.java:200)
      at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.execute(YangToSourcesProcessor.java:93)
      at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesMojo.execute(YangToSourcesMojo.java:116)
      at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
      at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:331)
      at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1362)
      at org.eclipse.m2e.core.internal.embedder.MavenImpl$11.call(MavenImpl.java:1)
      at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
      at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
      at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1360)
      at org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:52)
      at org.opendaylight.yangide.m2e.yang.YangBuildParticipant.build(YangBuildParticipant.java:97)
      at org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:137)
      at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:172)
      at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)
      at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1$1.call(MavenBuilder.java:115)
      at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
      at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
      at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:105)
      at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:176)
      at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
      at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
      at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:86)
      at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:200)
      at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:734)
      at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
      at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:205)
      at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:245)
      at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:300)
      at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
      at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:303)
      at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:359)
      at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:382)
      at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:144)
      at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)
      at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
      Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Grouping '(http://acme.example.com/system?revision=2007-06-09)machine-def' was not resolved. [at META-INF/yang/acme-system.yang:24:9]
      at org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException.throwIf(InferenceException.java:47)
      at org.opendaylight.yangtools.yang.parser.stmt.rfc6020.UsesStatementImpl$Definition$1.prerequisiteFailed(UsesStatementImpl.java:106)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.ModifierImpl.failModifier(ModifierImpl.java:91)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.SourceSpecificContext.failModifiers(SourceSpecificContext.java:290)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.addSourceExceptions(BuildGlobalContext.java:214)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.completePhaseActions(BuildGlobalContext.java:283)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.BuildGlobalContext.buildEffective(BuildGlobalContext.java:175)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:105)
      at org.opendaylight.yangtools.yang.parser.stmt.reactor.CrossSourceStatementReactor$BuildAction.buildEffective(CrossSourceStatementReactor.java:123)
      at org.opendaylight.yangtools.yang2sources.plugin.YangToSourcesProcessor.processYang(YangToSourcesProcessor.java:169)
      ... 35 more
      ---------------------

      Note that in the code sample, the "machine-def" grouping is RECURSIVELY referenced, which can't possibly be valid.

      Obviously a contrived scenario, but also wrong. It needs to produce a proper error marker.

      The key portion of the stacktrace is the following:
      ---------------
      Caused by: org.opendaylight.yangtools.yang.parser.spi.meta.InferenceException: Grouping '(http://acme.example.com/system?revision=2007-06-09)machine-def' was not resolved. [at META-INF/yang/acme-system.yang:24:9]
      -----------------

      Line 24 in the code sample is marked, showing what line should get the error marker. It would be great if the error could be more intelligent, knowing that it was inside the definition of the mentioned grouping, so the error could refer to the fact that you can't reference a component from inside the component.

            Unassigned Unassigned
            dkarr David M. Karr
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated: