/* * Copyright 2011 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.errorprone.bugpatterns.testdata; import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.base.Preconditions; public class PreconditionsCheckNotNullPrimitivePositiveCases { private Tester field = new Tester(); public void test() { Object a = new Object(); Object b = new Object(); byte byte1 = 0; short short1 = 0; int int1 = 0, int2 = 0; long long1 = 0; float float1 = 0; double double1 = 0; boolean boolean1 = false, boolean2 = false; char char1 = 0; Tester tester = new Tester(); // Do we detect all primitive types? // BUG: Diagnostic contains: remove this line Preconditions.checkNotNull(byte1); // BUG: Diagnostic contains: remove this line Preconditions.checkNotNull(short1); // BUG: Diagnostic contains: remove this line Preconditions.checkNotNull(int1); // BUG: Diagnostic contains: remove this line Preconditions.checkNotNull(long1); // BUG: Diagnostic contains: remove this line Preconditions.checkNotNull(float1); // BUG: Diagnostic contains: remove this line Preconditions.checkNotNull(double1); // BUG: Diagnostic contains: remove this line Preconditions.checkNotNull(boolean1); // BUG: Diagnostic contains: remove this line Preconditions.checkNotNull(char1); // Do we give the right suggested fix? // BUG: Diagnostic contains: boolean1 = boolean2; boolean1 = Preconditions.checkNotNull(boolean2); // BUG: Diagnostic contains: boolean1 = int1 == int2; boolean1 = Preconditions.checkNotNull(int1 == int2); // BUG: Diagnostic contains: checkState(tester.hasId()) Preconditions.checkNotNull(tester.hasId()); // BUG: Diagnostic contains: checkState(tester.hasId(), "Must have ID!") Preconditions.checkNotNull(tester.hasId(), "Must have ID!"); // BUG: Diagnostic contains: checkState(tester.hasId(), "Must have %s!", "ID") Preconditions.checkNotNull(tester.hasId(), "Must have %s!", "ID"); // Do we handle arguments that evaluate to a primitive type? // BUG: Diagnostic contains: Preconditions.checkNotNull(a) Preconditions.checkNotNull(a != null); // BUG: Diagnostic contains: Preconditions.checkNotNull(a) Preconditions.checkNotNull(a == null); // BUG: Diagnostic contains: Preconditions.checkState(int1 == int2) Preconditions.checkNotNull(int1 == int2); // BUG: Diagnostic contains: Preconditions.checkState(int1 > int2) Preconditions.checkNotNull(int1 > int2); // BUG: Diagnostic contains: remove this line Preconditions.checkNotNull(boolean1 ? int1 : int2); // Do we handle static imports? // BUG: Diagnostic contains: remove this line checkNotNull(byte1); // BUG: Diagnostic contains: 'checkState(tester.hasId()) checkNotNull(tester.hasId()); } public void test2(Tester arg) { Tester local = new Tester(); // Do we correctly distinguish checkArgument from checkState? // BUG: Diagnostic contains: checkArgument(arg.hasId()) checkNotNull(arg.hasId()); // BUG: Diagnostic contains: checkState(field.hasId()) checkNotNull(field.hasId()); // BUG: Diagnostic contains: checkState(local.hasId()) checkNotNull(local.hasId()); // BUG: Diagnostic contains: checkState(!local.hasId()) checkNotNull(!local.hasId()); // BUG: Diagnostic contains: checkArgument(!(arg instanceof Tester)) checkNotNull(!(arg instanceof Tester)); // BUG: Diagnostic contains: checkState(getTrue()) checkNotNull(getTrue()); // BUG: Diagnostic contains: remove this line checkNotNull(arg.getId()); // BUG: Diagnostic contains: id = arg.getId() int id = checkNotNull(arg.getId()); // BUG: Diagnostic contains: boolean b = arg.hasId(); boolean b = checkNotNull(arg.hasId()); // Do we handle long chains of method calls? // BUG: Diagnostic contains: checkArgument(arg.getTester().getTester().hasId()) checkNotNull(arg.getTester().getTester().hasId()); // BUG: Diagnostic contains: checkArgument(arg.tester.getTester().hasId()) checkNotNull(arg.tester.getTester().hasId()); } private boolean getTrue() { return true; } private static class Tester { public Tester tester; public boolean hasId() { return true; } public int getId() { return 10; } public Tester getTester() { return tester; } } }