Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-14569

Protocol parser throws a NPE if all branches of a switch statement or if/else contain a throw clause

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Obsolete
    • Icon: Major Major
    • 15.0.0.Dev01
    • 14.0.0.Final
    • Remote Protocols
    • None

      If you configure a protocol parser configuration file with a switch statement that contains all throw clauses then it will generate a NPE when trying to build the source file

      extractHeaderError switch status
          : { INVALID_MAGIC_OR_MESSAGE_ID_STATUS }? handleServerError { throw new HotRodClientException(serverMsg, messageId, status); }
          | { REQUEST_PARSING_ERROR_STATUS }? handleServerError { throw new HotRodClientException(serverMsg, messageId, status); }
          | { UNKNOWN_COMMAND_STATUS }? handleServerError { throw new HotRodClientException(serverMsg, messageId, status); }
          | { SERVER_ERROR_STATUS }? handleServerError { throw new HotRodClientException(serverMsg, messageId, status); }
          | { UNKNOWN_VERSION_STATUS }? handleServerError { throw new HotRodClientException(serverMsg, messageId, status); }
          | { COMMAND_TIMEOUT_STATUS }? serverMsg { throw new HotRodClientException(serverMsg, messageId, status); }
          | { ILLEGAL_LIFECYCLE_STATE }? serverMsg { throw new RemoteIllegalLifecycleStateException(serverMsg, messageId, status); }
          | { NODE_SUSPECTED }? serverMsg { throw new RemoteNodeSuspectException(serverMsg, messageId, status); }
          |  { throw new IllegalStateException(String.format("Unknown status: %#04x", status)) }
          ;
      

      will generate

      Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default of goal org.infinispan.maven-plugins:protocol-parser-generator:1.0.2.Final:generate failed: Cannot invoke "String.hashCode()" because "<local2>" is null
          at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:148)
          at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
          at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
          at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
          at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
          at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
          at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
          at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
          at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
          at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
          at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
          at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
          at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
          at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
          at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
          at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
          at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke (Method.java:568)
          at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
          at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
          at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
          at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
      Caused by: java.lang.NullPointerException: Cannot invoke "String.hashCode()" because "<local2>" is null
          at org.infinispan.ppg.generator.Machine.defaultFor (Machine.java:195)
          at org.infinispan.ppg.generator.Machine.buildSource (Machine.java:129)
          at org.infinispan.ppg.ProtocolParserGeneratorMojo.execute (ProtocolParserGeneratorMojo.java:68)
          at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
          at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:208)
          at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:154)
          at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:146)
          at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
          at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
          at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
          at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
          at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
          at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
          at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
          at org.apache.maven.cli.MavenCli.execute (MavenCli.java:954)
          at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)
          at org.apache.maven.cli.MavenCli.main (MavenCli.java:192)
          at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
          at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
          at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke (Method.java:568)
          at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:289)
          at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:229)
          at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:415)
          at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:356)
      

            wburns@redhat.com Will Burns
            wburns@redhat.com Will Burns
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: