| Index: pkg/analysis_server/lib/src/services/index/index.dart | 
| diff --git a/pkg/analysis_server/lib/src/services/index/index.dart b/pkg/analysis_server/lib/src/services/index/index.dart | 
| index 7270ac241aec63b6d5f45d6e6bf2c269bff5fbdc..aa0663732fc6225d45e8868f8ce76f3edd5d6fba 100644 | 
| --- a/pkg/analysis_server/lib/src/services/index/index.dart | 
| +++ b/pkg/analysis_server/lib/src/services/index/index.dart | 
| @@ -341,24 +341,39 @@ class _PackageIndexRequester { | 
| * [element] is not referenced in the [index]. | 
| */ | 
| int findElementId(Element element) { | 
| +    IndexElementInfo info = new IndexElementInfo(element); | 
| +    element = info.element; | 
| // Find the id of the element's unit. | 
| int unitId = getUnitId(element); | 
| if (unitId == -1) { | 
| return -1; | 
| } | 
| // Prepare information about the element. | 
| -    ElementInfo info = PackageIndexAssembler.newElementInfo(unitId, element); | 
| -    // Find the first occurrence of an element with the same offset. | 
| -    int elementId = _findFirstOccurrence(index.elementOffsets, info.offset); | 
| +    int unitMemberId = getElementUnitMemberId(element); | 
| +    if (unitMemberId == -1) { | 
| +      return -1; | 
| +    } | 
| +    int classMemberId = getElementClassMemberId(element); | 
| +    if (classMemberId == -1) { | 
| +      return -1; | 
| +    } | 
| +    int parameterId = getElementParameterId(element); | 
| +    if (parameterId == -1) { | 
| +      return -1; | 
| +    } | 
| +    // Try to find the element id using classMemberId, parameterId, and kind. | 
| +    int elementId = | 
| +        _findFirstOccurrence(index.elementNameUnitMemberIds, unitMemberId); | 
| if (elementId == -1) { | 
| return -1; | 
| } | 
| -    // Try to find the element id using offset, unit and kind. | 
| for (; | 
| -        elementId < index.elementOffsets.length && | 
| -            index.elementOffsets[elementId] == info.offset; | 
| +        elementId < index.elementNameUnitMemberIds.length && | 
| +            index.elementNameUnitMemberIds[elementId] == unitMemberId; | 
| elementId++) { | 
| if (index.elementUnits[elementId] == unitId && | 
| +          index.elementNameClassMemberIds[elementId] == classMemberId && | 
| +          index.elementNameParameterIds[elementId] == parameterId && | 
| index.elementKinds[elementId] == info.kind) { | 
| return elementId; | 
| } | 
| @@ -383,6 +398,45 @@ class _PackageIndexRequester { | 
| } | 
|  | 
| /** | 
| +   * Return the [element]'s class member name identifier, `null` is not a class | 
| +   * member, or `-1` if the [element] is not referenced in the [index]. | 
| +   */ | 
| +  int getElementClassMemberId(Element element) { | 
| +    for (; element != null; element = element.enclosingElement) { | 
| +      if (element.enclosingElement is ClassElement) { | 
| +        return getStringId(element.name); | 
| +      } | 
| +    } | 
| +    return getStringId(PackageIndexAssembler.NULL_STRING); | 
| +  } | 
| + | 
| +  /** | 
| +   * Return the [element]'s class member name identifier, `null` is not a class | 
| +   * member, or `-1` if the [element] is not referenced in the [index]. | 
| +   */ | 
| +  int getElementParameterId(Element element) { | 
| +    for (; element != null; element = element.enclosingElement) { | 
| +      if (element is ParameterElement) { | 
| +        return getStringId(element.name); | 
| +      } | 
| +    } | 
| +    return getStringId(PackageIndexAssembler.NULL_STRING); | 
| +  } | 
| + | 
| +  /** | 
| +   * Return the [element]'s top-level name identifier, `0` is the unit, or | 
| +   * `-1` if the [element] is not referenced in the [index]. | 
| +   */ | 
| +  int getElementUnitMemberId(Element element) { | 
| +    for (; element != null; element = element.enclosingElement) { | 
| +      if (element.enclosingElement is CompilationUnitElement) { | 
| +        return getStringId(element.name); | 
| +      } | 
| +    } | 
| +    return getStringId(PackageIndexAssembler.NULL_STRING); | 
| +  } | 
| + | 
| +  /** | 
| * Complete with a list of locations where the given [element] has relation | 
| * of the given [kind]. | 
| */ | 
|  |