Program: 186713
Project: 186713
Buggy source:
/** 
 * Check for some preliminary requirements (method unsupported, abstract method, excluded packages, recursion, .. )
 * @param invokers a callstring leading to the invokee. The first entry in the callstring must be the method intowhich the other methods are recursively inlined, the last entry in the list must be invokesite of the invokee. This is needed to check to avoid endless inlining of recursive methods.
 * @param invokeSite the actual invokesite to inline.
 * @param invokee the devirtualized invokee.
 * @return true if the basic requirements for inlining are fulfilled.
 */
private boolean checkPreliminaries(CallString invokers,InvokeSite invokeSite,MethodInfo invokee){
  MethodInfo invoker=invokeSite.getInvoker();
  if (invokee.isSynchronized() || invokee.isAbstract() || invokee.isNative()) {
    return false;
  }
  if (AppInfo.getSingleton().isNative(invokee.getClassInfo().getClassName())) {
    return false;
  }
  if (invokers.contains(invokee)) {
    return false;
  }
  if (maxRecursiveInlining > 0 && invokers.length() > maxRecursiveInlining) {
    return false;
  }
  if (maxInlineSize > 0 && invokee.getCode().getNumberOfBytes() > maxInlineSize) {
    return false;
  }
  if (inlineConfig.doExcludeMethod(invoker)) {
    return false;
  }
  if (inlineConfig.doExcludeMethod(invokee)) {
    return false;
  }
  if (!inlineConfig.doInlineLibraries() && (AppInfo.getSingleton().isLibrary(invokee.getClassName()) || AppInfo.getSingleton().isLibrary(invoker.getClassName()))) {
    return false;
  }
  return invoker.canAccess(invokee);
}

Fixed version (ground truth):
/** 
 * Check for some preliminary requirements (method unsupported, abstract method, excluded packages, recursion, .. )
 * @param invokers a callstring leading to the invokee. The first entry in the callstring must be the method intowhich the other methods are recursively inlined, the last entry in the list must be invokesite of the invokee. This is needed to check to avoid endless inlining of recursive methods.
 * @param invokeSite the actual invokesite to inline.
 * @param invokee the devirtualized invokee.
 * @return true if the basic requirements for inlining are fulfilled.
 */
private boolean checkPreliminaries(CallString invokers,InvokeSite invokeSite,MethodInfo invokee){
  MethodInfo invoker=invokeSite.getInvoker();
  if (invokee.isSynchronized() || invokee.isAbstract() || invokee.isNative()) {
    return false;
  }
  if (AppInfo.getSingleton().isNative(invokee.getClassInfo().getClassName())) {
    return false;
  }
  if (invokers.contains(invokee)) {
    return false;
  }
  if (maxRecursiveInlining > 0 && invokers.length() > maxRecursiveInlining) {
    return false;
  }
  if (maxInlineSize > 0 && invokee.getCode().getNumberOfBytes() > maxInlineSize) {
    return false;
  }
  if (inlineConfig.doExcludeMethod(invoker)) {
    return false;
  }
  if (inlineConfig.doExcludeMethod(invokee)) {
    return false;
  }
  if (jcopter.useWCA()) {
    for (    MethodInfo method : jcopter.getJConfig().getWCATargets()) {
      if (method.equals(invokee)) {
        return false;
      }
    }
  }
  if (!inlineConfig.doInlineLibraries() && (AppInfo.getSingleton().isLibrary(invokee.getClassName()) || AppInfo.getSingleton().isLibrary(invoker.getClassName()))) {
    return false;
  }
  return invoker.canAccess(invokee);
}