You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.9 KiB
85 lines
1.9 KiB
5 years ago
|
/*
|
||
|
* Copyright (c) Facebook, Inc. and its affiliates.
|
||
|
*
|
||
|
* This source code is licensed under the MIT license found in the
|
||
|
* LICENSE file in the root directory of this source tree.
|
||
|
*/
|
||
|
|
||
|
package codetoanalyze.java.nullsafe_default;
|
||
|
|
||
|
import javax.annotation.Nullable;
|
||
|
|
||
|
@interface InjectView {}
|
||
|
|
||
|
/** Support assignments of null to @InjectView fields, generated by butterknife. */
|
||
|
public class ButterKnife {
|
||
|
@InjectView String injected;
|
||
|
String normal = ""; // assign to suppress not initialized warning
|
||
|
@Nullable String nullable = ""; // assign to suppress not initialized warning
|
||
|
|
||
|
void f(String nonNullable) {}
|
||
|
|
||
|
// When dereferencing, injected should behave as not nullable
|
||
|
|
||
|
void dereferencingInjectedIsOK() {
|
||
|
int n = injected.length();
|
||
|
}
|
||
|
|
||
|
void dereferencingNormalIsOK() {
|
||
|
int n = normal.length();
|
||
|
}
|
||
|
|
||
|
void dereferencingNullableIsBAD() {
|
||
|
int n = nullable.length();
|
||
|
}
|
||
|
|
||
|
// When returning a value, injected should be treated as non nullable
|
||
|
|
||
|
String convertingToNotNullableForInjectedIsOK() {
|
||
|
return injected;
|
||
|
}
|
||
|
|
||
|
String convertingToNotNullableForNormalIsOK() {
|
||
|
return normal;
|
||
|
}
|
||
|
|
||
|
String convertingToNotNullableForNullableIsBAD() {
|
||
|
return nullable;
|
||
|
}
|
||
|
|
||
|
// When passing to a non nullable param, injected should be treated as non nullable
|
||
|
|
||
|
void passingToNullableForInjectedIsOK() {
|
||
|
f(injected);
|
||
|
}
|
||
|
|
||
|
void passingToNullableForNormalIsOK() {
|
||
|
f(normal);
|
||
|
}
|
||
|
|
||
|
void passingToNullableForNullableIsBAD() {
|
||
|
f(nullable);
|
||
|
}
|
||
|
|
||
|
// Assigning null to Injected should be allowed (as if it was nullable)
|
||
|
// (Those assignments are generated by Butterknife framework.)
|
||
|
|
||
|
void assignNullToInjectedIsOK() {
|
||
|
injected = null;
|
||
|
}
|
||
|
|
||
|
void assignNullToNullableIsOK() {
|
||
|
nullable = null;
|
||
|
}
|
||
|
|
||
|
void assignNullToNormalIsBAD() {
|
||
|
normal = null;
|
||
|
}
|
||
|
|
||
|
class TestNotInitialized {
|
||
|
@InjectView String notInitializedInjectedIsOK;
|
||
|
@Nullable String notInitializedNullableIsOK;
|
||
|
String notInitializedNormalIsBAD;
|
||
|
}
|
||
|
}
|