Skip to content

Commit

Permalink
Model Class.isInstance (#732)
Browse files Browse the repository at this point in the history
also call `getOptLibraryModels` only once
  • Loading branch information
XN137 committed Feb 6, 2023
1 parent de74310 commit de6e014
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -229,14 +229,13 @@ private void setConditionalArgumentNullness(
Symbol.MethodSymbol callee,
VisitorState state,
AccessPath.AccessPathContext apContext) {
Set<Integer> nullImpliesTrueParameters =
getOptLibraryModels(state.context).nullImpliesTrueParameters(callee);
Set<Integer> nullImpliesFalseParameters =
getOptLibraryModels(state.context).nullImpliesFalseParameters(callee);
OptimizedLibraryModels optLibraryModels = getOptLibraryModels(state.context);
Set<Integer> nullImpliesTrueParameters = optLibraryModels.nullImpliesTrueParameters(callee);
for (AccessPath accessPath :
accessPathsAtIndexes(nullImpliesTrueParameters, arguments, state, apContext)) {
elseUpdates.set(accessPath, NONNULL);
}
Set<Integer> nullImpliesFalseParameters = optLibraryModels.nullImpliesFalseParameters(callee);
for (AccessPath accessPath :
accessPathsAtIndexes(nullImpliesFalseParameters, arguments, state, apContext)) {
thenUpdates.set(accessPath, NONNULL);
Expand Down Expand Up @@ -580,6 +579,7 @@ private static class DefaultLibraryModels implements LibraryModels {

private static final ImmutableSetMultimap<MethodRef, Integer> NULL_IMPLIES_FALSE_PARAMETERS =
new ImmutableSetMultimap.Builder<MethodRef, Integer>()
.put(methodRef("java.lang.Class", "isInstance(java.lang.Object)"), 0)
.put(methodRef("java.util.Objects", "nonNull(java.lang.Object)"), 0)
.put(
methodRef("org.springframework.util.StringUtils", "hasLength(java.lang.String)"), 0)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,27 @@ public void defaultLibraryModelsObjectNonNull() {
.doTest();
}

@Test
public void defaultLibraryModelsClassIsInstance() {
defaultCompilationHelper
.addSourceLines(
"Test.java",
"package com.uber;",
"import java.util.Objects;",
"import javax.annotation.Nullable;",
"public class Test {",
" int classIsInstance(@Nullable String s) {",
" if (CharSequence.class.isInstance(s)) {",
" return s.hashCode();",
" } else {",
" // BUG: Diagnostic contains: dereferenced",
" return s.hashCode();",
" }",
" }",
"}")
.doTest();
}

@Test
public void checkForNullSupport() {
defaultCompilationHelper
Expand Down

0 comments on commit de6e014

Please sign in to comment.