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

Exception analyzing ... using detector edu.umd.cs.findbugs.detect.RedundantConditions #608

Closed
gargooza opened this issue Apr 5, 2018 · 12 comments

Comments

@gargooza
Copy link

gargooza commented Apr 5, 2018

I'm getting a lot of the same exception:

 Exception analyzing com.redacted.MyTroublesomeClassToAnalyze using detector edu.umd.cs.findbugs.detect.RedundantConditions
   java.lang.IndexOutOfBoundsException: fromIndex: 1303 > toIndex: 1114
     At java.util.BitSet.checkRange(BitSet.java:366)
     At java.util.BitSet.set(BitSet.java:481)
     At edu.umd.cs.findbugs.classfile.engine.bcel.ValueRangeAnalysisFactory.analyze(ValueRangeAnalysisFactory.java:789)
     At edu.umd.cs.findbugs.classfile.engine.bcel.ValueRangeAnalysisFactory.analyze(ValueRangeAnalysisFactory.java:87)
     At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.analyzeMethod(AnalysisCache.java:369)
     At edu.umd.cs.findbugs.classfile.impl.AnalysisCache.getMethodAnalysis(AnalysisCache.java:322)
     At edu.umd.cs.findbugs.detect.RedundantConditions.visitClassContext(RedundantConditions.java:67)
     At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
     At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1079)
     At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:280)
     At edu.umd.cs.findbugs.FindBugs.runMain(FindBugs.java:401)
     At edu.umd.cs.findbugs.FindBugs2.main(FindBugs2.java:1187)

MyTroublesomeClassToAnalyze is not the only class for which this is a problem. Other classes throw the same exception, just with different indices for the IndexOutOfBoundsException:

MyTroublesomeClassToAnalyze.java: java.lang.IndexOutOfBoundsException: fromIndex: 1303 > toIndex: 1114
AnotherClass.java: java.lang.IndexOutOfBoundsException: fromIndex: 1078 > toIndex: 919
YetAnother.java: java.lang.IndexOutOfBoundsException: fromIndex: 1226 > toIndex: 1050
EnoughIsEnough.java: java.lang.IndexOutOfBoundsException: fromIndex: 969 > toIndex: 808

Each of these classes extends a common base class, so they do have that in common.

@victorwss
Copy link

Can you post the code of those classes?

@gargooza
Copy link
Author

gargooza commented Apr 9, 2018

Sorry, but I cannot post the code as it's proprietary

@iloveeclipse
Copy link
Member

@gargooza : but you can try to isolate a snippet which shows the problem or you can close this issue as "can't reproduce".

@gargooza
Copy link
Author

gargooza commented Apr 9, 2018

I was able to isolate the issue. I cannot actually paste code, but the problem line in each of the exceptions is an assert. If I comment out the assert, SpotBugs succeeds. The assert is nested within some loop/conditional blocks like this:

methodThatFails() {
  for() {
    while() {
      if() {
        if() {
        }
        else {
          assert( someCondition ) : "assertion failure message";
        }
      }
    }
  }
}

@lgoldstein
Copy link

Happens also for me:

     [java] JVM args ignored when same JVM is used.
     [java] The following errors occurred during analysis:
     [java]   Exception analyzing com.cb4.service.impl.config.CommonMetadataConfig using detector edu.umd.cs.findbugs.detect.FindUnrelatedTypesInGenericContainer
     [java]     java.lang.IndexOutOfBoundsException: The index 0 is too large for C
     [java]       At edu.umd.cs.findbugs.ba.generic.GenericObjectType.getParameterAt(GenericObjectType.java:161)
     [java]       At edu.umd.cs.findbugs.detect.FindUnrelatedTypesInGenericContainer.analyzeMethod(FindUnrelatedTypesInGenericContainer.java:578)
     [java]       At edu.umd.cs.findbugs.detect.FindUnrelatedTypesInGenericContainer.visitClassContext(FindUnrelatedTypesInGenericContainer.java:259)
     [java]       At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
     [java]       At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1089)
     [java]       At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:283)
     [java]       At edu.umd.cs.findbugs.FindBugs.runMain(FindBugs.java:402)
     [java]       At edu.umd.cs.findbugs.FindBugs2.main(FindBugs2.java:1200)
     [java]       At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
     [java]       At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
     [java]       At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
     [java]       At java.lang.reflect.Method.invoke(Method.java:498)
     [java]       At org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:218)
     [java]       At java.lang.Thread.run(Thread.java:748)

@lgoldstein
Copy link

Here is the class it is complaining about - strangely enough, the build continues despite the exception

public abstract class CommonMetadataConfig
        extends AbstractCachingEnvironmentAwareConfigBean
        implements MetadataConfigDescriptor {
    public static final String DEFAULT_CONFIGURABLE_BEANS_LIST = ConfigUtils.ALL_VALUE;

    private final ObjectName resourceName;
    private final String selfName;

    protected CommonMetadataConfig() throws JMException {
        this.resourceName = Objects.requireNonNull(
            MBeanExportUtils.getManagedResourceObjectName(this),
            "Missing exported MBean JMX object name");
        this.selfName = Validate.notBlank(
            MBEAN_NAME_VALUE_EXTRACTOR.apply(resourceName),
            "Missing container resource name in %s",
            JmxUtils.CANONICAL_NAME_EXTRACTOR.apply(resourceName));
    }

    protected CommonMetadataConfig(ObjectName objectName) {
        this.resourceName = Objects.requireNonNull(objectName, "Missing exported MBean JMX object name");
        this.selfName = Validate.notBlank(
            MBEAN_NAME_VALUE_EXTRACTOR.apply(resourceName),
            "Missing container resource name in %s",
            JmxUtils.CANONICAL_NAME_EXTRACTOR.apply(resourceName));
    }

    @Override   // TODO make this a default method in Java-8
    public String getPrimaryMBeanDomain() {
        return JmxUtils.DOMAIN_EXTRACTOR.apply(getResourceObjectName());
    }

    @Override
    public ObjectName getResourceObjectName() {
        return resourceName;
    }

    public String getConfigurableMBeansNamesList() {
        return StringUtils.join(getConfigurableMBeansNames(), ',');
    }

    @Override
    public void onContextInitialized(ApplicationContext context) {
        super.onContextInitialized(context);

        Collection<String> namesList = getConfigurableMBeansNames();
        validateMBeansNamesList(namesList, context);
    }

    public abstract void setConfigurableMBeansNamesList(String propValue);

    // NOTE: don't really need the application context to be provided, but useful for unit tests
    public void updateConfigurableMBeansNamesList(String propName, String propValue, ApplicationContext context) {
        if (StringUtils.isBlank(propValue) || DEFAULT_CONFIGURABLE_BEANS_LIST.equalsIgnoreCase(propValue)) {
            updateProperty(propName, DEFAULT_CONFIGURABLE_BEANS_LIST, DEFAULT_CONFIGURABLE_BEANS_LIST);
            return;
        }

        updateConfigurableMBeansNamesList(propName, Arrays.asList(StringUtils.split(propValue, ',')), context);
    }

    // NOTE: don't really need the application context to be provided, but useful for unit tests
    public void updateConfigurableMBeansNamesList(String propName, Collection<String> namesList, ApplicationContext context) {
        validateMBeansNamesList(namesList, context);
        updateProperty(propName, StringUtils.join(namesList, ','), DEFAULT_CONFIGURABLE_BEANS_LIST);
    }

    protected <C extends Collection<String>> C validateMBeansNamesList(C namesList, ApplicationContext context) {
        Validate.validState(CollectionUtils.isNotEmpty(namesList) && namesList.contains(selfName),
            "Configured names list does not contain '%s': %s", selfName, namesList);

        // Make sure no repetitions (case insensitive)
        Collection<String> effectiveList = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
        effectiveList.addAll(namesList);
        Validate.validState(effectiveList.size() == namesList.size(), "Repeated values in list: %s", namesList);

        Collection<String> availableNames = detectAllConfigurableMBeansNames(context);
        Validate.validState(availableNames.containsAll(namesList), "Unknown names specified in list: %s", namesList);
        return namesList;
    }

    // NOTE: don't really need the application context to be provided, but useful for unit tests
    public List<String> resolveConfigurableMBeansNames(String propName, ApplicationContext context) {
        String propValue = getProperty(propName, String.class, DEFAULT_CONFIGURABLE_BEANS_LIST);
        // Check if specific names listed
        if (StringUtils.isNotBlank(propValue) && (!DEFAULT_CONFIGURABLE_BEANS_LIST.equalsIgnoreCase(propValue))) {
            String[] namesList = StringUtils.split(propValue, ',');
            return Collections.unmodifiableList(Arrays.asList(namesList));
        }

        return detectAllConfigurableMBeansNames(context);
    }

    // NOTE: don't really need the application context to be provided, but useful for unit tests
    // TODO consider caching the result if repeated frequent calls
    public List<String> detectAllConfigurableMBeansNames(ApplicationContext context) {
        Collection<ObjectName> configNames = detectAllConfigurableMBeans(context);
        if (CollectionUtils.isEmpty(configNames)) {
            return Collections.emptyList();
        }

        return CollectionUtils.collect(configNames, MBEAN_NAME_VALUE_EXTRACTOR::apply, new ArrayList<String>(configNames.size()));
    }

    // NOTE: don't really need the application context to be provided, but useful for unit tests
    // TODO consider caching the result if repeated frequent calls
    public List<ObjectName> detectAllConfigurableMBeans(ApplicationContext context) {
        // Context might be null for unit tests
        Map<String, ?> beansMap = ApplicationContextUtils.getAllBeansWithAnnotation(context, PropertySource.class);
        if (MapUtils.isEmpty(beansMap)) {
            beansMap = ApplicationContextUtils.getAllBeansWithAnnotation(context, PropertySources.class);
        }
        if (MapUtils.isEmpty(beansMap)) {
            return Collections.emptyList();
        }

        List<ObjectName> namesList = new ArrayList<>(beansMap.size());
        boolean debugEnabled = logger.isDebugEnabled();
        for (Map.Entry<String, ?> beanEntry : beansMap.entrySet()) {
            String beanName = beanEntry.getKey();
            Object beanInstance = beanEntry.getValue();
            Class<?> beanClass = beanInstance.getClass();
            try {
                ObjectName jmxName = MBeanExportUtils.getManagedResourceObjectName(beanClass);
                if (jmxName == null) {
                    if (debugEnabled) {
                        logger.debug("detectAllConfigurableMBeans({})[{}] not a managed resource", beanName, SafeUtils.safeShortName(beanClass));
                    }
                    continue;
                }

                String configName = MBEAN_NAME_VALUE_EXTRACTOR.apply(jmxName);
                Validate.notBlank(configName, "No '" + NamedEntity.PROP_NAME + "' property in resource name='%s'", jmxName.getCanonicalName());
                if (debugEnabled) {
                    logger.debug("detectAllConfigurableMBeans({})[{}] {}: {}",
                        beanName, SafeUtils.safeShortName(beanClass), jmxName.getCanonicalName(), configName);
                }
                namesList.add(jmxName);
            } catch (Exception e) {
                logger.warn("detectAllConfigurableMBeans({})[{}] failed ({}) to extract resource object name: {}",
                    beanName, SafeUtils.safeShortName(beanClass), e.getClass().getSimpleName(), e.getMessage());
            }
        }

        return namesList;
    }
}

@ThrawnCA
Copy link
Contributor

Are you able to provide the (bytecode) output of javap -v? It looks like this code depends on your other classes, so would be difficult for someone else to compile.

@abcfy2
Copy link

abcfy2 commented May 9, 2019

I can reproduce this issue. Here is my project: https://github.com/DTeam-Top/grails-rest-seed

git clone --depth 1 https://github.com/DTeam-Top/grails-rest-seed.git
./gradlew spotbugsMain

Will see this error:

The following errors occurred during analysis:
  Exception analyzing top.dteam.earth.backend.user.UserController using detector edu.umd.cs.findbugs.detect.FindNullDeref
    java.lang.IndexOutOfBoundsException: bitIndex < 0: -1
      At java.util.BitSet.set(BitSet.java:444)
      At edu.umd.cs.findbugs.ba.ClassContext.linesMentionedMultipleTimes(ClassContext.java:819)
      At edu.umd.cs.findbugs.ba.npe.NullDerefAndRedundantComparisonFinder.<init>(NullDerefAndRedundantComparisonFinder.java:135)
      At edu.umd.cs.findbugs.detect.FindNullDeref.analyzeMethod(FindNullDeref.java:277)
      At edu.umd.cs.findbugs.detect.FindNullDeref.visitClassContext(FindNullDeref.java:209)
      At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
      At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1080)
      At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:281)
      At com.github.spotbugs.internal.spotbugs.SpotBugsRunner.run(SpotBugsRunner.java:40)
      At org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:39)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:46)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:30)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:101)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
      At org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
      At org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
      At org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
      At java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      At java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      At org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
      At java.lang.Thread.run(Thread.java:748)
  Exception analyzing top.dteam.earth.backend.user.UserController using detector edu.umd.cs.findbugs.detect.LoadOfKnownNullValue
    java.lang.IndexOutOfBoundsException: bitIndex < 0: -1
      At java.util.BitSet.set(BitSet.java:444)
      At edu.umd.cs.findbugs.ba.ClassContext.linesMentionedMultipleTimes(ClassContext.java:819)
      At edu.umd.cs.findbugs.detect.LoadOfKnownNullValue.analyzeMethod(LoadOfKnownNullValue.java:79)
      At edu.umd.cs.findbugs.detect.LoadOfKnownNullValue.visitClassContext(LoadOfKnownNullValue.java:62)
      At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
      At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1080)
      At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:281)
      At com.github.spotbugs.internal.spotbugs.SpotBugsRunner.run(SpotBugsRunner.java:40)
      At org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:39)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:46)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:30)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:101)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
      At org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
      At org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
      At org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
      At java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      At java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      At org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
      At java.lang.Thread.run(Thread.java:748)
  Exception analyzing top.dteam.earth.backend.user.UserController using detector edu.umd.cs.findbugs.detect.FindDeadLocalStores
    java.lang.IndexOutOfBoundsException: bitIndex < 0: -1
      At java.util.BitSet.set(BitSet.java:444)
      At edu.umd.cs.findbugs.ba.ClassContext.linesMentionedMultipleTimes(ClassContext.java:819)
      At edu.umd.cs.findbugs.detect.FindDeadLocalStores.analyzeMethod(FindDeadLocalStores.java:213)
      At edu.umd.cs.findbugs.detect.FindDeadLocalStores.visitClassContext(FindDeadLocalStores.java:194)
      At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
      At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1080)
      At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:281)
      At com.github.spotbugs.internal.spotbugs.SpotBugsRunner.run(SpotBugsRunner.java:40)
      At org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:39)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:46)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:30)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:101)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
      At org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
      At org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
      At org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
      At java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      At java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      At org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
      At java.lang.Thread.run(Thread.java:748)
  Exception analyzing top.dteam.earth.backend.user.UserController using detector edu.umd.cs.findbugs.detect.FindBadCast2
    java.lang.IndexOutOfBoundsException: bitIndex < 0: -1
      At java.util.BitSet.set(BitSet.java:444)
      At edu.umd.cs.findbugs.ba.ClassContext.linesMentionedMultipleTimes(ClassContext.java:819)
      At edu.umd.cs.findbugs.detect.FindBadCast2.analyzeMethod(FindBadCast2.java:198)
      At edu.umd.cs.findbugs.detect.FindBadCast2.visitClassContext(FindBadCast2.java:111)
      At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
      At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1080)
      At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:281)
      At com.github.spotbugs.internal.spotbugs.SpotBugsRunner.run(SpotBugsRunner.java:40)
      At org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:39)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:46)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:30)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:101)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
      At org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
      At org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
      At org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
      At java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      At java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      At org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
      At java.lang.Thread.run(Thread.java:748)
  Exception analyzing top.dteam.earth.backend.user.ManagementController using detector edu.umd.cs.findbugs.detect.FindNullDeref
    java.lang.IndexOutOfBoundsException: bitIndex < 0: -1
      At java.util.BitSet.set(BitSet.java:444)
      At edu.umd.cs.findbugs.ba.ClassContext.linesMentionedMultipleTimes(ClassContext.java:819)
      At edu.umd.cs.findbugs.ba.npe.NullDerefAndRedundantComparisonFinder.<init>(NullDerefAndRedundantComparisonFinder.java:135)
      At edu.umd.cs.findbugs.detect.FindNullDeref.analyzeMethod(FindNullDeref.java:277)
      At edu.umd.cs.findbugs.detect.FindNullDeref.visitClassContext(FindNullDeref.java:209)
      At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
      At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1080)
      At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:281)
      At com.github.spotbugs.internal.spotbugs.SpotBugsRunner.run(SpotBugsRunner.java:40)
      At org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:39)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:46)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:30)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:101)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
      At org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
      At org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
      At org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
      At java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      At java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      At org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
      At java.lang.Thread.run(Thread.java:748)
  Exception analyzing top.dteam.earth.backend.user.ManagementController using detector edu.umd.cs.findbugs.detect.LoadOfKnownNullValue
    java.lang.IndexOutOfBoundsException: bitIndex < 0: -1
      At java.util.BitSet.set(BitSet.java:444)
      At edu.umd.cs.findbugs.ba.ClassContext.linesMentionedMultipleTimes(ClassContext.java:819)
      At edu.umd.cs.findbugs.detect.LoadOfKnownNullValue.analyzeMethod(LoadOfKnownNullValue.java:79)
      At edu.umd.cs.findbugs.detect.LoadOfKnownNullValue.visitClassContext(LoadOfKnownNullValue.java:62)
      At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
      At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1080)
      At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:281)
      At com.github.spotbugs.internal.spotbugs.SpotBugsRunner.run(SpotBugsRunner.java:40)
      At org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:39)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:46)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:30)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:101)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
      At org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
      At org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
      At org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
      At java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      At java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      At org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
      At java.lang.Thread.run(Thread.java:748)
  Exception analyzing top.dteam.earth.backend.user.ManagementController using detector edu.umd.cs.findbugs.detect.FindDeadLocalStores
    java.lang.IndexOutOfBoundsException: bitIndex < 0: -1
      At java.util.BitSet.set(BitSet.java:444)
      At edu.umd.cs.findbugs.ba.ClassContext.linesMentionedMultipleTimes(ClassContext.java:819)
      At edu.umd.cs.findbugs.detect.FindDeadLocalStores.analyzeMethod(FindDeadLocalStores.java:213)
      At edu.umd.cs.findbugs.detect.FindDeadLocalStores.visitClassContext(FindDeadLocalStores.java:194)
      At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
      At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1080)
      At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:281)
      At com.github.spotbugs.internal.spotbugs.SpotBugsRunner.run(SpotBugsRunner.java:40)
      At org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:39)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:46)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:30)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:101)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
      At org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
      At org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
      At org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
      At java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      At java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      At org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
      At java.lang.Thread.run(Thread.java:748)
  Exception analyzing top.dteam.earth.backend.user.ManagementController using detector edu.umd.cs.findbugs.detect.FindBadCast2
    java.lang.IndexOutOfBoundsException: bitIndex < 0: -1
      At java.util.BitSet.set(BitSet.java:444)
      At edu.umd.cs.findbugs.ba.ClassContext.linesMentionedMultipleTimes(ClassContext.java:819)
      At edu.umd.cs.findbugs.detect.FindBadCast2.analyzeMethod(FindBadCast2.java:198)
      At edu.umd.cs.findbugs.detect.FindBadCast2.visitClassContext(FindBadCast2.java:111)
      At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
      At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1080)
      At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:281)
      At com.github.spotbugs.internal.spotbugs.SpotBugsRunner.run(SpotBugsRunner.java:40)
      At org.gradle.workers.internal.DefaultWorkerServer.execute(DefaultWorkerServer.java:39)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:46)
      At org.gradle.workers.internal.WorkerDaemonServer.execute(WorkerDaemonServer.java:30)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.process.internal.worker.request.WorkerAction.run(WorkerAction.java:101)
      At sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      At sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      At sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      At java.lang.reflect.Method.invoke(Method.java:498)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
      At org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:155)
      At org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:137)
      At org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:404)
      At org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
      At org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
      At java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      At java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      At org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
      At java.lang.Thread.run(Thread.java:748)
The following classes needed for analysis were missing:
  void


BUILD SUCCESSFUL in 50s
5 actionable tasks: 3 executed, 2 up-to-date

@archiecobbs
Copy link

archiecobbs commented Jun 10, 2022

The following exception is happening with Maven plugin version 4.7.0.0. It doesn't happen with 4.6.0.0.

Note these are NullPointerException's instead of IndexOutOfBoundsException's. Might be a different bug.

I get a bunch of exceptions that look like this:

     [java] The following errors occurred during analysis:
     [java]   Exception analyzing com.patientexp.pcom.sms.DefaultSMSQueueProcessor$AjcClosure19 using detector edu.umd.cs.findbugs.detect.FindPotentialSecurityCheckBasedOnUntrustedSource
     [java]     java.lang.NullPointerException
     [java]       At edu.umd.cs.findbugs.detect.FindPotentialSecurityCheckBasedOnUntrustedSource.afterOpcode(FindPotentialSecurityCheckBasedOnUntrustedSource.java:378)
     [java]       At edu.umd.cs.findbugs.visitclass.DismantleBytecode.visit(DismantleBytecode.java:880)
     [java]       At edu.umd.cs.findbugs.detect.FindPotentialSecurityCheckBasedOnUntrustedSource.visit(FindPotentialSecurityCheckBasedOnUntrustedSource.java:155)
     [java]       At edu.umd.cs.findbugs.visitclass.BetterVisitor.visitCode(BetterVisitor.java:218)
     [java]       At edu.umd.cs.findbugs.visitclass.PreorderVisitor.visitCode(PreorderVisitor.java:243)
     [java]       At edu.umd.cs.findbugs.bcel.OpcodeStackDetector.visitCode(OpcodeStackDetector.java:65)
     [java]       At org.apache.bcel.classfile.Code.accept(Code.java:131)
     [java]       At edu.umd.cs.findbugs.visitclass.PreorderVisitor.doVisitMethod(PreorderVisitor.java:315)
     [java]       At edu.umd.cs.findbugs.visitclass.PreorderVisitor.visitJavaClass(PreorderVisitor.java:397)
     [java]       At org.apache.bcel.classfile.JavaClass.accept(JavaClass.java:213)
     [java]       At edu.umd.cs.findbugs.BytecodeScanningDetector.visitClassContext(BytecodeScanningDetector.java:38)
     [java]       At edu.umd.cs.findbugs.DetectorToDetector2Adapter.visitClass(DetectorToDetector2Adapter.java:76)
     [java]       At edu.umd.cs.findbugs.FindBugs2.lambda$analyzeApplication$1(FindBugs2.java:1108)
     [java]       At java.util.concurrent.FutureTask.run(FutureTask.java:266)
     [java]       At edu.umd.cs.findbugs.CurrentThreadExecutorService.execute(CurrentThreadExecutorService.java:86)
     [java]       At java.util.concurrent.AbstractExecutorService.invokeAll(AbstractExecutorService.java:238)
     [java]       At edu.umd.cs.findbugs.FindBugs2.analyzeApplication(FindBugs2.java:1118)
     [java]       At edu.umd.cs.findbugs.FindBugs2.execute(FindBugs2.java:309)
     [java]       At edu.umd.cs.findbugs.FindBugs.runMain(FindBugs.java:395)
     [java]       At edu.umd.cs.findbugs.FindBugs2.main(FindBugs2.java:1231)

gtoison added a commit to gtoison/spotbugs that referenced this issue Mar 2, 2024
@gtoison
Copy link
Contributor

gtoison commented Mar 2, 2024

@archiecobbs I think your issue was a duplicate of #2041 and was fixed in 4.7.1 by #2054

@archiecobbs
Copy link

@gtoison thanks for the pointer.

hazendaz pushed a commit that referenced this issue Mar 4, 2024
* test: reproducer for crash in redundant condition assertion

Crash reported in issue #608

* fix: calculate the end position of the assert block by finding ATHROW
@JuditKnoll
Copy link
Collaborator

The issue is recreated and fixed in #2887.

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

No branches or pull requests

9 participants