Program: 171861
Project: 171861
Buggy source:
/** 
 * Init the component. Retrieve all attributes with the default values if needed. Check the values for internal use and create the painters.
 * @param context  the owner context
 * @param attrs    the attribute set
 * @param defStyle the style
 */
private void init(Context context,AttributeSet attrs,int defStyle){
  final TypedArray attrArray=context.obtainStyledAttributes(attrs,R.styleable.ScGauge,defStyle,0);
  this.mBase=(ScCopier)this.addFeature(ScCopier.class);
  this.mBase.setTag(ScGauge.BASE_IDENTIFIER);
  this.mBase.setOnPropertyChangedListener(this);
  this.applyAttributesToBase(attrArray,this.mBase);
  this.mNotches=(ScNotches)this.addFeature(ScNotches.class);
  this.mNotches.setTag(ScGauge.NOTCHES_IDENTIFIER);
  this.mNotches.setOnPropertyChangedListener(this);
  this.applyAttributesToNotches(attrArray,this.mNotches);
  this.mProgress=(ScCopier)this.addFeature(ScCopier.class);
  this.mProgress.setTag(ScGauge.PROGRESS_IDENTIFIER);
  this.mProgress.setOnPropertyChangedListener(this);
  this.applyAttributesToProgress(attrArray,this.mProgress);
  this.mWriter=(ScWriter)this.addFeature(ScWriter.class);
  this.mWriter.setTag(ScGauge.WRITER_IDENTIFIER);
  this.mWriter.setOnPropertyChangedListener(this);
  this.applyAttributesToWriter(attrArray,this.mWriter);
  this.mHighPointer=(ScPointer)this.addFeature(ScPointer.class);
  this.mHighPointer.setTag(ScGauge.HIGH_POINTER_IDENTIFIER);
  this.mHighPointer.setOnPropertyChangedListener(this);
  this.applyAttributesToPointer(attrArray,this.mHighPointer);
  this.mLowPointer=(ScPointer)this.addFeature(ScPointer.class);
  this.mLowPointer.setTag(ScGauge.LOW_POINTER_IDENTIFIER);
  this.mLowPointer.setVisible(false);
  this.mLowPointer.setOnPropertyChangedListener(this);
  this.mHighValue=attrArray.getFloat(R.styleable.ScGauge_sccValue,0.0f);
  this.mLowValue=attrArray.getFloat(R.styleable.ScGauge_sccLowValue,0.0f);
  if (this.mHighValue == 0.0f)   this.mHighValue=attrArray.getFloat(R.styleable.ScGauge_sccHighValue,0.0f);
  this.mSnapToNotches=attrArray.getBoolean(R.styleable.ScGauge_sccSnapToNotches,false);
  this.mPointerSelectMode=PointerSelectMode.values()[attrArray.getInt(R.styleable.ScGauge_sccPointerSelectMode,PointerSelectMode.NEAREST.ordinal())];
  this.mDuration=attrArray.getInt(R.styleable.ScGauge_sccDuration,0);
  attrArray.recycle();
  this.mHighValueAnimator=new ValueAnimator();
  this.mHighValueAnimator.setDuration(this.mDuration);
  this.mHighValueAnimator.setInterpolator(new DecelerateInterpolator());
  this.mHighValueAnimator.addUpdateListener(this.proxyAnimatorUpdateListener);
  this.mLowValueAnimator=new ValueAnimator();
  this.mLowValueAnimator.setDuration(this.mDuration);
  this.mLowValueAnimator.setInterpolator(new DecelerateInterpolator());
  this.mLowValueAnimator.addUpdateListener(this.proxyAnimatorUpdateListener);
  this.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
  if (this.mSnapToNotches && this.mNotches != null) {
    this.mHighValue=this.mNotches.snapToRepetitions(this.mHighValue);
    this.mLowValue=this.mNotches.snapToRepetitions(this.mLowValue);
  }
  this.mHighValueAnimated=this.mHighValue;
  this.mLowValueAnimated=this.mLowValue;
  this.fixTouchOnPathThreshold();
}

Fixed version (ground truth):
/** 
 * Init the component. Retrieve all attributes with the default values if needed. Check the values for internal use and create the painters.
 * @param context  the owner context
 * @param attrs    the attribute set
 * @param defStyle the style
 */
private void init(Context context,AttributeSet attrs,int defStyle){
  final TypedArray attrArray=context.obtainStyledAttributes(attrs,R.styleable.ScGauge,defStyle,0);
  this.mBase=(ScCopier)this.addFeature(ScCopier.class);
  this.mBase.setTag(ScGauge.BASE_IDENTIFIER);
  this.mBase.setOnPropertyChangedListener(this);
  this.applyAttributesToBase(attrArray,this.mBase);
  this.mNotches=(ScNotches)this.addFeature(ScNotches.class);
  this.mNotches.setTag(ScGauge.NOTCHES_IDENTIFIER);
  this.mNotches.setOnPropertyChangedListener(this);
  this.applyAttributesToNotches(attrArray,this.mNotches);
  this.mProgress=(ScCopier)this.addFeature(ScCopier.class);
  this.mProgress.setTag(ScGauge.PROGRESS_IDENTIFIER);
  this.mProgress.setOnPropertyChangedListener(this);
  this.applyAttributesToProgress(attrArray,this.mProgress);
  this.mWriter=(ScWriter)this.addFeature(ScWriter.class);
  this.mWriter.setTag(ScGauge.WRITER_IDENTIFIER);
  this.mWriter.setOnPropertyChangedListener(this);
  this.applyAttributesToWriter(attrArray,this.mWriter);
  this.mHighPointer=(ScPointer)this.addFeature(ScPointer.class);
  this.mHighPointer.setTag(ScGauge.HIGH_POINTER_IDENTIFIER);
  this.mHighPointer.setOnPropertyChangedListener(this);
  this.mHighPointer.setVisible(false);
  this.applyAttributesToPointer(attrArray,this.mHighPointer);
  this.mLowPointer=(ScPointer)this.addFeature(ScPointer.class);
  this.mLowPointer.setTag(ScGauge.LOW_POINTER_IDENTIFIER);
  this.mLowPointer.setVisible(false);
  this.mLowPointer.setOnPropertyChangedListener(this);
  this.mHighValue=attrArray.getFloat(R.styleable.ScGauge_sccValue,0.0f);
  this.mLowValue=attrArray.getFloat(R.styleable.ScGauge_sccLowValue,0.0f);
  if (this.mHighValue == 0.0f)   this.mHighValue=attrArray.getFloat(R.styleable.ScGauge_sccHighValue,0.0f);
  this.mSnapToNotches=attrArray.getBoolean(R.styleable.ScGauge_sccSnapToNotches,false);
  this.mPointerSelectMode=PointerSelectMode.values()[attrArray.getInt(R.styleable.ScGauge_sccPointerSelectMode,PointerSelectMode.NEAREST.ordinal())];
  this.mDuration=attrArray.getInt(R.styleable.ScGauge_sccDuration,0);
  attrArray.recycle();
  this.mHighValueAnimator=new ValueAnimator();
  this.mHighValueAnimator.setDuration(this.mDuration);
  this.mHighValueAnimator.setInterpolator(new DecelerateInterpolator());
  this.mHighValueAnimator.addUpdateListener(this.proxyAnimatorUpdateListener);
  this.mLowValueAnimator=new ValueAnimator();
  this.mLowValueAnimator.setDuration(this.mDuration);
  this.mLowValueAnimator.setInterpolator(new DecelerateInterpolator());
  this.mLowValueAnimator.addUpdateListener(this.proxyAnimatorUpdateListener);
  this.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
  if (this.mSnapToNotches && this.mNotches != null) {
    this.mHighValue=this.mNotches.snapToRepetitions(this.mHighValue);
    this.mLowValue=this.mNotches.snapToRepetitions(this.mLowValue);
  }
  this.mHighValueAnimated=this.mHighValue;
  this.mLowValueAnimated=this.mLowValue;
  this.fixTouchOnPathThreshold();
}