Program: 9204
Project: 9204
Buggy source:
public void resolveBindings(IScope scope,Bindings bindings){
  if (onTypeSymbolic != null) {
    onType=onTypeSymbolic.resolveExactType(scope,bindings);
    if (ResolvedType.isMissing(onType))     return;
  }
  ResolvedType searchType;
  if (onType != null) {
    searchType=scope.getWorld().resolve(onType);
  }
 else {
    searchType=scope.getEnclosingType();
  }
  if (searchType.isTypeVariableReference()) {
    searchType=((TypeVariableReference)searchType).getTypeVariable().getUpperBound().resolve(scope.getWorld());
  }
  arguments.resolveBindings(scope,bindings,true,true);
  ResolvedPointcutDefinition pointcutDef=searchType.findPointcut(name);
  if (pointcutDef == null && onType == null) {
    while (true) {
      UnresolvedType declaringType=searchType.getDeclaringType();
      if (declaringType == null)       break;
      searchType=declaringType.resolve(scope.getWorld());
      pointcutDef=searchType.findPointcut(name);
      if (pointcutDef != null) {
        onType=searchType;
        break;
      }
    }
  }
  if (pointcutDef == null) {
    scope.message(IMessage.ERROR,this,"String_Node_Str" + name);
    return;
  }
  if (!pointcutDef.isVisible(scope.getEnclosingType())) {
    scope.message(IMessage.ERROR,this,"String_Node_Str" + pointcutDef + "String_Node_Str");
    return;
  }
  if (Modifier.isAbstract(pointcutDef.getModifiers())) {
    if (onType != null && !onType.isTypeVariableReference()) {
      scope.message(IMessage.ERROR,this,"String_Node_Str");
      return;
    }
 else     if (!searchType.isAbstract()) {
      scope.message(IMessage.ERROR,this,"String_Node_Str");
      return;
    }
  }
  ResolvedType[] parameterTypes=scope.getWorld().resolve(pointcutDef.getParameterTypes());
  if (parameterTypes.length != arguments.size()) {
    scope.message(IMessage.ERROR,this,"String_Node_Str" + parameterTypes.length + "String_Node_Str"+ arguments.size());
    return;
  }
  if (onType != null) {
    if (onType.isParameterizedType()) {
      typeVariableMap=new HashMap();
      ResolvedType underlyingGenericType=((ResolvedType)onType).getGenericType();
      TypeVariable[] tVars=underlyingGenericType.getTypeVariables();
      ResolvedType[] typeParams=((ResolvedType)onType).getResolvedTypeParameters();
      for (int i=0; i < tVars.length; i++) {
        typeVariableMap.put(tVars[i].getName(),typeParams[i]);
      }
    }
 else     if (onType.isGenericType()) {
      scope.message(MessageUtil.error(WeaverMessages.format(WeaverMessages.CANT_REFERENCE_POINTCUT_IN_RAW_TYPE),getSourceLocation()));
    }
  }
  for (int i=0, len=arguments.size(); i < len; i++) {
    TypePattern p=arguments.get(i);
    if (typeVariableMap != null) {
      p=p.parameterizeWith(typeVariableMap,scope.getWorld());
    }
    if (p == TypePattern.NO) {
      scope.message(IMessage.ERROR,this,"String_Node_Str");
      return;
    }
    boolean reportProblem=false;
    if (parameterTypes[i].isTypeVariableReference() && p.getExactType().isTypeVariableReference()) {
      UnresolvedType One=((TypeVariableReference)parameterTypes[i]).getTypeVariable().getFirstBound();
      UnresolvedType Two=((TypeVariableReference)p.getExactType()).getTypeVariable().getFirstBound();
      reportProblem=!One.resolve(scope.getWorld()).isAssignableFrom(Two.resolve(scope.getWorld()));
    }
 else {
      reportProblem=!p.matchesSubtypes(parameterTypes[i]) && !p.getExactType().equals(UnresolvedType.OBJECT);
    }
    if (reportProblem) {
      scope.message(IMessage.ERROR,p,"String_Node_Str" + parameterTypes[i].getName() + "String_Node_Str"+ p+ "String_Node_Str");
      return;
    }
  }
}

Fixed version (ground truth):
public void resolveBindings(IScope scope,Bindings bindings){
  if (onTypeSymbolic != null) {
    onType=onTypeSymbolic.resolveExactType(scope,bindings);
    if (ResolvedType.isMissing(onType))     return;
  }
  ResolvedType searchType;
  if (onType != null) {
    searchType=scope.getWorld().resolve(onType);
  }
 else {
    searchType=scope.getEnclosingType();
  }
  if (searchType.isTypeVariableReference()) {
    searchType=((TypeVariableReference)searchType).getTypeVariable().getUpperBound().resolve(scope.getWorld());
  }
  arguments.resolveBindings(scope,bindings,true,true);
  ResolvedPointcutDefinition pointcutDef=searchType.findPointcut(name);
  if (pointcutDef == null && onType == null) {
    while (true) {
      UnresolvedType declaringType=searchType.getDeclaringType();
      if (declaringType == null)       break;
      searchType=declaringType.resolve(scope.getWorld());
      pointcutDef=searchType.findPointcut(name);
      if (pointcutDef != null) {
        onType=searchType;
        break;
      }
    }
  }
  if (pointcutDef == null) {
    scope.message(IMessage.ERROR,this,"String_Node_Str" + name);
    return;
  }
  if (!pointcutDef.isVisible(scope.getEnclosingType())) {
    scope.message(IMessage.ERROR,this,"String_Node_Str" + pointcutDef + "String_Node_Str");
    return;
  }
  if (Modifier.isAbstract(pointcutDef.getModifiers())) {
    if (onType != null && !onType.isTypeVariableReference()) {
      scope.message(IMessage.ERROR,this,"String_Node_Str");
      return;
    }
 else     if (!searchType.isAbstract()) {
      scope.message(IMessage.ERROR,this,"String_Node_Str");
      return;
    }
  }
  ResolvedType[] parameterTypes=scope.getWorld().resolve(pointcutDef.getParameterTypes());
  if (parameterTypes.length != arguments.size()) {
    scope.message(IMessage.ERROR,this,"String_Node_Str" + parameterTypes.length + "String_Node_Str"+ arguments.size());
    return;
  }
  if (onType != null) {
    if (onType.isParameterizedType()) {
      typeVariableMap=new HashMap();
      ResolvedType underlyingGenericType=((ResolvedType)onType).getGenericType();
      TypeVariable[] tVars=underlyingGenericType.getTypeVariables();
      ResolvedType[] typeParams=((ResolvedType)onType).getResolvedTypeParameters();
      for (int i=0; i < tVars.length; i++) {
        typeVariableMap.put(tVars[i].getName(),typeParams[i]);
      }
    }
 else     if (onType.isGenericType()) {
      scope.message(MessageUtil.error(WeaverMessages.format(WeaverMessages.CANT_REFERENCE_POINTCUT_IN_RAW_TYPE),getSourceLocation()));
    }
  }
  for (int i=0, len=arguments.size(); i < len; i++) {
    TypePattern p=arguments.get(i);
    if (typeVariableMap != null) {
      p=p.parameterizeWith(typeVariableMap,scope.getWorld());
    }
    if (p == TypePattern.NO) {
      scope.message(IMessage.ERROR,this,"String_Node_Str");
      return;
    }
    boolean reportProblem=false;
    if (parameterTypes[i].isTypeVariableReference() && p.getExactType().isTypeVariableReference()) {
      UnresolvedType One=((TypeVariableReference)parameterTypes[i]).getTypeVariable().getFirstBound();
      UnresolvedType Two=((TypeVariableReference)p.getExactType()).getTypeVariable().getFirstBound();
      reportProblem=!One.resolve(scope.getWorld()).isAssignableFrom(Two.resolve(scope.getWorld()));
    }
 else {
      reportProblem=!p.matchesSubtypes(parameterTypes[i]) && !p.getExactType().equals(UnresolvedType.OBJECT);
    }
    if (reportProblem) {
      scope.message(IMessage.ERROR,this,"String_Node_Str" + parameterTypes[i].getName() + "String_Node_Str"+ p+ "String_Node_Str");
      return;
    }
  }
}