Program: 84377
Project: 84377
Buggy source:
private void getAccess(IParserManager pm,Name name,IToken token,int type){
  IToken next=token.next();
  int nextType=next.type();
  if (nextType == Symbols.OPEN_PARENTHESIS) {
    MethodCall call=new MethodCall(token.raw(),this.value,name);
    call.setDotless(this.dotless);
    this.value=call;
    this.mode=PARAMETERS_END;
    pm.skip();
    call.setArguments(this.getArguments(pm,next.next()));
    return;
  }
  if (nextType == Symbols.OPEN_SQUARE_BRACKET) {
    SubscriptGetter getter=new SubscriptGetter(token,new FieldAccess(token.raw(),this.value,name));
    this.value=getter;
    this.mode=SUBSCRIPT_END;
    pm.skip();
    pm.pushParser(new ExpressionListParser(getter.getArguments()));
    return;
  }
  if (nextType == Symbols.ARROW_OPERATOR) {
    LambdaExpression lv=new LambdaExpression(next.raw(),new MethodParameter(token.raw(),token.nameValue()));
    this.mode=END;
    this.value=lv;
    pm.pushParser(pm.newExpressionParser(lv));
    pm.skip();
    return;
  }
  if (nextType == Symbols.GENERIC_CALL) {
    MethodCall mc=new MethodCall(token.raw(),this.value,token.nameValue());
    GenericData gd=new GenericData();
    mc.setGenericData(gd);
    mc.setDotless(this.dotless);
    this.value=mc;
    this.mode=TYPE_ARGUMENTS_END;
    pm.skip();
    pm.pushParser(new TypeListParser(gd));
    return;
  }
  Operator op=pm.getOperator(name);
  if (op != null) {
    if (this.value == null || op.type == Operator.PREFIX) {
      SingleArgument sa=new SingleArgument();
      MethodCall call=new MethodCall(token,null,name,sa);
      call.setDotless(this.dotless);
      this.value=call;
      this.mode=ACCESS;
      ExpressionParser parser=(ExpressionParser)pm.newExpressionParser(sa);
      parser.operator=op;
      parser.prefix=true;
      pm.pushParser(parser);
      return;
    }
    MethodCall call=new MethodCall(token,this.value,name);
    call.setDotless(this.dotless);
    this.value=call;
    this.mode=ACCESS;
    if (op.type != Operator.POSTFIX && !ParserUtil.isTerminator2(nextType)) {
      SingleArgument sa=new SingleArgument();
      call.setArguments(sa);
      ExpressionParser parser=(ExpressionParser)pm.newExpressionParser(sa);
      parser.operator=op;
      pm.pushParser(parser);
    }
    return;
  }
  if (!name.qualified.endsWith("String_Node_Str")) {
    if (ParserUtil.isTerminator2(nextType)) {
      FieldAccess access=new FieldAccess(token,this.value,name);
      access.setDotless(this.dotless);
      this.value=access;
      this.mode=ACCESS;
      return;
    }
    if (ParserUtil.isIdentifier(nextType)) {
      if (ParserUtil.isOperator(pm,next,nextType) || !ParserUtil.isTerminator2(next.next().type())) {
        FieldAccess access=new FieldAccess(token,this.value,name);
        access.setDotless(this.dotless);
        this.value=access;
        this.mode=ACCESS;
        return;
      }
    }
  }
  op=pm.getOperator(stripEq(name));
  SingleArgument sa=new SingleArgument();
  MethodCall call=new MethodCall(token,this.value,name,sa);
  call.setDotless(this.dotless);
  this.value=call;
  this.mode=ACCESS;
  ExpressionParser parser=(ExpressionParser)pm.newExpressionParser(sa);
  parser.operator=op == null ? Operators.DEFAULT : op;
  pm.pushParser(parser);
  return;
}

Fixed version (ground truth):
private void getAccess(IParserManager pm,Name name,IToken token,int type){
  IToken next=token.next();
  int nextType=next.type();
  if (nextType == Symbols.OPEN_PARENTHESIS) {
    MethodCall call=new MethodCall(token.raw(),this.value,name);
    call.setDotless(this.dotless);
    this.value=call;
    this.mode=PARAMETERS_END;
    pm.skip();
    call.setArguments(this.getArguments(pm,next.next()));
    return;
  }
  if (nextType == Symbols.OPEN_SQUARE_BRACKET) {
    SubscriptGetter getter=new SubscriptGetter(token,new FieldAccess(token.raw(),this.value,name));
    this.value=getter;
    this.mode=SUBSCRIPT_END;
    pm.skip();
    pm.pushParser(new ExpressionListParser(getter.getArguments()));
    return;
  }
  if (nextType == Symbols.ARROW_OPERATOR) {
    LambdaExpression lv=new LambdaExpression(next.raw(),new MethodParameter(token.raw(),token.nameValue()));
    this.mode=END;
    this.value=lv;
    pm.pushParser(pm.newExpressionParser(lv));
    pm.skip();
    return;
  }
  if (nextType == Symbols.GENERIC_CALL) {
    MethodCall mc=new MethodCall(token.raw(),this.value,token.nameValue());
    GenericData gd=new GenericData();
    mc.setGenericData(gd);
    mc.setDotless(this.dotless);
    this.value=mc;
    this.mode=TYPE_ARGUMENTS_END;
    pm.skip();
    pm.pushParser(new TypeListParser(gd));
    return;
  }
  Operator op=pm.getOperator(name);
  if (op != null) {
    if (this.value == null || op.type == Operator.PREFIX) {
      SingleArgument sa=new SingleArgument();
      MethodCall call=new MethodCall(token,null,name,sa);
      call.setDotless(this.dotless);
      this.value=call;
      this.mode=ACCESS;
      ExpressionParser parser=(ExpressionParser)pm.newExpressionParser(sa);
      parser.operator=op;
      parser.prefix=true;
      pm.pushParser(parser);
      return;
    }
    MethodCall call=new MethodCall(token,this.value,name);
    call.setDotless(this.dotless);
    this.value=call;
    this.mode=ACCESS;
    if (op.type != Operator.POSTFIX && !ParserUtil.isTerminator2(nextType)) {
      SingleArgument sa=new SingleArgument();
      call.setArguments(sa);
      ExpressionParser parser=(ExpressionParser)pm.newExpressionParser(sa);
      parser.operator=op;
      pm.pushParser(parser);
    }
    return;
  }
  if (!name.qualified.endsWith("String_Node_Str")) {
    if (ParserUtil.isTerminator2(nextType)) {
      FieldAccess access=new FieldAccess(token,this.value,name);
      access.setDotless(this.dotless);
      this.value=access;
      this.mode=ACCESS;
      return;
    }
    if (ParserUtil.isIdentifier(nextType)) {
      if (ParserUtil.isOperator(pm,next,nextType) || !ParserUtil.isTerminator2(next.next().type())) {
        FieldAccess access=new FieldAccess(token,this.value,name);
        access.setDotless(this.dotless);
        this.value=access;
        this.mode=ACCESS;
        return;
      }
    }
  }
 else {
    op=pm.getOperator(stripEq(name));
  }
  SingleArgument sa=new SingleArgument();
  MethodCall call=new MethodCall(token,this.value,name,sa);
  call.setDotless(this.dotless);
  this.value=call;
  this.mode=ACCESS;
  ExpressionParser parser=(ExpressionParser)pm.newExpressionParser(sa);
  parser.operator=op == null ? Operators.DEFAULT : op;
  pm.pushParser(parser);
  return;
}