[Demonstration 1]

[Buggy Method]
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.demo_activity);
    listView = (ListView) findViewById(R.id.listView);
    recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
    Button showListViewBtn = (Button) findViewById(R.id.showListView_button);
    showListViewBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            getSupportActionBar().setTitle("ListView的效果");
            listView.setVisibility(View.VISIBLE);
            recyclerView.setVisibility(View.INVISIBLE);
            if (listView.getAdapter() == null) {
                addDataToListView(DataManager.loadData(getBaseContext()));
            } else {
                ((CommonAdapter) listView.getAdapter()).updateData(DataManager.loadData(getBaseContext()));
            }
        }
    });
    Button showRecyclerViewBtn = (Button) findViewById(R.id.showRecyclerView_button);
    showRecyclerViewBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            getSupportActionBar().setTitle("RecyclerView的效果");
            recyclerView.setVisibility(View.VISIBLE);
            listView.setVisibility(View.INVISIBLE);
            if (recyclerView.getAdapter() == null) {
                addDataToRecyclerView(DataManager.loadData(getBaseContext()));
            } else {
                if (recyclerView.getAdapter() instanceof CommonRcvAdapter) {
                    ((CommonRcvAdapter<BaseModel>) recyclerView.getAdapter()).updateData(DataManager.loadData(getBaseContext()));
                }
            }
        }
    });
}

[Buggy Hunk]
((CommonAdapter) listView.getAdapter()).updateData(DataManager.loadData(getBaseContext()));

[Patch]
((CommonLvAdapter) listView.getAdapter()).updateData(DataManager.loadData(getBaseContext()));

[Demonstration 2]

[Buggy Method]
@Around("logAnnotatedMethod(log)")
public Object aroundInvoke(ProceedingJoinPoint pjp, Log log) throws Throwable {
    Logger logger = LoggerFactory.getLogger(pjp.getTarget().getClass());
    String traceLog = traceBuilder.build(pjp);
    Object result;
    try {
        result = pjp.proceed();
        log(logger, log.level(), traceLog, result);
        return result;
    } catch (Exception e) {
        logger.error("{} -> threw {}", traceLog, e);
        throw e;
    }
}

[Buggy Hunk]
logger.error("{} -> threw {}", traceLog, e);

[Patch]
logger.error("{} -> threw {}", traceLog, e.getClass().getName());

[Demonstration 3]

[Buggy Method]
public static FingerprintManager getFpManager() {
    if (FpManager == null) {
        try {
            Method getService = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);
            FpManager = new FingerprintManager(IFingerprintManager.Stub.asInterface((IBinder) getService.invoke(new Object(), "gxFpService")));
        } catch (ClassNotFoundException ex) {
            Log.v("fpservice", "ClassNotFoundException");
        } catch (NoSuchMethodException ex) {
            Log.v("fpservice", "NoSuchMethodException");
        } catch (IllegalAccessException ex) {
            Log.v("fpservice", "IllegalAccessException");
        } catch (InvocationTargetException ex) {
            Log.v("fpservice", "InvocationTargetException");
        }
    }
    return FpManager;
}

[Buggy Hunk]
Method getService = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);

[Patch]
getService = Class.forName("android.os.ServiceManager").getMethod("getService", String.class);