Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Not annotated parameter overrides @??? parameter

While overriding code:

    @Override
  public void open(ExecutionContext executionContext) {
    super.open(executionContext);

from: org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader

I receive an IntelliJ warning:

Not annotated parameter overrides @??? parameter less... (Strg+F1) Inspection info: Reports problems related to @Nullable and @NotNull annotations usage configured in Constant conditions & exceptions inspection.

What can I do to avoid that?

like image 250
DerBenniAusA Avatar asked Jun 20 '19 11:06

DerBenniAusA


1 Answers

Explanation

Although I can't reproduce this on AbstractItemCountingItemStreamItemReader from this artifact

    implementation group: 'org.springframework.batch', name: 'spring-batch-core', version: '4.1.2.RELEASE'

, this annotation means that the parent method has some @NotNull / @NonNull annotation on the parameter, while the overriding method has no.

To fix it, you need to put the same annotation on the overriding method.

As I wrote, there is no such annotation in the version I've downloaded, but check your sources and copy the parameter annotation from there.

This warning sometimes gets buggy, so it can help to restart the IDEA. Restarting helped when I tried to write a trivial example to reproduce the warning.

A trivial reproducible example

Parent class:

package com.dpopov.java.stackoverflow;

import org.springframework.lang.NonNull;
import org.springframework.lang.Nullable;

public class ParentClass {
    public void nonNullMethod(@NonNull String string) {
        System.out.println("S is: " + string);
    }

    public void nullMethod(@Nullable String string) {
        System.out.println("S is: " + string);
    }
}

Child class:

package com.dpopov.java.stackoverflow;

public class NonNullOverride extends ParentClass {

    public static void main(String[] args) {
        NonNullOverride nonNullOverride = new NonNullOverride();
        nonNullOverride.nonNullMethod(null);
        nonNullOverride.nullMethod(null);
    }

    @Override
    public void nonNullMethod(final String string) {
        super.nonNullMethod(string);

        if (string.equals("666")) {
            System.out.println("yes");
        }
    }

    @Override
    public void nullMethod(final String string) {
        super.nullMethod(string);

        if (string == null) {
            System.out.println("I am null, it can be.");
            return;
        }

        if (string.equals("666")) {
            System.out.println("yes");
        }
    }
}
  • To be 100%-sure, I've added org.springframework.lang.NonNull and org.springframework.lang.Nullable annotations to the appropriate Nullable / NonNull annotations of the inspection Java | Probable bugs | @NotNull/@Nullable problems (in File | Settings | Editor | Inspections). You do this by pressing Configure annotations button (see the screenshot). Cofigure non-null and nullable annotations for IDEA inspections

    • As a result, I've got the warning on child's class #nonNullMethod: Warning on non-annotated non-null child method argument
    • Specially note that non-annotating @Nullable method does not provoke any warning.
    • Warning only worked after IDEA restart.
    • The whole inspection looks to work pretty buggy, if you turn on/off the checkboxes in the inspection settings and try to reproduce them. So, again, restarting/invalidating caches may help to get rid or show the incorrect warning.
like image 87
Dmitriy Popov Avatar answered Nov 17 '22 13:11

Dmitriy Popov