test_class.file: library/src/test/java/com/wdullaer/materialdatetimepicker/time/DefaultTimepointLimiterTest.java
test_class.identifier: DefaultTimepointLimiterTest
test_case.body: @Test
      public void isOutOfRangeWithIndexShouldHandleNull() {
          DefaultTimepointLimiter limiter = new DefaultTimepointLimiter();
  
          Assert.assertFalse(limiter.isOutOfRange(null, HOUR_INDEX, Timepoint.TYPE.SECOND));
      }
test_case.class_method_signature: DefaultTimepointLimiterTest.isOutOfRangeWithIndexShouldHandleNull()
test_case.full_signature: @Test public void isOutOfRangeWithIndexShouldHandleNull()
test_case.identifier: isOutOfRangeWithIndexShouldHandleNull
test_case.invocations: assertFalse isOutOfRange
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void isOutOfRangeWithIndexShouldHandleNull()
focal_class.declarator: mSelectableTimes = new TreeSet<>()
focal_class.modifier: private
focal_class.original_string: private TreeSet<Timepoint> mSelectableTimes = new TreeSet<>();
focal_class.type: TreeSet<Timepoint>
focal_class.var_name: mSelectableTimes
focal_class.declarator: mDisabledTimes = new TreeSet<>()
focal_class.modifier: private
focal_class.original_string: private TreeSet<Timepoint> mDisabledTimes = new TreeSet<>();
focal_class.type: TreeSet<Timepoint>
focal_class.var_name: mDisabledTimes
focal_class.declarator: exclusiveSelectableTimes = new TreeSet<>()
focal_class.modifier: private
focal_class.original_string: private TreeSet<Timepoint> exclusiveSelectableTimes = new TreeSet<>();
focal_class.type: TreeSet<Timepoint>
focal_class.var_name: exclusiveSelectableTimes
focal_class.declarator: mMinTime
focal_class.modifier: private
focal_class.original_string: private Timepoint mMinTime;
focal_class.type: Timepoint
focal_class.var_name: mMinTime
focal_class.declarator: mMaxTime
focal_class.modifier: private
focal_class.original_string: private Timepoint mMaxTime;
focal_class.type: Timepoint
focal_class.var_name: mMaxTime
focal_class.declarator: CREATOR
              = new Parcelable.Creator<DefaultTimepointLimiter>() {
          public DefaultTimepointLimiter createFromParcel(Parcel in) {
              return new DefaultTimepointLimiter(in);
          }
  
          public DefaultTimepointLimiter[] newArray(int size) {
              return new DefaultTimepointLimiter[size];
          }
      }
focal_class.modifier: @SuppressWarnings("WeakerAccess")
      public static final
focal_class.original_string: @SuppressWarnings("WeakerAccess")
      public static final Parcelable.Creator<DefaultTimepointLimiter> CREATOR
              = new Parcelable.Creator<DefaultTimepointLimiter>() {
          public DefaultTimepointLimiter createFromParcel(Parcel in) {
              return new DefaultTimepointLimiter(in);
          }
  
          public DefaultTimepointLimiter[] newArray(int size) {
              return new DefaultTimepointLimiter[size];
          }
      };
focal_class.type: Parcelable.Creator<DefaultTimepointLimiter>
focal_class.var_name: CREATOR
focal_class.file: library/src/main/java/com/wdullaer/materialdatetimepicker/time/DefaultTimepointLimiter.java
focal_class.identifier: DefaultTimepointLimiter
focal_class.interfaces: implements TimepointLimiter
focal_class.class_method_signature: DefaultTimepointLimiter.DefaultTimepointLimiter()
focal_class.full_signature:   DefaultTimepointLimiter()
focal_class.identifier: DefaultTimepointLimiter
focal_class.parameters: ()
focal_class.signature:  DefaultTimepointLimiter()
focal_class.class_method_signature: DefaultTimepointLimiter.DefaultTimepointLimiter(Parcel in)
focal_class.full_signature: @SuppressWarnings("WeakerAccess") public  DefaultTimepointLimiter(Parcel in)
focal_class.identifier: DefaultTimepointLimiter
focal_class.modifiers: @SuppressWarnings("WeakerAccess") public
focal_class.parameters: (Parcel in)
focal_class.signature:  DefaultTimepointLimiter(Parcel in)
focal_class.class_method_signature: DefaultTimepointLimiter.writeToParcel(Parcel out, int flags)
focal_class.full_signature: @Override public void writeToParcel(Parcel out, int flags)
focal_class.identifier: writeToParcel
focal_class.modifiers: @Override public
focal_class.parameters: (Parcel out, int flags)
focal_class.return: void
focal_class.signature: void writeToParcel(Parcel out, int flags)
focal_class.class_method_signature: DefaultTimepointLimiter.describeContents()
focal_class.full_signature: @Override public int describeContents()
focal_class.identifier: describeContents
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: int
focal_class.signature: int describeContents()
focal_class.class_method_signature: DefaultTimepointLimiter.setMinTime(@NonNull Timepoint minTime)
focal_class.full_signature:  void setMinTime(@NonNull Timepoint minTime)
focal_class.identifier: setMinTime
focal_class.parameters: (@NonNull Timepoint minTime)
focal_class.return: void
focal_class.signature: void setMinTime(@NonNull Timepoint minTime)
focal_class.class_method_signature: DefaultTimepointLimiter.setMaxTime(@NonNull Timepoint maxTime)
focal_class.full_signature:  void setMaxTime(@NonNull Timepoint maxTime)
focal_class.identifier: setMaxTime
focal_class.parameters: (@NonNull Timepoint maxTime)
focal_class.return: void
focal_class.signature: void setMaxTime(@NonNull Timepoint maxTime)
focal_class.class_method_signature: DefaultTimepointLimiter.setSelectableTimes(@NonNull Timepoint[] selectableTimes)
focal_class.full_signature:  void setSelectableTimes(@NonNull Timepoint[] selectableTimes)
focal_class.identifier: setSelectableTimes
focal_class.parameters: (@NonNull Timepoint[] selectableTimes)
focal_class.return: void
focal_class.signature: void setSelectableTimes(@NonNull Timepoint[] selectableTimes)
focal_class.class_method_signature: DefaultTimepointLimiter.setDisabledTimes(@NonNull Timepoint[] disabledTimes)
focal_class.full_signature:  void setDisabledTimes(@NonNull Timepoint[] disabledTimes)
focal_class.identifier: setDisabledTimes
focal_class.parameters: (@NonNull Timepoint[] disabledTimes)
focal_class.return: void
focal_class.signature: void setDisabledTimes(@NonNull Timepoint[] disabledTimes)
focal_class.class_method_signature: DefaultTimepointLimiter.getMinTime()
focal_class.full_signature: @Nullable Timepoint getMinTime()
focal_class.identifier: getMinTime
focal_class.modifiers: @Nullable
focal_class.parameters: ()
focal_class.return: Timepoint
focal_class.signature: Timepoint getMinTime()
focal_class.class_method_signature: DefaultTimepointLimiter.getMaxTime()
focal_class.full_signature: @Nullable Timepoint getMaxTime()
focal_class.identifier: getMaxTime
focal_class.modifiers: @Nullable
focal_class.parameters: ()
focal_class.return: Timepoint
focal_class.signature: Timepoint getMaxTime()
focal_class.class_method_signature: DefaultTimepointLimiter.getSelectableTimes()
focal_class.full_signature: @NonNull Timepoint[] getSelectableTimes()
focal_class.identifier: getSelectableTimes
focal_class.modifiers: @NonNull
focal_class.parameters: ()
focal_class.return: Timepoint[]
focal_class.signature: Timepoint[] getSelectableTimes()
focal_class.class_method_signature: DefaultTimepointLimiter.getDisabledTimes()
focal_class.full_signature: @NonNull Timepoint[] getDisabledTimes()
focal_class.identifier: getDisabledTimes
focal_class.modifiers: @NonNull
focal_class.parameters: ()
focal_class.return: Timepoint[]
focal_class.signature: Timepoint[] getDisabledTimes()
focal_class.class_method_signature: DefaultTimepointLimiter.getExclusiveSelectableTimes(@NonNull TreeSet<Timepoint> selectable, @NonNull TreeSet<Timepoint> disabled)
focal_class.full_signature: @NonNull private TreeSet<Timepoint> getExclusiveSelectableTimes(@NonNull TreeSet<Timepoint> selectable, @NonNull TreeSet<Timepoint> disabled)
focal_class.identifier: getExclusiveSelectableTimes
focal_class.modifiers: @NonNull private
focal_class.parameters: (@NonNull TreeSet<Timepoint> selectable, @NonNull TreeSet<Timepoint> disabled)
focal_class.return: TreeSet<Timepoint>
focal_class.signature: TreeSet<Timepoint> getExclusiveSelectableTimes(@NonNull TreeSet<Timepoint> selectable, @NonNull TreeSet<Timepoint> disabled)
focal_class.class_method_signature: DefaultTimepointLimiter.isOutOfRange(@Nullable Timepoint current, int index, @NonNull Timepoint.TYPE resolution)
focal_class.full_signature: @Override public boolean isOutOfRange(@Nullable Timepoint current, int index, @NonNull Timepoint.TYPE resolution)
focal_class.identifier: isOutOfRange
focal_class.modifiers: @Override public
focal_class.parameters: (@Nullable Timepoint current, int index, @NonNull Timepoint.TYPE resolution)
focal_class.return: boolean
focal_class.signature: boolean isOutOfRange(@Nullable Timepoint current, int index, @NonNull Timepoint.TYPE resolution)
focal_class.class_method_signature: DefaultTimepointLimiter.isOutOfRange(@NonNull Timepoint current)
focal_class.full_signature: public boolean isOutOfRange(@NonNull Timepoint current)
focal_class.identifier: isOutOfRange
focal_class.modifiers: public
focal_class.parameters: (@NonNull Timepoint current)
focal_class.return: boolean
focal_class.signature: boolean isOutOfRange(@NonNull Timepoint current)
focal_class.class_method_signature: DefaultTimepointLimiter.isAmDisabled()
focal_class.full_signature: @SuppressWarnings("SimplifiableIfStatement") @Override public boolean isAmDisabled()
focal_class.identifier: isAmDisabled
focal_class.modifiers: @SuppressWarnings("SimplifiableIfStatement") @Override public
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean isAmDisabled()
focal_class.class_method_signature: DefaultTimepointLimiter.isPmDisabled()
focal_class.full_signature: @SuppressWarnings("SimplifiableIfStatement") @Override public boolean isPmDisabled()
focal_class.identifier: isPmDisabled
focal_class.modifiers: @SuppressWarnings("SimplifiableIfStatement") @Override public
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean isPmDisabled()
focal_class.class_method_signature: DefaultTimepointLimiter.roundToNearest(@NonNull Timepoint time,@Nullable Timepoint.TYPE type, @NonNull Timepoint.TYPE resolution)
focal_class.full_signature: @Override public @NonNull Timepoint roundToNearest(@NonNull Timepoint time,@Nullable Timepoint.TYPE type, @NonNull Timepoint.TYPE resolution)
focal_class.identifier: roundToNearest
focal_class.modifiers: @Override public @NonNull
focal_class.parameters: (@NonNull Timepoint time,@Nullable Timepoint.TYPE type, @NonNull Timepoint.TYPE resolution)
focal_class.return: Timepoint
focal_class.signature: Timepoint roundToNearest(@NonNull Timepoint time,@Nullable Timepoint.TYPE type, @NonNull Timepoint.TYPE resolution)
focal_class.class_method_signature: DefaultTimepointLimiter.searchValidTimePoint(@NonNull Timepoint time, @Nullable Timepoint.TYPE type, @NonNull Timepoint.TYPE resolution)
focal_class.full_signature: private Timepoint searchValidTimePoint(@NonNull Timepoint time, @Nullable Timepoint.TYPE type, @NonNull Timepoint.TYPE resolution)
focal_class.identifier: searchValidTimePoint
focal_class.modifiers: private
focal_class.parameters: (@NonNull Timepoint time, @Nullable Timepoint.TYPE type, @NonNull Timepoint.TYPE resolution)
focal_class.return: Timepoint
focal_class.signature: Timepoint searchValidTimePoint(@NonNull Timepoint time, @Nullable Timepoint.TYPE type, @NonNull Timepoint.TYPE resolution)
focal_method.body: @Override
      public boolean isOutOfRange(@Nullable Timepoint current, int index, @NonNull Timepoint.TYPE resolution) {
          if (current == null) return false;
  
          if (index == HOUR_INDEX) {
              if (mMinTime != null && mMinTime.getHour() > current.getHour()) return true;
  
              if (mMaxTime != null && mMaxTime.getHour()+1 <= current.getHour()) return true;
  
              if (!exclusiveSelectableTimes.isEmpty()) {
                  Timepoint ceil = exclusiveSelectableTimes.ceiling(current);
                  Timepoint floor = exclusiveSelectableTimes.floor(current);
                  return !(current.equals(ceil, Timepoint.TYPE.HOUR) || current.equals(floor, Timepoint.TYPE.HOUR));
              }
  
              if (!mDisabledTimes.isEmpty() && resolution == Timepoint.TYPE.HOUR) {
                  Timepoint ceil = mDisabledTimes.ceiling(current);
                  Timepoint floor = mDisabledTimes.floor(current);
                  return current.equals(ceil, Timepoint.TYPE.HOUR) || current.equals(floor, Timepoint.TYPE.HOUR);
              }
  
              return false;
          }
          else if (index == MINUTE_INDEX) {
              if (mMinTime != null) {
                  Timepoint roundedMin = new Timepoint(mMinTime.getHour(), mMinTime.getMinute());
                  if (roundedMin.compareTo(current) > 0) return true;
              }
  
              if (mMaxTime != null) {
                  Timepoint roundedMax = new Timepoint(mMaxTime.getHour(), mMaxTime.getMinute(), 59);
                  if (roundedMax.compareTo(current) < 0) return true;
              }
  
              if (!exclusiveSelectableTimes.isEmpty()) {
                  Timepoint ceil = exclusiveSelectableTimes.ceiling(current);
                  Timepoint floor = exclusiveSelectableTimes.floor(current);
                  return !(current.equals(ceil, Timepoint.TYPE.MINUTE) || current.equals(floor, Timepoint.TYPE.MINUTE));
              }
  
              if (!mDisabledTimes.isEmpty() && resolution == Timepoint.TYPE.MINUTE) {
                  Timepoint ceil = mDisabledTimes.ceiling(current);
                  Timepoint floor = mDisabledTimes.floor(current);
                  boolean ceilExclude = current.equals(ceil, Timepoint.TYPE.MINUTE);
                  boolean floorExclude = current.equals(floor, Timepoint.TYPE.MINUTE);
                  return ceilExclude || floorExclude;
              }
  
              return false;
          }
          else return isOutOfRange(current);
      }
focal_method.class_method_signature: DefaultTimepointLimiter.isOutOfRange(@Nullable Timepoint current, int index, @NonNull Timepoint.TYPE resolution)
focal_method.full_signature: @Override public boolean isOutOfRange(@Nullable Timepoint current, int index, @NonNull Timepoint.TYPE resolution)
focal_method.identifier: isOutOfRange
focal_method.invocations: getHour getHour getHour getHour isEmpty ceiling floor equals equals isEmpty ceiling floor equals equals getHour getMinute compareTo getHour getMinute compareTo isEmpty ceiling floor equals equals isEmpty ceiling floor equals equals isOutOfRange
focal_method.modifiers: @Override public
focal_method.parameters: (@Nullable Timepoint current, int index, @NonNull Timepoint.TYPE resolution)
focal_method.return: boolean
focal_method.signature: boolean isOutOfRange(@Nullable Timepoint current, int index, @NonNull Timepoint.TYPE resolution)