private View createCustomViewInternal(View parent,View view,String name,Context viewContext,AttributeSet attrs) throws Exception {
  if (view == null && name.indexOf('.') > -1) {
    if (mConstructorArgs == null)     mConstructorArgs=ReflectionUtils.getField(LayoutInflater.class,"mConstructorArgs");
    final Object[] mConstructorArgsArr=(Object[])ReflectionUtils.getValue(mConstructorArgs,this);
    final Object lastContext=mConstructorArgsArr[0];
    mConstructorArgsArr[0]=viewContext;
    ReflectionUtils.setValue(mConstructorArgs,this,mConstructorArgsArr);
    try {
      view=createView(name,null,attrs);
    }
 catch (    ClassNotFoundException ignored) {
    }
 finally {
      mConstructorArgsArr[0]=lastContext;
      ReflectionUtils.setValue(mConstructorArgs,this,mConstructorArgsArr);
    }
  }
  return view;
}

private View createCustomViewInternal ( View parent , View view , String name , Context viewContext , AttributeSet attrs ) throws Exception { if ( view == null && name . indexOf ( '.' ) > - 1 ) { if ( mConstructorArgs == null ) mConstructorArgs = ReflectionUtils . getField ( LayoutInflater . class , "mConstructorArgs" ) ; final Object [ ] mConstructorArgsArr = ( Object [ ] ) ReflectionUtils . getValue ( mConstructorArgs , this ) ; final Object lastContext = mConstructorArgsArr [ 0 ] ; mConstructorArgsArr [ 0 ] = viewContext ; ReflectionUtils . setValue ( mConstructorArgs , this , mConstructorArgsArr ) ; try { view = createView ( name , null , attrs ) ; } catch ( ClassNotFoundException ignored ) { } finally { mConstructorArgsArr [ 0 ] = lastContext ; ReflectionUtils . setValue ( mConstructorArgs , this , mConstructorArgsArr ) ; } } return view ; }
nasty method to inflate custom layouts that haven ' t been handled else where . if this fails it will fall back through to the phonelayoutinflater method of inflating custom views where calligraphy will not have a hook into .
