Skip to content

Commit

Permalink
Fixed a critical bug.
Browse files Browse the repository at this point in the history
  • Loading branch information
nimakarimipour committed Jan 27, 2022
1 parent 99061e7 commit e86e2a3
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ public MethodParameterLocation(Symbol target) {
this.variableSymbol = (Symbol.VarSymbol) target;
Symbol cursor = target;
// Look for the enclosing method.
while (cursor != null && cursor.getKind() != ElementKind.METHOD) {
while (cursor != null
&& (cursor.getKind() != ElementKind.CONSTRUCTOR
&& cursor.getKind() != ElementKind.METHOD)) {
cursor = cursor.owner;
}
Preconditions.checkNotNull(cursor);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public void cleanup() {
}

@Test
public void add_nullable_returnType_simple() {
public void add_nullable_return_simple() {
serializationTestHelper
.setArgs(
Arrays.asList(
Expand Down Expand Up @@ -103,7 +103,7 @@ public void add_nullable_returnType_simple() {
}

@Test
public void add_nullable_returnType_superClass() {
public void add_nullable_return_superClass() {
serializationTestHelper
.setArgs(
Arrays.asList(
Expand Down Expand Up @@ -148,7 +148,42 @@ public void add_nullable_returnType_superClass() {
}

@Test
public void add_nullable_paramType_subclass() {
public void add_nullable_param_simple() {
serializationTestHelper
.setArgs(
Arrays.asList(
"-d",
temporaryFolder.getRoot().getAbsolutePath(),
"-XepOpt:NullAway:AnnotatedPackages=com.uber",
"-XepOpt:NullAway:SerializeFixMetadata=true",
"-XepOpt:NullAway:FixSerializationConfigPath=" + configPath))
.addSourceLines(
"com/uber/android/Super.java",
"package com.uber;",
"import javax.annotation.Nullable;",
"import javax.annotation.Nonnull;",
"public class Super {",
" Object test(int i, Object h) {",
" return h;",
" }",
" Object test_param(@Nullable String o) {",
" // BUG: Diagnostic contains: passing @Nullable",
" return test(0, o);",
" }",
"}")
.setExpectedFixes(
new FixDisplay(
"javax.annotation.Nullable",
"test(int,java.lang.Object)",
"h",
"PARAMETER",
"com.uber.Super",
"com/uber/android/Super.java"))
.doTest();
}

@Test
public void add_nullable_param_subclass() {
serializationTestHelper
.setArgs(
Arrays.asList(
Expand Down Expand Up @@ -193,7 +228,7 @@ public void add_nullable_paramType_subclass() {
}

@Test
public void add_nullable_pass_param_simple() {
public void add_nullable_param_this_constructor() {
serializationTestHelper
.setArgs(
Arrays.asList(
Expand All @@ -203,27 +238,69 @@ public void add_nullable_pass_param_simple() {
"-XepOpt:NullAway:SerializeFixMetadata=true",
"-XepOpt:NullAway:FixSerializationConfigPath=" + configPath))
.addSourceLines(
"com/uber/android/Super.java",
"com/uber/test/Test.java",
"package com.uber;",
"import javax.annotation.Nullable;",
"import javax.annotation.Nonnull;",
"public class Super {",
" Object test(int i, Object h) {",
" return h;",
"public class Test {",
" Test () {",
" // BUG: Diagnostic contains: passing @Nullable parameter 'null'",
" this(null);",
" }",
" Object test_param(@Nullable String o) {",
" Test (Object o) {",
" System.out.println(o.toString());",
" }",
"",
"}")
.setExpectedFixes(
new FixDisplay(
"javax.annotation.Nullable",
"Test(java.lang.Object)",
"o",
"PARAMETER",
"com.uber.Test",
"com/uber/test/Test.java"))
.doTest();
}

@Test
public void add_nullable_param_generics() {
serializationTestHelper
.setArgs(
Arrays.asList(
"-d",
temporaryFolder.getRoot().getAbsolutePath(),
"-XepOpt:NullAway:AnnotatedPackages=com.uber",
"-XepOpt:NullAway:SerializeFixMetadata=true",
"-XepOpt:NullAway:FixSerializationConfigPath=" + configPath))
.addSourceLines(
"com/uber/Super.java",
"package com.uber;",
"import java.util.ArrayList;",
"class Super<T extends Object> {",
" public boolean newStatement(",
" T lhs, ArrayList<T> operator, boolean toWorkList, boolean eager) {",
" return false;",
" }",
"}")
.addSourceLines(
"com/uber/Child.java",
"package com.uber;",
"import java.util.ArrayList;",
"public class Child extends Super<String>{",
" public void newSideEffect(ArrayList<String> op) {",
" // BUG: Diagnostic contains: passing @Nullable",
" return test(0, o);",
" newStatement(null, op, true, true);",
" }",
"}")
.setExpectedFixes(
new FixDisplay(
"javax.annotation.Nullable",
"test(int,java.lang.Object)",
"h",
"newStatement(T,java.util.ArrayList<T>,boolean,boolean)",
"lhs",
"PARAMETER",
"com.uber.Super",
"com/uber/android/Super.java"))
"com/uber/Super.java"))
.doTest();
}

Expand Down Expand Up @@ -397,47 +474,6 @@ public void add_nullable_no_initialization_field() {
.doTest();
}

@Test
public void add_nullable_pass_param_generics() {
serializationTestHelper
.setArgs(
Arrays.asList(
"-d",
temporaryFolder.getRoot().getAbsolutePath(),
"-XepOpt:NullAway:AnnotatedPackages=com.uber",
"-XepOpt:NullAway:SerializeFixMetadata=true",
"-XepOpt:NullAway:FixSerializationConfigPath=" + configPath))
.addSourceLines(
"com/uber/Super.java",
"package com.uber;",
"import java.util.ArrayList;",
"class Super<T extends Object> {",
" public boolean newStatement(",
" T lhs, ArrayList<T> operator, boolean toWorkList, boolean eager) {",
" return false;",
" }",
"}")
.addSourceLines(
"com/uber/Child.java",
"package com.uber;",
"import java.util.ArrayList;",
"public class Child extends Super<String>{",
" public void newSideEffect(ArrayList<String> op) {",
" // BUG: Diagnostic contains: passing @Nullable",
" newStatement(null, op, true, true);",
" }",
"}")
.setExpectedFixes(
new FixDisplay(
"javax.annotation.Nullable",
"newStatement(T,java.util.ArrayList<T>,boolean,boolean)",
"lhs",
"PARAMETER",
"com.uber.Super",
"com/uber/Super.java"))
.doTest();
}

@Test
public void skip_pass_nullable_param_explicit_nonnull() {
serializationTestHelper
Expand Down

0 comments on commit e86e2a3

Please sign in to comment.