findMemberProposals(fields[fieldNum], accessor, WODCompletionProcessor.FIELD_PREFIXES, _token, _tokenOffset, _offset, _completionProposalsSet, 0, true);
findMemberProposals(fields[fieldNum], accessor, WODCompletionProcessor.FIELD_PREFIXES, _token, _tokenOffset, _offset, _completionProposalsSet, 0, true, false);
  protected void fillInAssociationValueCompletionProposals(IJavaProject _project, IType _associatedType, String _token, int _tokenOffset, int _offset, Set _completionProposalsSet) throws JavaModelException {    // Split association values on '.'    String partialToken = partialToken(_token, _tokenOffset, _offset).toLowerCase();    String[] accessors = partialToken.split("\\.");    // Split tosses empty tokens, so we check to see if we're on the last "." and fake an empty token in the list    if (partialToken.length() > 0 && partialToken.charAt(partialToken.length() - 1) == '.') {      String[] addedBlankAccessor = new String[accessors.length + 1];      System.arraycopy(accessors, 0, addedBlankAccessor, 0, accessors.length);      addedBlankAccessor[addedBlankAccessor.length - 1] = "";      accessors = addedBlankAccessor;    }    // Walk through the accessor keypath until we get to the end    IType nextType = _associatedType;    int offset = _tokenOffset;    for (int i = 0; nextType != null && i < accessors.length - 1; i++) {      String nextTypeName = nextType(nextType, accessors[i]);      if (nextTypeName != null) {        nextTypeName = Signature.toString(nextTypeName);        ITypeHierarchy typeHierarchy = nextType.newSupertypeHierarchy(null);        IType[] types = typeHierarchy.getAllTypes();        IType nextTypeAttempt = null;        for (int typeNum = 0; nextTypeAttempt == null && typeNum < types.length; typeNum++) {          String[][] resolvedTypes = types[typeNum].resolveType(nextTypeName);          if (resolvedTypes != null && resolvedTypes.length == 1) {            String nextTypeNameTemp = Signature.toQualifiedName(resolvedTypes[0]);            nextTypeAttempt = _project.findType(nextTypeNameTemp);          }        }        nextType = nextTypeAttempt;      }      else {        nextType = null;      }    }    if (nextType != null) {      // Jump forward to the last '.' and look for valid "get" method completion      // proposals based on the partial token      int previousTokenLength = partialToken.lastIndexOf('.') + 1;      _tokenOffset += previousTokenLength;      String accessor = accessors[accessors.length - 1];      _token = accessors[accessors.length - 1];      ITypeHierarchy typeHierarchy = nextType.newSupertypeHierarchy(null);      IType[] types = typeHierarchy.getAllTypes();      for (int typeNum = 0; typeNum < types.length; typeNum++) {        IField[] fields = types[typeNum].getFields();        for (int fieldNum = 0; fieldNum < fields.length; fieldNum++) {          findMemberProposals(fields[fieldNum], accessor, WODCompletionProcessor.FIELD_PREFIXES, _token, _tokenOffset, _offset, _completionProposalsSet, 0, true);        }        IMethod[] methods = types[typeNum].getMethods();        for (int methodsNum = 0; methodsNum < methods.length; methodsNum++) {          findMemberProposals(methods[methodsNum], accessor, WODCompletionProcessor.GET_METHOD_PREFIXES, _token, _tokenOffset, _offset, _completionProposalsSet, 0, true);        }      }    }  }