package foo;

import javax.annotation.*;

enum TestNonnull {
  TEST {
    @Nonnull
    @Override
    public Object testWithAnnotation(@Nonnull Object aObject) {
      if (<warning descr="Condition 'aObject == null' is always 'false'">aObject == null</warning>) {
        return new Object();
      }
      return <warning descr="'null' is returned by the method declared as @Nonnull">null</warning>;
    }

    @Override
    public Object testWithoutAnnotation(Object aObject) {
      return <warning descr="'null' is returned by the method declared as @NonnullByDefault">null</warning>;
    }
  };

  public boolean testParameter(TestNonnull aTest) {
    if (<warning descr="Condition 'aTest == null' is always 'false'">aTest == null</warning>) {
      return true;
    }
    return false;
  }

  public Object testReturn() {
    return <warning descr="'null' is returned by the method declared as @NonnullByDefault">null</warning>;
  }

  @Nonnull
  public abstract Object testWithAnnotation(@Nonnull Object aObject);

  public abstract Object testWithoutAnnotation(Object aObject);
}