@Override public IIndexName[] findNames(int offset, int length) throws CoreException { ArrayList<IIndexName> result = new ArrayList<IIndexName>(); for (PDOMName name = getFirstName(); name != null; name = name.getNextInFile()) { int nameOffset = name.getNodeOffset(); if (nameOffset >= offset) { if (nameOffset + name.getNodeLength() <= offset + length) { result.add(name); } else if (name.isReference()) { // Names are ordered, but callers are inserted before // their references. break; } } } for (PDOMMacro macro = getFirstMacro(); macro != null; macro = macro.getNextMacro()) { int nameOffset = macro.getNodeOffset(); if (nameOffset >= offset) { if (nameOffset + macro.getNodeLength() <= offset + length) { IIndexFragmentName name = macro.getDefinition(); if (name != null) { result.add(name); } } else { break; } } } for (PDOMMacroReferenceName name = getFirstMacroReference(); name != null; name = name.getNextInFile()) { int nameOffset = name.getNodeOffset(); if (nameOffset >= offset) { if (nameOffset + name.getNodeLength() <= offset + length) { result.add(name); } else { break; } } } return result.toArray(new IIndexName[result.size()]); }