public NullnessStore getNullnessInfoBeforeNewContext()

in nullaway/src/main/java/com/uber/nullaway/dataflow/AccessPathNullnessAnalysis.java [220:248]


  public NullnessStore getNullnessInfoBeforeNewContext(
      TreePath path, VisitorState state, Handler handler) {
    NullnessStore store = dataFlow.resultBefore(path, state.context, nullnessPropagation);
    if (store == null) {
      return NullnessStore.empty();
    }
    return store.filterAccessPaths(
        (ap) -> {
          boolean allAPNonRootElementsAreFinalFields = true;
          for (AccessPathElement ape : ap.getElements()) {
            Element e = ape.getJavaElement();
            if (!e.getKind().equals(ElementKind.FIELD)
                || !e.getModifiers().contains(Modifier.FINAL)) {
              allAPNonRootElementsAreFinalFields = false;
              break;
            }
          }
          if (allAPNonRootElementsAreFinalFields) {
            Element e = ap.getRoot();
            return e == null // This is the case for: this(.f)* where each f is a final field.
                || e.getKind().equals(ElementKind.PARAMETER)
                || e.getKind().equals(ElementKind.LOCAL_VARIABLE)
                || (e.getKind().equals(ElementKind.FIELD)
                    && e.getModifiers().contains(Modifier.FINAL));
          }

          return handler.includeApInfoInSavedContext(ap, state);
        });
  }