use of org.sonar.java.se.Flow in project sonar-java by SonarSource.
the class NullDereferenceCheck method reportIssue.
private void reportIssue(SymbolicValue currentVal, Tree syntaxNode, ExplodedGraph.Node node) {
String message = "A \"NullPointerException\" could be thrown; ";
if (syntaxNode.is(Tree.Kind.MEMBER_SELECT) && ((MemberSelectExpressionTree) syntaxNode).expression().is(Tree.Kind.METHOD_INVOCATION)) {
message += "\"" + SyntaxTreeNameFinder.getName(syntaxNode) + "()\" can return null.";
} else {
message += "\"" + SyntaxTreeNameFinder.getName(syntaxNode) + "\" is nullable here.";
}
SymbolicValue val = null;
if (!SymbolicValue.NULL_LITERAL.equals(currentVal)) {
val = currentVal;
}
Symbol dereferencedSymbol = dereferencedSymbol(syntaxNode);
Set<Flow> flows = FlowComputation.flow(node, val, Lists.newArrayList(ObjectConstraint.class), dereferencedSymbol).stream().filter(f -> !f.isEmpty()).map(f -> addDereferenceMessage(f, syntaxNode)).collect(Collectors.toSet());
reportIssue(syntaxNode, message, flows);
}
Aggregations