public static boolean mayLeakFromType(@NotNull DfType type) {
    if (type == DfType.BOTTOM) return false;
    // Complex value from field or method return call may contain back-reference to the object, so
    // local value could leak. Do not drop locality only for some simple values.
    while (true) {
      TypeConstraint constraint = TypeConstraint.fromDfType(type);
      DfType arrayComponentType = constraint.getArrayComponentType();
      if (arrayComponentType == DfType.BOTTOM) {
        return !(type instanceof DfPrimitiveType) && !constraint.isExact(CommonClassNames.JAVA_LANG_STRING) &&
               !constraint.isExact(CommonClassNames.JAVA_LANG_CLASS);
      }
      type = arrayComponentType;
    }
  }
public static boolean mayLeakFromType(@NotNull DfType type)