Program: 185492
Project: 185492
Buggy source:
private IType fakeAnonymousInnerClass(IType outer,final InnerClassNode inner){
  return new ResolvedSourceType((JavaElement)outer,inner.getName(),GroovyUtils.getTypeSignature(inner,true,true)){
    public Object getElementInfo() throws JavaModelException {
      try {
        return super.getElementInfo();
      }
 catch (      JavaModelException jme) {
        if (!jme.getJavaModelStatus().isDoesNotExist()) {
          throw jme;
        }
        final IType anonType=this;
        return new org.eclipse.jdt.internal.core.SourceTypeElementInfo(){
{
            setHandle(anonType);
            setFlags(inner.getModifiers());
            ClassNode[] faces=inner.getInterfaces();
            char[][] names=new char[faces.length][];
            for (int i=0; i < faces.length; i+=1) {
              names[i]=faces[i].getName().toCharArray();
            }
            setSuperInterfaceNames(names);
            setSuperclassName(inner.getUnresolvedSuperClass().getName().toCharArray());
            setNameSourceStart(inner.getNameStart());
            setNameSourceEnd(inner.getNameEnd());
            setSourceRangeStart(inner.getStart());
            setSourceRangeEnd(inner.getEnd());
          }
        }
;
      }
    }
  }
;
}

Fixed version (ground truth):
private IType fakeAnonymousInnerClass(IType outer,final InnerClassNode inner){
  return new ResolvedSourceType((JavaElement)outer,inner.getName(),GroovyUtils.getTypeSignature(inner,true,true)){
    @Override public Object getElementInfo() throws JavaModelException {
      try {
        return super.getElementInfo();
      }
 catch (      JavaModelException jme) {
        if (!jme.getJavaModelStatus().isDoesNotExist()) {
          throw jme;
        }
        final IType anonType=this;
        return new org.eclipse.jdt.internal.core.SourceTypeElementInfo(){
{
            setHandle(anonType);
            setFlags(inner.getModifiers());
            ClassNode[] faces=inner.getInterfaces();
            char[][] names=new char[faces.length][];
            for (int i=0; i < faces.length; i+=1) {
              names[i]=faces[i].getName().toCharArray();
            }
            setSuperInterfaceNames(names);
            setSuperclassName(inner.getUnresolvedSuperClass().getName().toCharArray());
            setNameSourceStart(inner.getNameStart());
            setNameSourceEnd(inner.getNameEnd());
            setSourceRangeStart(inner.getStart());
            setSourceRangeEnd(inner.getEnd());
          }
        }
;
      }
    }
    @Override public IField getField(    String fieldName){
      final FieldNode fieldNode=inner.getDeclaredField(fieldName);
      if (fieldNode == null) {
        return super.getField(fieldName);
      }
      String uniqueKey=GroovyUtils.getTypeSignature(fieldNode.getDeclaringClass(),true,true) + Signature.C_DOT + fieldName+ "String_Node_Str"+ GroovyUtils.getTypeSignature(fieldNode.getType(),true,true);
      return new ResolvedSourceField(this,fieldName,uniqueKey){
        @Override public Object getElementInfo() throws JavaModelException {
          try {
            return super.getElementInfo();
          }
 catch (          JavaModelException jme) {
            if (!jme.getJavaModelStatus().isDoesNotExist()) {
              throw jme;
            }
            return new org.eclipse.jdt.internal.core.SourceFieldElementInfo(){
{
                setTypeName(fieldNode.getType().toString(false).toCharArray());
                setNameSourceStart(fieldNode.getNameStart());
                setNameSourceEnd(fieldNode.getNameEnd());
                setSourceRangeStart(fieldNode.getStart());
                setSourceRangeEnd(fieldNode.getEnd());
                setFlags(fieldNode.getModifiers());
              }
            }
;
          }
        }
      }
;
    }
    @Override public IMethod getMethod(    String methodName,    String[] parameterTypeSignatures){
      final MethodNode methodNode=inner.getDeclaredMethod(methodName,getParametersForTypes(parameterTypeSignatures));
      if (methodNode == null) {
        return super.getMethod(methodName,parameterTypeSignatures);
      }
      String uniqueKey=GroovyUtils.getTypeSignature(methodNode.getDeclaringClass(),true,true) + Signature.C_DOT + methodName+ Signature.C_PARAM_START+ Signature.C_PARAM_END+ GroovyUtils.getTypeSignature(methodNode.getReturnType(),true,true);
      return new ResolvedSourceMethod(this,methodName,parameterTypeSignatures,uniqueKey){
        @Override public Object getElementInfo() throws JavaModelException {
          try {
            return super.getElementInfo();
          }
 catch (          JavaModelException jme) {
            if (!jme.getJavaModelStatus().isDoesNotExist()) {
              throw jme;
            }
            return new org.eclipse.jdt.internal.core.SourceMethodInfo(){
{
                setReturnType(methodNode.getReturnType().getNameWithoutPackage().toCharArray());
                setNameSourceStart(methodNode.getNameStart());
                setNameSourceEnd(methodNode.getNameEnd());
                setSourceRangeStart(methodNode.getStart());
                setSourceRangeEnd(methodNode.getEnd());
                setFlags(methodNode.getModifiers());
              }
            }
;
          }
        }
      }
;
    }
  }
;
}