Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

java.lang.NullPointerException while processing valid class #1092

Closed
g4s8 opened this issue Jun 10, 2021 · 7 comments
Closed

java.lang.NullPointerException while processing valid class #1092

g4s8 opened this issue Jun 10, 2021 · 7 comments

Comments

@g4s8
Copy link

g4s8 commented Jun 10, 2021

When running qulice on some specific class with mvn verify -Pqulice -e the plugin crashes with NullPointerException without complaining or providing any useful information.

The stacktrace:

[ERROR] Failed to execute goal com.qulice:qulice-maven-plugin:0.18.19:check (default) on project http: Execution default of goal com.qulice:qulice-maven-plugin:0.18.19:check failed: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Failed to process files: Exception was thrown while processing /home/projects/github.com/artipie/http/src/main/java/com/artipie/http/rq/multipart/DemandCalc.java: NullPointerException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.qulice:qulice-maven-plugin:0.18.19:check (default) on project http: Execution default of goal com.qulice:qulice-maven-plugin:0.18.19:check failed: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Failed to process files
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    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:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default of goal com.qulice:qulice-maven-plugin:0.18.19:check failed: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Failed to process files
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:148)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    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:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: java.lang.IllegalStateException: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Failed to process files
    at com.qulice.maven.CheckMojo.run (CheckMojo.java:118)
    at com.qulice.maven.CheckMojo.doExecute (CheckMojo.java:80)
    at com.qulice.maven.AbstractQuliceMojo.execute (AbstractQuliceMojo.java:170)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    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:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Failed to process files
    at java.util.concurrent.FutureTask.report (FutureTask.java:122)
    at java.util.concurrent.FutureTask.get (FutureTask.java:205)
    at com.qulice.maven.CheckMojo.run (CheckMojo.java:113)
    at com.qulice.maven.CheckMojo.doExecute (CheckMojo.java:80)
    at com.qulice.maven.AbstractQuliceMojo.execute (AbstractQuliceMojo.java:170)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    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:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)
Caused by: java.lang.IllegalStateException: Failed to process files
    at com.qulice.checkstyle.CheckstyleValidator.validate (CheckstyleValidator.java:102)
    at com.qulice.maven.CheckMojo$ValidatorCallable.call (CheckMojo.java:235)
    at com.qulice.maven.CheckMojo$ValidatorCallable.call (CheckMojo.java:203)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
    at java.lang.Thread.run (Thread.java:834)
Caused by: com.puppycrawl.tools.checkstyle.api.CheckstyleException: Exception was thrown while processing /home/projects/github.com/artipie/http/src/main/java/com/artipie/http/rq/multipart/DemandCalc.java
    at com.puppycrawl.tools.checkstyle.Checker.processFiles (Checker.java:298)
    at com.puppycrawl.tools.checkstyle.Checker.process (Checker.java:217)
    at com.qulice.checkstyle.CheckstyleValidator.validate (CheckstyleValidator.java:100)
    at com.qulice.maven.CheckMojo$ValidatorCallable.call (CheckMojo.java:235)
    at com.qulice.maven.CheckMojo$ValidatorCallable.call (CheckMojo.java:203)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
    at java.lang.Thread.run (Thread.java:834)
Caused by: java.lang.NullPointerException
    at com.qulice.checkstyle.ConstantUsageCheck.getText (ConstantUsageCheck.java:143)
    at com.qulice.checkstyle.ConstantUsageCheck.parseVarDef (ConstantUsageCheck.java:127)
    at com.qulice.checkstyle.ConstantUsageCheck.checkField (ConstantUsageCheck.java:87)
    at com.qulice.checkstyle.ConstantUsageCheck.visitToken (ConstantUsageCheck.java:68)
    at com.puppycrawl.tools.checkstyle.TreeWalker.notifyVisit (TreeWalker.java:390)
    at com.puppycrawl.tools.checkstyle.TreeWalker.processIter (TreeWalker.java:501)
    at com.puppycrawl.tools.checkstyle.TreeWalker.walk (TreeWalker.java:330)
    at com.puppycrawl.tools.checkstyle.TreeWalker.processFiltered (TreeWalker.java:183)
    at com.puppycrawl.tools.checkstyle.api.AbstractFileSetCheck.process (AbstractFileSetCheck.java:81)
    at com.puppycrawl.tools.checkstyle.Checker.processFile (Checker.java:319)
    at com.puppycrawl.tools.checkstyle.Checker.processFiles (Checker.java:289)
    at com.puppycrawl.tools.checkstyle.Checker.process (Checker.java:217)
    at com.qulice.checkstyle.CheckstyleValidator.validate (CheckstyleValidator.java:100)
    at com.qulice.maven.CheckMojo$ValidatorCallable.call (CheckMojo.java:235)
    at com.qulice.maven.CheckMojo$ValidatorCallable.call (CheckMojo.java:203)
    at java.util.concurrent.FutureTask.run (FutureTask.java:264)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1128)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:628)
    at java.lang.Thread.run (Thread.java:834)
[ERROR] 

The class to reproduce:

/*
 * The MIT License (MIT) Copyright (c) 2020-2021 artipie.com
 * https://github.com/artipie/npm-adapter/LICENSE.txt
 */
package com.artipie.http.rq.multipart;

import java.util.function.LongUnaryOperator;

/**
 * New reactive demand calculator.
 * <p>
 * It implements {@link LongUnaryOperator} by adding two long numbers
 * and it count boundary and special cases defining in reactive-streams
 * specification, such as sum of {@link Long.MAX_VALUE} with any number is
 * {@link Long.MAX_VALUE}.
 * <br/>
 * It's fast enough to perform CAS operations in atomic values.
 * </p>
 * @since 1.0
 */
public final class DemandCalc implements LongUnaryOperator {

    /**
     * Demand calculator for MAX long value.
     */
    private static final LongUnaryOperator MAX = (old) -> Long.MAX_VALUE;

    /**
     * Demand calculator for zero value.
     */
    private static final LongUnaryOperator ZERO = (old) -> old;

    /**
     * Amount to add.
     */
    private final long add;

    /**
     * New demand calculator.
     * @param add Amount ot add
     */
    private DemandCalc(long add) {
        this.add = add;
    }

    @Override
    public long applyAsLong(long old) {
        final long next;
        final long tmp = old + this.add;
        if (tmp < 0) {
            next = Long.MAX_VALUE;
        } else {
            next = tmp;
        }
        return next;
    }

    /**
     * New demand calculator for adding amount to old value.
     * @param amount To add
     * @return Calculator operator
     */
    public static LongUnaryOperator add(final long amount) {
        final LongUnaryOperator res;
        if (amount < 0) {
            throw new IllegalStateException("amount can't be less than zero");
        }
        if (amount == Long.MAX_VALUE) {
            res = DemandCalc.MAX;
        } else if (amount == 0) {
            res = DemandCalc.ZERO;
        } else {
            res = new DemandCalc(amount);
        }
        return res;
    }
}

Qulice version is 0.18.19

@yegor256
Copy link
Owner

yegor256 commented Oct 2, 2021

@g4s8 try with 0.19.0 please

@dykov
Copy link

dykov commented Oct 18, 2021

Faced the same problem on 0.19.4 version:
Failed to execute goal com.qulice:qulice-maven-plugin:0.19.4:check (default) on project pmd-rules: Execution default of goal com.qulice:qulice-maven-plugin:0.19.4:check failed: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: Failed to process files

Code to reproduce:

package my.package;

import java.util.function.Predicate;

public class SomeClass {

    private static final Integer MY_INTEGER = 10;

    private static final Predicate<String> MY_PREDICATE =
        s -> s.equalsIgnoreCase("value");

}

JFYI: if you swap the declarations of variables, you will not have this problem:

package my.package;

import java.util.function.Predicate;

public class SomeClass {

    private static final Predicate<String> MY_PREDICATE =
        s -> s.equalsIgnoreCase("value");

    private static final Integer MY_INTEGER = 10;

}

@yegor256
Copy link
Owner

@yegor256 @dykov I have the same problem

yegor256 added a commit that referenced this issue Jul 13, 2022
yegor256 added a commit that referenced this issue Jul 13, 2022
yegor256 added a commit that referenced this issue Jul 13, 2022
yegor256 added a commit that referenced this issue Jul 13, 2022
yegor256 added a commit that referenced this issue Jul 13, 2022
yegor256 added a commit that referenced this issue Jul 13, 2022
yegor256 added a commit that referenced this issue Jul 13, 2022
yegor256 added a commit that referenced this issue Jul 13, 2022
@yegor256
Copy link
Owner

@rultor release, tag is 0.19.5

@rultor
Copy link
Collaborator

rultor commented Jul 13, 2022

@rultor release, tag is 0.19.5

@yegor256 OK, I will release it now. Please check the progress here

@rultor
Copy link
Collaborator

rultor commented Jul 13, 2022

@rultor release, tag is 0.19.5

@yegor256 Done! FYI, the full log is here (took me 44min)

@yegor256
Copy link
Owner

@g4s8 try version 0.19.5, it works for me

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants