Cleanup code no longer used by scoping.

Change-Id: I226bb1b158b1e0e671097772939aa7d27efa3937
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
index 9bed2d8..9f87e74 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
@@ -34,9 +34,7 @@
 import static com.google.eclipse.protobuf.util.CommonWords.space;
 import static java.lang.String.valueOf;
 import static java.util.Collections.emptyList;
-import static java.util.Collections.emptySet;
 import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
-import static org.eclipse.xtext.util.Strings.isEmpty;
 import static org.eclipse.xtext.util.Strings.toFirstLower;
 
 import com.google.eclipse.protobuf.grammar.CommonKeyword;
@@ -44,7 +42,6 @@
 import com.google.eclipse.protobuf.model.util.Literals;
 import com.google.eclipse.protobuf.model.util.MessageFields;
 import com.google.eclipse.protobuf.model.util.Options;
-import com.google.eclipse.protobuf.protobuf.AbstractCustomOption;
 import com.google.eclipse.protobuf.protobuf.AbstractOption;
 import com.google.eclipse.protobuf.protobuf.ComplexValue;
 import com.google.eclipse.protobuf.protobuf.CustomFieldOption;
@@ -60,14 +57,9 @@
 import com.google.eclipse.protobuf.protobuf.NativeFieldOption;
 import com.google.eclipse.protobuf.protobuf.NativeOption;
 import com.google.eclipse.protobuf.protobuf.Option;
-import com.google.eclipse.protobuf.protobuf.Rpc;
 import com.google.eclipse.protobuf.protobuf.SimpleValueField;
-import com.google.eclipse.protobuf.protobuf.Stream;
-import com.google.eclipse.protobuf.protobuf.TypeExtension;
 import com.google.eclipse.protobuf.scoping.ProtoDescriptor;
 import com.google.eclipse.protobuf.scoping.ProtoDescriptorProvider;
-import com.google.eclipse.protobuf.scoping.ProtobufScopeProvider;
-import com.google.eclipse.protobuf.scoping.ScopeProvider;
 import com.google.eclipse.protobuf.ui.grammar.CompoundElement;
 import com.google.eclipse.protobuf.ui.labeling.Images;
 import com.google.eclipse.protobuf.util.EResources;
@@ -81,8 +73,6 @@
 import org.eclipse.xtext.Assignment;
 import org.eclipse.xtext.Keyword;
 import org.eclipse.xtext.RuleCall;
-import org.eclipse.xtext.naming.QualifiedName;
-import org.eclipse.xtext.resource.IEObjectDescription;
 import org.eclipse.xtext.ui.PluginImageHelper;
 import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
 import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
@@ -95,10 +85,9 @@
 /**
  * @author alruiz@google.com (Alex Ruiz)
  *
- * @see <a href="http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist">Xtext Content Assist</a>
+ * @see <a href="http://www.eclipse.org/Xtext/documentation/310_eclipse_support.html#content-assist">Xtext Content Assist</a>
  */
 public class ProtobufProposalProvider extends AbstractProtobufProposalProvider {
-  @Inject private IEObjectDescriptionChooser descriptionChooser;
   @Inject private ProtoDescriptorProvider descriptorProvider;
   @Inject private Images images;
   @Inject private IndexedElements indexedElements;
@@ -125,47 +114,6 @@
     proposeAndAccept(proposal, imageHelper.getImage(images.imageFor(SYNTAX)), context, acceptor);
   }
 
-  @Override public void completeComplexTypeLink_Target(EObject model, Assignment assignment,
-      ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    if (model instanceof MessageField) {
-      Collection<IEObjectDescription> scope = scopeProvider().potentialComplexTypesFor((MessageField) model);
-      for (IEObjectDescription d : descriptionChooser.shortestQualifiedNamesIn(scope)) {
-        Image image = imageHelper.getImage(images.imageFor(d.getEObjectOrProxy()));
-        proposeAndAccept(d, image, context, acceptor);
-      }
-    }
-  }
-
-  @Override public void completeExtensibleTypeLink_Target(EObject model, Assignment assignment,
-      ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    Collection<IEObjectDescription> scope = emptySet();
-    if (model instanceof TypeExtension) {
-      TypeExtension typeExtension = (TypeExtension) model;
-      scope = scopeProvider().potentialExtensibleTypesFor(typeExtension);
-    }
-    for (IEObjectDescription d : descriptionChooser.shortestQualifiedNamesIn(scope)) {
-      Image image = imageHelper.getImage(images.imageFor(d.getEObjectOrProxy()));
-      proposeAndAccept(d, image, context, acceptor);
-    }
-  }
-
-  @Override public void completeMessageLink_Target(EObject model, Assignment assignment, ContentAssistContext context,
-      ICompletionProposalAcceptor acceptor) {
-    Collection<IEObjectDescription> scope = emptySet();
-    if (model instanceof Rpc) {
-      Rpc rpc = (Rpc) model;
-      scope = scopeProvider().potentialMessagesFor(rpc);
-    }
-    if (model instanceof Stream) {
-      Stream stream = (Stream) model;
-      scope = scopeProvider().potentialMessagesFor(stream);
-    }
-    for (IEObjectDescription d : descriptionChooser.shortestQualifiedNamesIn(scope)) {
-      Image image = imageHelper.getImage(images.imageFor(d.getEObjectOrProxy()));
-      proposeAndAccept(d, image, context, acceptor);
-    }
-  }
-
   @Override public void completeNativeOption_Source(EObject model, Assignment assignment,
       ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
     ProtoDescriptor descriptor =
@@ -565,71 +513,10 @@
     acceptor.accept(proposal);
   }
 
-  @Override public void completeCustomOption_Source(EObject model, Assignment assignment,
-      ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    completeAbstractCustomOptionSource(model, context, acceptor);
-  }
-
-  @Override public void completeCustomFieldOption_Source(EObject model, Assignment assignment,
-      ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    completeAbstractCustomOptionSource(model, context, acceptor);
-  }
-
-  private void completeAbstractCustomOptionSource(EObject model, ContentAssistContext context,
-      ICompletionProposalAcceptor acceptor) {
-    if (model instanceof AbstractCustomOption) {
-      AbstractCustomOption option = (AbstractCustomOption) model;
-      Collection<IEObjectDescription> scope = scopeProvider().potentialSourcesFor(option);
-      proposeAndAcceptOptions(scope, context, acceptor);
-    }
-  }
-
-  private void proposeAndAcceptOptions(Collection<IEObjectDescription> scope, ContentAssistContext context,
-      ICompletionProposalAcceptor acceptor) {
-    Image image = imageForOption();
-    for (IEObjectDescription d : descriptionChooser.shortestQualifiedNamesIn(scope)) {
-      proposeAndAccept(d, image, context, acceptor);
-    }
-  }
-
   private Image imageForOption() {
     return imageHelper.getImage(images.imageFor(OPTION));
   }
 
-  private void proposeAndAccept(IEObjectDescription d, Image image, ContentAssistContext context,
-      ICompletionProposalAcceptor acceptor) {
-    proposeAndAccept(d, null, null, image, context, acceptor);
-  }
-
-  @Override public void completeCustomOption_Fields(EObject model, Assignment assignment,
-      ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    if (model instanceof CustomOption) {
-      CustomOption option = (CustomOption) model;
-      proposeAndAccept(scopeProvider().potentialMessageFieldsFor(option), context, acceptor);
-      proposeAndAccept(scopeProvider().potentialExtensionFieldsFor(option), "(%s)", "(%s)", context, acceptor);
-    }
-  }
-
-  @Override public void completeCustomFieldOption_Fields(EObject model, Assignment assignment,
-      ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    if (model instanceof CustomFieldOption) {
-      CustomFieldOption option = (CustomFieldOption) model;
-      proposeAndAccept(scopeProvider().potentialMessageFieldsFor(option), context, acceptor);
-      proposeExtensionFields(scopeProvider().potentialExtensionFieldsFor(option), context, acceptor);
-    }
-  }
-
-  private void proposeExtensionFields(Collection<IEObjectDescription> scope, ContentAssistContext context,
-      ICompletionProposalAcceptor acceptor) {
-    String format = "(%s)";
-    proposeAndAccept(scope, format, format, context, acceptor);
-  }
-
-  private void proposeAndAccept(Collection<IEObjectDescription> scope, ContentAssistContext context,
-      ICompletionProposalAcceptor acceptor) {
-    proposeAndAccept(scope, null, null, context, acceptor);
-  }
-
   @Override public void completeOptionSource_Target(EObject model, Assignment assignment,
       ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
   }
@@ -719,49 +606,12 @@
     }
   }
 
-  @Override public void completeSimpleValueField_Name(EObject model, Assignment assignment,
-      ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    if (model instanceof ComplexValue) {
-      ComplexValue value = (ComplexValue) model;
-      proposeAndAccept(scopeProvider().potentialNormalFieldNames(value), "%s:", null, context, acceptor);
-      proposeAndAccept(scopeProvider().potentialExtensionFieldNames(value), "[%s]:", "[%s]", context, acceptor);
-    }
-  }
-
-  private void proposeAndAccept(Collection<IEObjectDescription> scope, String proposalFormat, String displayFormat,
-      ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    for (IEObjectDescription d : descriptionChooser.shortestQualifiedNamesIn(scope)) {
-      Image image = imageHelper.getImage(images.imageFor(d.getEObjectOrProxy()));
-      proposeAndAccept(d, proposalFormat, displayFormat, image, context, acceptor);
-    }
-  }
-
-  private void proposeAndAccept(IEObjectDescription d, String proposalFormat, String displayFormat, Image image,
-      ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    QualifiedName name = d.getName();
-    String proposalText = name.toString();
-    if (!isEmpty(proposalFormat)) {
-      proposalText = String.format(proposalFormat, proposalText);
-    }
-    String lastSegment = name.getLastSegment();
-    if (!isEmpty(displayFormat)) {
-      lastSegment = String.format(displayFormat, lastSegment);
-    }
-    String display = String.format("%s - %s", lastSegment, name.toString());
-    ICompletionProposal proposal = createCompletionProposal(proposalText, display, image, context);
-    acceptor.accept(proposal);
-  }
-
   private void proposeAndAccept(String proposalText, Image image, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
     ICompletionProposal proposal = createCompletionProposal(proposalText, proposalText, image, context);
     acceptor.accept(proposal);
   }
 
-  private ScopeProvider scopeProvider() {
-    return (ProtobufScopeProvider) super.getScopeProvider();
-  }
-
   @Override public ICompletionProposal createCompletionProposal(String proposal, String displayString, Image image,
       ContentAssistContext contentAssistContext) {
     StyledString styled = null;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ComplexTypeFinderStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ComplexTypeFinderStrategy.java
deleted file mode 100644
index 6b8b932..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ComplexTypeFinderStrategy.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (c) 2014 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static com.google.common.collect.Sets.newHashSet;
-import static java.util.Collections.emptySet;
-import static org.eclipse.xtext.resource.EObjectDescription.create;
-
-import com.google.eclipse.protobuf.model.util.Imports;
-import com.google.eclipse.protobuf.naming.LocalNamesProvider;
-import com.google.eclipse.protobuf.naming.NormalNamingStrategy;
-import com.google.eclipse.protobuf.protobuf.ComplexType;
-import com.google.eclipse.protobuf.protobuf.Import;
-import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.eclipse.protobuf.util.EResources;
-import com.google.inject.Inject;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.naming.QualifiedName;
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class ComplexTypeFinderStrategy implements ModelElementFinder.FinderStrategy<Class<? extends ComplexType>> {
-  @Inject private PackageIntersectionDescriptions packageIntersectionDescriptions;
-  @Inject private ProtoDescriptorProvider descriptorProvider;
-  @Inject private LocalNamesProvider localNamesProvider;
-  @Inject private NormalNamingStrategy namingStrategy;
-  @Inject private QualifiedNameDescriptions qualifiedNamesDescriptions;
-  @Inject private Imports imports;
-
-  @Override public Collection<IEObjectDescription> imported(Package fromImporter, Package fromImported, Object target,
-      Class<? extends ComplexType> typeOfComplexType) {
-    if (!typeOfComplexType.isInstance(target)) {
-      return emptySet();
-    }
-    Set<IEObjectDescription> descriptions = newHashSet();
-    EObject e = (EObject) target;
-    descriptions.addAll(qualifiedNamesDescriptions.qualifiedNames(e, namingStrategy));
-    descriptions.addAll(packageIntersectionDescriptions.intersection(fromImporter, fromImported, e));
-    return descriptions;
-  }
-
-  @Override public Collection<IEObjectDescription> inDescriptor(Import anImport,
-      Class<? extends ComplexType> typeOfComplexType) {
-    IProject project = EResources.getProjectOf(anImport.eResource());
-    Set<IEObjectDescription> descriptions = newHashSet();
-    ProtoDescriptor descriptor = descriptorProvider.descriptor(project, imports.getPath(anImport));
-    for (ComplexType complexType : descriptor.allTypes()) {
-      if (!typeOfComplexType.isInstance(complexType)) {
-        continue;
-      }
-      descriptions.addAll(qualifiedNamesDescriptions.qualifiedNames(complexType, namingStrategy));
-    }
-    return descriptions;
-  }
-
-  @Override public Collection<IEObjectDescription> local(Object target, Class<? extends ComplexType> typeOfComplexType,
-      int level) {
-   if (!typeOfComplexType.isInstance(target)) {
-      return emptySet();
-    }
-    EObject e = (EObject) target;
-    Set<IEObjectDescription> descriptions = newHashSet();
-    List<QualifiedName> names = localNamesProvider.localNames(e, namingStrategy);
-    int nameCount = names.size();
-    for (int i = level; i < nameCount; i++) {
-      descriptions.add(create(names.get(i), e));
-    }
-    descriptions.addAll(qualifiedNamesDescriptions.qualifiedNames(e, namingStrategy));
-    return descriptions;
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldFinder.java
deleted file mode 100644
index 26a2941..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldFinder.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static java.util.Collections.emptySet;
-
-import java.util.Collection;
-
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.eclipse.protobuf.model.util.OptionFields;
-import com.google.eclipse.protobuf.model.util.Options;
-import com.google.eclipse.protobuf.protobuf.AbstractCustomOption;
-import com.google.eclipse.protobuf.protobuf.AbstractOption;
-import com.google.eclipse.protobuf.protobuf.IndexedElement;
-import com.google.eclipse.protobuf.protobuf.OptionField;
-import com.google.inject.Inject;
-import com.google.inject.Provider;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class CustomOptionFieldFinder {
-  @Inject private OptionFields optionFields;
-  @Inject private Options options;
-
-  Collection<IEObjectDescription> findOptionFields(AbstractCustomOption customOption, FinderStrategy strategy) {
-    return findOptionFields(customOption, strategy, null);
-  }
-
-  Collection<IEObjectDescription> findOptionFields(AbstractCustomOption customOption, FinderStrategy strategy,
-      OptionField field) {
-    // TODO(alruiz): remove Provider of IndexedElement.
-    final AbstractOption option = (AbstractOption) customOption;
-    IndexedElement e = referredField(customOption, field, new Provider<IndexedElement>() {
-      @Override public IndexedElement get() {
-        return options.rootSourceOf(option);
-      }
-    });
-    if (e != null) {
-      return strategy.findOptionFields(e);
-    }
-    return emptySet();
-  }
-
-  private IndexedElement referredField(AbstractCustomOption customOption, OptionField field,
-      Provider<IndexedElement> provider) {
-    OptionField previous = null;
-    boolean isFirstField = true;
-    for (OptionField current : options.fieldsOf(customOption)) {
-      if (current == field) {
-        return (isFirstField) ? provider.get() : optionFields.sourceOf(previous);
-      }
-      previous = current;
-      isFirstField = false;
-    }
-    if (field == null) {
-      if (previous == null) {
-        return provider.get();
-      }
-      return optionFields.sourceOf(previous);
-    }
-    return null;
-  }
-
-  static interface FinderStrategy {
-    Collection<IEObjectDescription> findOptionFields(IndexedElement reference);
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldNameFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldNameFinder.java
deleted file mode 100644
index c5c7ff0..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldNameFinder.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static java.util.Collections.emptySet;
-
-import com.google.eclipse.protobuf.model.util.Options;
-import com.google.eclipse.protobuf.protobuf.AbstractCustomOption;
-import com.google.eclipse.protobuf.protobuf.ComplexValue;
-import com.google.eclipse.protobuf.protobuf.ComplexValueField;
-import com.google.eclipse.protobuf.protobuf.FieldName;
-import com.google.eclipse.protobuf.protobuf.IndexedElement;
-import com.google.inject.Inject;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import java.util.Collection;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class CustomOptionFieldNameFinder {
-  @Inject private Options options;
-
-  Collection<IEObjectDescription> findFieldNamesSources(ComplexValue value, FinderStrategy strategy) {
-    IndexedElement source = sourceOf(value);
-    if (source == null) {
-      return emptySet();
-    }
-    return strategy.findMessageFields(source);
-  }
-
-  private IndexedElement sourceOf(ComplexValue value) {
-    IndexedElement source = null;
-    EObject container = value.eContainer();
-    if (container instanceof AbstractCustomOption) {
-      AbstractCustomOption option = (AbstractCustomOption) container;
-      source = options.sourceOf(option);
-    }
-    if (container instanceof ComplexValueField) {
-      source = sourceOfNameOf((ComplexValueField) container);
-    }
-    return source;
-  }
-
-  private IndexedElement sourceOfNameOf(ComplexValueField field) {
-    FieldName name = field.getName();
-    return (name == null) ? null : name.getTarget();
-  }
-
-  static interface FinderStrategy {
-    Collection<IEObjectDescription> findMessageFields(IndexedElement reference);
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFinderStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFinderStrategy.java
deleted file mode 100644
index bae454f..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFinderStrategy.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (c) 2011, 2015 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static java.util.Collections.emptySet;
-
-import static org.eclipse.xtext.resource.EObjectDescription.create;
-
-import static com.google.common.collect.Sets.newHashSet;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.xtext.naming.QualifiedName;
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.eclipse.protobuf.model.util.TypeExtensions;
-import com.google.eclipse.protobuf.naming.LocalNamesProvider;
-import com.google.eclipse.protobuf.naming.OptionNamingStrategy;
-import com.google.eclipse.protobuf.protobuf.Import;
-import com.google.eclipse.protobuf.protobuf.IndexedElement;
-import com.google.eclipse.protobuf.protobuf.Message;
-import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.eclipse.protobuf.protobuf.TypeExtension;
-import com.google.inject.Inject;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class CustomOptionFinderStrategy implements ModelElementFinder.FinderStrategy<OptionType> {
-  @Inject private LocalNamesProvider localNamesProvider;
-  @Inject private OptionNamingStrategy namingStrategy;
-  @Inject private QualifiedNameDescriptions qualifiedNamesDescriptions;
-  @Inject private TypeExtensions typeExtensions;
-
-  @Override public Collection<IEObjectDescription> imported(Package fromImporter, Package fromImported, Object target,
-      OptionType optionType) {
-    if (!isExtendingOptionMessage(target, optionType)) {
-      return emptySet();
-    }
-    Set<IEObjectDescription> descriptions = newHashSet();
-    TypeExtension extension = (TypeExtension) target;
-    for (IndexedElement e : extension.getElements()) {
-      descriptions.addAll(qualifiedNamesDescriptions.qualifiedNames(e, namingStrategy));
-    }
-    return descriptions;
-  }
-
-  @Override public Collection<IEObjectDescription> inDescriptor(Import anImport, OptionType criteria) {
-    return emptySet();
-  }
-
-  @Override public Collection<IEObjectDescription> local(Object target, OptionType optionType, int level) {
-    if (!isExtendingOptionMessage(target, optionType)) {
-      return emptySet();
-    }
-    Set<IEObjectDescription> descriptions = newHashSet();
-    TypeExtension extension = (TypeExtension) target;
-    for (IndexedElement e : extension.getElements()) {
-      List<QualifiedName> names = localNamesProvider.localNames(e, namingStrategy);
-      int nameCount = names.size();
-      for (int i = level; i < nameCount; i++) {
-        descriptions.add(create(names.get(i), e));
-      }
-      descriptions.addAll(qualifiedNamesDescriptions.qualifiedNames(e, namingStrategy));
-    }
-    return descriptions;
-  }
-
-  private boolean isExtendingOptionMessage(Object o, OptionType optionType) {
-    if (!(o instanceof TypeExtension)) {
-      return false;
-    }
-    Message message = typeExtensions.messageFrom((TypeExtension) o);
-    if (message == null) {
-      return false;
-    }
-    String name = message.getName();
-    return optionType.messageName().equals(name);
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ExtensionFieldFinderStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ExtensionFieldFinderStrategy.java
deleted file mode 100644
index eca6a62..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ExtensionFieldFinderStrategy.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2011, 2015 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static java.util.Collections.emptyList;
-
-import static org.eclipse.xtext.resource.EObjectDescription.create;
-
-import static com.google.common.collect.Sets.newHashSet;
-
-import java.util.Collection;
-import java.util.Set;
-
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.eclipse.protobuf.model.util.MessageFields;
-import com.google.eclipse.protobuf.model.util.Messages;
-import com.google.eclipse.protobuf.model.util.Options;
-import com.google.eclipse.protobuf.naming.OptionNamingStrategy;
-import com.google.eclipse.protobuf.protobuf.IndexedElement;
-import com.google.eclipse.protobuf.protobuf.Message;
-import com.google.eclipse.protobuf.protobuf.MessageField;
-import com.google.eclipse.protobuf.protobuf.TypeExtension;
-import com.google.inject.Inject;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class ExtensionFieldFinderStrategy implements CustomOptionFieldFinder.FinderStrategy {
-  @Inject private MessageFields messageFields;
-  @Inject private Messages messages;
-  @Inject private OptionNamingStrategy namingStrategy;
-  @Inject private Options options;
-  @Inject private QualifiedNameDescriptions qualifiedNameDescriptions;
-
-  @Override public Collection<IEObjectDescription> findOptionFields(IndexedElement reference) {
-    if (!(reference instanceof MessageField)) {
-      return emptyList();
-    }
-    Message fieldType = messageFields.messageTypeOf((MessageField) reference);
-    if (fieldType == null) {
-      return emptyList();
-    }
-    Set<IEObjectDescription> descriptions = newHashSet();
-    for (TypeExtension extension : messages.localExtensionsOf(fieldType)) {
-      for (IndexedElement element : extension.getElements()) {
-        descriptions.addAll(qualifiedNameDescriptions.qualifiedNames(element, namingStrategy));
-        String name = options.nameForOption(element);
-        descriptions.add(create(name, element));
-      }
-    }
-    return descriptions;
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ExtensionFieldNameFinderStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ExtensionFieldNameFinderStrategy.java
deleted file mode 100644
index 4d84140..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ExtensionFieldNameFinderStrategy.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (c) 2012, 2015 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static com.google.common.collect.Sets.newHashSet;
-
-import java.util.Collection;
-import java.util.Set;
-
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.common.base.Strings;
-import com.google.eclipse.protobuf.model.util.MessageFields;
-import com.google.eclipse.protobuf.model.util.Messages;
-import com.google.eclipse.protobuf.model.util.ModelObjects;
-import com.google.eclipse.protobuf.naming.NormalNamingStrategy;
-import com.google.eclipse.protobuf.protobuf.Group;
-import com.google.eclipse.protobuf.protobuf.IndexedElement;
-import com.google.eclipse.protobuf.protobuf.Message;
-import com.google.eclipse.protobuf.protobuf.MessageField;
-import com.google.eclipse.protobuf.protobuf.TypeExtension;
-import com.google.inject.Inject;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class ExtensionFieldNameFinderStrategy implements CustomOptionFieldNameFinder.FinderStrategy {
-  @Inject private MessageFields messageFields;
-  @Inject private Messages messages;
-  @Inject private ModelObjects modelObjects;
-  @Inject private NormalNamingStrategy namingStrategy;
-  @Inject private QualifiedNameDescriptions qualifiedNameDescriptions;
-
-  @Override public Collection<IEObjectDescription> findMessageFields(IndexedElement reference) {
-    Set<IEObjectDescription> descriptions = newHashSet();
-    if (reference instanceof MessageField) {
-      Message type = messageFields.messageTypeOf((MessageField) reference);
-      // check first in descriptor.proto
-      for (TypeExtension extension : messages.extensionsOf(type, modelObjects.rootOf(reference))) {
-        for (IndexedElement element : extension.getElements()) {
-          descriptions.addAll(qualifiedNameDescriptions.qualifiedNames(element, namingStrategy));
-        }
-      }
-    } else if (reference instanceof Group) {
-      String name = ((Group) reference).getName();
-      if (!Strings.isNullOrEmpty(name)) {
-        descriptions.addAll(qualifiedNameDescriptions.qualifiedNames(reference, namingStrategy));
-      }
-    }
-    return descriptions;
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LiteralDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LiteralDescriptions.java
deleted file mode 100644
index 588d262..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/LiteralDescriptions.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static java.util.Collections.emptyList;
-
-import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
-import static org.eclipse.xtext.resource.EObjectDescription.create;
-
-import static com.google.common.collect.Lists.newArrayList;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.eclipse.protobuf.protobuf.Enum;
-import com.google.eclipse.protobuf.protobuf.Literal;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class LiteralDescriptions {
-  Collection<IEObjectDescription> literalsOf(Enum anEnum) {
-    if (anEnum == null) {
-      return emptyList();
-    }
-    List<IEObjectDescription> descriptions = newArrayList();
-    for (Literal literal : getAllContentsOfType(anEnum, Literal.class)) {
-      String name = literal.getName();
-      descriptions.add(create(name, literal));
-    }
-    return descriptions;
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/MessageFieldFinderStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/MessageFieldFinderStrategy.java
deleted file mode 100644
index 0a847c4..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/MessageFieldFinderStrategy.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static org.eclipse.xtext.resource.EObjectDescription.create;
-
-import static com.google.common.collect.Sets.newHashSet;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Set;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.eclipse.protobuf.model.util.MessageFields;
-import com.google.eclipse.protobuf.model.util.Options;
-import com.google.eclipse.protobuf.protobuf.Group;
-import com.google.eclipse.protobuf.protobuf.IndexedElement;
-import com.google.eclipse.protobuf.protobuf.Message;
-import com.google.eclipse.protobuf.protobuf.MessageField;
-import com.google.eclipse.protobuf.protobuf.OneOf;
-import com.google.inject.Inject;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class MessageFieldFinderStrategy implements CustomOptionFieldFinder.FinderStrategy {
-  @Inject private MessageFields messageFields;
-  @Inject private Options options;
-
-  @Override public Collection<IEObjectDescription> findOptionFields(IndexedElement reference) {
-    Collection<? extends EObject> elements;
-    if (reference instanceof MessageField) {
-      Message fieldType = messageFields.mapEntryTypeOf((MessageField) reference);
-      if (fieldType == null) {
-        fieldType = messageFields.messageTypeOf((MessageField) reference);
-      }
-
-      if (fieldType != null) {
-        elements = fieldType.getElements();
-      } else {
-        elements = Collections.emptySet();
-      }
-    } else if (reference instanceof Group) {
-      elements = ((Group) reference).getElements();
-    } else {
-      elements = Collections.emptySet();
-    }
-
-    Set<IEObjectDescription> descriptions = newHashSet();
-    Collection<EObject> expandedElements = expandOneOfs(elements);
-    for (EObject element : expandedElements) {
-      IEObjectDescription d = describe(element);
-      if (d != null) {
-        descriptions.add(d);
-      }
-    }
-    return descriptions;
-  }
-
-  private Collection<EObject> expandOneOfs(Collection<? extends EObject> elements) {
-    Collection<EObject> expandedElements = new ArrayList<>(elements.size());
-    for (EObject element : elements) {
-      if (element instanceof OneOf) {
-        expandedElements.addAll(((OneOf) element).getElements());
-      }
-      else {
-        expandedElements.add(element);
-      }
-    }
-    return expandedElements;
-  }
-
-  private IEObjectDescription describe(EObject e) {
-    if (!(e instanceof IndexedElement)) {
-      return null;
-    }
-    String name = options.nameForOption((IndexedElement) e);
-    return create(name, e);
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ModelElementFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ModelElementFinder.java
deleted file mode 100644
index 4520d67..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ModelElementFinder.java
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static java.util.Collections.emptyList;
-import static java.util.Collections.emptySet;
-import static java.util.Collections.unmodifiableSet;
-import static org.eclipse.emf.ecore.util.EcoreUtil.getAllContents;
-
-import com.google.eclipse.protobuf.model.util.Imports;
-import com.google.eclipse.protobuf.model.util.ModelObjects;
-import com.google.eclipse.protobuf.model.util.Packages;
-import com.google.eclipse.protobuf.model.util.Protobufs;
-import com.google.eclipse.protobuf.model.util.Resources;
-import com.google.eclipse.protobuf.protobuf.Group;
-import com.google.eclipse.protobuf.protobuf.Import;
-import com.google.eclipse.protobuf.protobuf.Message;
-import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.eclipse.protobuf.protobuf.Protobuf;
-import com.google.eclipse.protobuf.resource.ResourceSets;
-import com.google.inject.Inject;
-
-import org.eclipse.emf.common.util.TreeIterator;
-import org.eclipse.emf.common.util.URI;
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.emf.ecore.resource.Resource;
-import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.xtext.resource.IEObjectDescription;
-import org.eclipse.xtext.util.OnChangeEvictingCache;
-import org.eclipse.xtext.util.OnChangeEvictingCache.CacheAdapter;
-
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class ModelElementFinder {
-  @Inject private Imports imports;
-  @Inject private ModelObjects modelObjects;
-  @Inject private Packages packages;
-  @Inject private Protobufs protobufs;
-  @Inject private Resources resources;
-  @Inject private ResourceSets resourceSets;
-
-  <T> Collection<IEObjectDescription> find(EObject start, FinderStrategy<T> strategy, T criteria) {
-    Set<IEObjectDescription> descriptions = new HashSet<>();
-    descriptions.addAll(getDescriptionsFromObjectAncestors(start, strategy, criteria));
-    Protobuf root = modelObjects.rootOf(start);
-    descriptions.addAll(getDescriptionsFromAllImports(root, strategy, criteria));
-    return unmodifiableSet(descriptions);
-  }
-
-  private <T> Collection<IEObjectDescription> getDescriptionsFromObjectAncestors(
-      EObject start, FinderStrategy<T> strategy, T criteria) {
-    UniqueDescriptions descriptions = new UniqueDescriptions();
-    EObject current = start.eContainer();
-    while (current != null) {
-      descriptions.addAll(getDescriptionsFromObjectDescendants(current, strategy, criteria, 0));
-      current = current.eContainer();
-    }
-    return descriptions.values();
-  }
-
-  <T> Collection<IEObjectDescription> find(Protobuf start, FinderStrategy<T> strategy, T criteria) {
-    Set<IEObjectDescription> descriptions = new HashSet<>();
-    descriptions.addAll(getDescriptionsFromObjectDescendants(start, strategy, criteria, 0));
-    descriptions.addAll(getDescriptionsFromAllImports(start, strategy, criteria));
-    return unmodifiableSet(descriptions);
-  }
-
-  private <T> Collection<IEObjectDescription> getDescriptionsFromObjectDescendants(
-      EObject start, FinderStrategy<T> strategy, T criteria, int level) {
-    UniqueDescriptions descriptions = new UniqueDescriptions();
-    for (EObject element : start.eContents()) {
-      descriptions.addAll(strategy.local(element, criteria, level));
-      if (element instanceof Message || element instanceof Group) {
-        descriptions.addAll(
-            getDescriptionsFromObjectDescendants(element, strategy, criteria, level + 1));
-      }
-    }
-    return descriptions.values();
-  }
-
-  private <T> Collection<IEObjectDescription> getDescriptionsFromAllImports(
-      Protobuf start, FinderStrategy<T> strategy, T criteria) {
-    List<Import> allImports = protobufs.importsIn(start);
-    if (allImports.isEmpty()) {
-      return emptyList();
-    }
-    ResourceSet resourceSet = start.eResource().getResourceSet();
-    return getDescriptionsFromImports(
-        allImports, modelObjects.packageOf(start), resourceSet, strategy, criteria);
-  }
-
-  private <T> Collection<IEObjectDescription> getDescriptionsFromImports(
-      List<Import> allImports,
-      Package fromImporter,
-      ResourceSet resourceSet,
-      FinderStrategy<T> strategy,
-      T criteria) {
-    Set<IEObjectDescription> descriptions = new HashSet<>();
-    for (Import anImport : allImports) {
-      if (imports.isImportingDescriptor(anImport)) {
-        descriptions.addAll(strategy.inDescriptor(anImport, criteria));
-        continue;
-      }
-      URI resolvedUri = imports.resolvedUriOf(anImport);
-      if (resolvedUri == null) {
-        continue;
-      }
-      Resource imported = resourceSets.findResource(resourceSet, resolvedUri);
-      if (imported == null) {
-        continue;
-      }
-      Protobuf rootOfImported = resources.rootOf(imported);
-      if (!protobufs.hasKnownSyntax(rootOfImported)) {
-        continue;
-      }
-      if (rootOfImported != null) {
-        CacheAdapter cache = new OnChangeEvictingCache().getOrCreate(imported);
-        Set<IEObjectDescription> descriptionsFromImport =
-            getFromCache(cache, resolvedUri, strategy, criteria);
-        if (descriptionsFromImport == null) {
-          descriptionsFromImport = new HashSet<>();
-          descriptionsFromImport.addAll(
-              getDescriptionsFromPublicImports(rootOfImported, strategy, criteria));
-          if (arePackagesRelated(fromImporter, rootOfImported)) {
-            descriptionsFromImport.addAll(
-                getDescriptionsFromObjectDescendants(rootOfImported, strategy, criteria, 0));
-          } else {
-            Package packageOfImported = modelObjects.packageOf(rootOfImported);
-            TreeIterator<Object> contents = getAllContents(imported, true);
-            while (contents.hasNext()) {
-              Object next = contents.next();
-              descriptionsFromImport.addAll(
-                  strategy.imported(fromImporter, packageOfImported, next, criteria));
-            }
-          }
-          putToCache(cache, resolvedUri, strategy, criteria, descriptionsFromImport);
-        }
-        descriptions.addAll(descriptionsFromImport);
-      }
-    }
-    return descriptions;
-  }
-
-  private <T> Collection<IEObjectDescription> getDescriptionsFromPublicImports(
-      Protobuf start, FinderStrategy<T> strategy, T criteria) {
-    if (!protobufs.hasKnownSyntax(start)) {
-      return emptySet();
-    }
-    List<Import> allImports = protobufs.publicImportsIn(start);
-    if (allImports.isEmpty()) {
-      return emptyList();
-    }
-    ResourceSet resourceSet = start.eResource().getResourceSet();
-    return getDescriptionsFromImports(
-        allImports, modelObjects.packageOf(start), resourceSet, strategy, criteria);
-  }
-
-  private <T> @Nullable Set<IEObjectDescription> getFromCache(
-      CacheAdapter cache, URI uri, FinderStrategy<T> strategy, T criteria) {
-    Map<FinderStrategy<T>, Map<T, Set<IEObjectDescription>>> strategyMap = cache.get(uri);
-    if (strategyMap != null) {
-      Map<T, Set<IEObjectDescription>> criteriaMap = strategyMap.get(strategy);
-      if (criteriaMap != null) {
-        return criteriaMap.get(criteria);
-      }
-    }
-    return null;
-  }
-
-  private <T> void putToCache(
-      CacheAdapter cache, URI uri, FinderStrategy<T> strategy, T criteria,
-      Set<IEObjectDescription> descriptions) {
-    Map<FinderStrategy<T>, Map<T, Set<IEObjectDescription>>> strategyMap = cache.get(uri);
-    if (strategyMap == null) {
-      strategyMap = new HashMap<>();
-      cache.set(uri, strategyMap);
-    }
-    Map<T, Set<IEObjectDescription>> criteriaMap = strategyMap.get(strategy);
-    if (criteriaMap == null) {
-      criteriaMap = new HashMap<>();
-      strategyMap.put(strategy, criteriaMap);
-    }
-    criteriaMap.put(criteria, descriptions);
-  }
-
-  private boolean arePackagesRelated(Package aPackage, EObject root) {
-    Package p = modelObjects.packageOf(root);
-    return packages.areRelated(aPackage, p);
-  }
-
-  static interface FinderStrategy<T> {
-    Collection<IEObjectDescription> imported(
-        Package fromImporter, Package fromImported, Object target, T criteria);
-
-    Collection<IEObjectDescription> inDescriptor(Import anImport, T criteria);
-
-    Collection<IEObjectDescription> local(Object target, T criteria, int level);
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
deleted file mode 100644
index 174445f..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NativeOptionDescriptions.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static java.util.Collections.emptyList;
-import static java.util.Collections.unmodifiableList;
-import static org.eclipse.xtext.resource.EObjectDescription.create;
-import static com.google.common.collect.Lists.newArrayList;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.core.resources.IProject;
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.eclipse.protobuf.protobuf.AbstractOption;
-import com.google.eclipse.protobuf.protobuf.MessageField;
-import com.google.eclipse.protobuf.util.EResources;
-import com.google.inject.Inject;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class NativeOptionDescriptions {
-  @Inject private ProtoDescriptorProvider descriptorProvider;
-
-  Collection<IEObjectDescription> sources(AbstractOption option) {
-    IProject project = EResources.getProjectOf(option.eResource());
-    ProtoDescriptor descriptor = descriptorProvider.primaryDescriptor(project);
-    Collection<MessageField> optionSources = descriptor.availableOptionsFor(option.eContainer());
-    if (optionSources.isEmpty()) {
-      return emptyList();
-    }
-    return describe(optionSources);
-  }
-
-  private Collection<IEObjectDescription> describe(Collection<MessageField> fields) {
-    List<IEObjectDescription> descriptions = newArrayList();
-    for (MessageField field : fields) {
-      String name = field.getName();
-      descriptions.add(create(name, field));
-    }
-    return unmodifiableList(descriptions);
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NormalFieldNameFinderStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NormalFieldNameFinderStrategy.java
deleted file mode 100644
index c220a72..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NormalFieldNameFinderStrategy.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (c) 2014 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static com.google.common.collect.Sets.newHashSet;
-import static org.eclipse.xtext.resource.EObjectDescription.create;
-
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableSet;
-import com.google.eclipse.protobuf.model.util.MessageFields;
-import com.google.eclipse.protobuf.protobuf.Group;
-import com.google.eclipse.protobuf.protobuf.IndexedElement;
-import com.google.eclipse.protobuf.protobuf.Message;
-import com.google.eclipse.protobuf.protobuf.MessageField;
-import com.google.eclipse.protobuf.protobuf.OneOf;
-import com.google.inject.Inject;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import java.util.Collection;
-import java.util.Set;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class NormalFieldNameFinderStrategy implements CustomOptionFieldNameFinder.FinderStrategy {
-  @Inject private MessageFields messageFields;
-
-  @Override public Collection<IEObjectDescription> findMessageFields(IndexedElement reference) {
-    Iterable<? extends EObject> elements;
-    if (reference instanceof Group) {
-      elements = ((Group) reference).getElements();
-    } else if (reference instanceof MessageField) {
-      MessageField field = (MessageField) reference;
-      Message fieldType = messageFields.mapEntryTypeOf(field);
-      if (fieldType == null) {
-        fieldType = messageFields.messageTypeOf(field);
-      }
-      elements = fieldType.getElements();
-    } else {
-      elements = null;
-    }
-    return getDescriptions(elements);
-  }
-
-  private Set<IEObjectDescription> getDescriptions(Iterable<? extends EObject> elements) {
-    if (elements == null) {
-      return ImmutableSet.of();
-    }
-    Set<IEObjectDescription> descriptions = newHashSet();
-    for (EObject element : elements) {
-      if (element instanceof MessageField) {
-        String name = ((MessageField) element).getName();
-        descriptions.add(create(name, element));
-      } else if (element instanceof Group) {
-        String name = ((Group) element).getName();
-        if (!Strings.isNullOrEmpty(name)) {
-          descriptions.add(create(name, element));
-        }
-      } else if (element instanceof OneOf) {
-        descriptions.addAll(getDescriptions(((OneOf) element).getElements()));
-      }
-    }
-    return descriptions;
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/PackageIntersectionDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/PackageIntersectionDescriptions.java
deleted file mode 100644
index 65f7e36..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/PackageIntersectionDescriptions.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static java.util.Collections.emptySet;
-
-import static org.eclipse.xtext.resource.EObjectDescription.create;
-
-import static com.google.common.collect.Lists.newArrayList;
-import static com.google.common.collect.Sets.newHashSet;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.naming.IQualifiedNameProvider;
-import org.eclipse.xtext.naming.QualifiedName;
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.eclipse.protobuf.model.util.Packages;
-import com.google.eclipse.protobuf.model.util.QualifiedNames;
-import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.inject.Inject;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class PackageIntersectionDescriptions {
-  @Inject private Packages packages;
-  @Inject private QualifiedNames qualifiedNames;
-  @Inject private IQualifiedNameProvider nameProvider;
-
-  // See issue 161
-  Collection<IEObjectDescription> intersection(Package fromImporter, Package fromImported, EObject e) {
-    if (fromImporter == null || fromImported == null) {
-      return emptySet();
-    }
-    return intersection2(segmentNames(fromImporter), segmentNames(fromImported), e);
-  }
-
-  private List<String> segmentNames(Package aPackage) {
-    return packages.segmentsOf(aPackage);
-  }
-
-  private Collection<IEObjectDescription> intersection2(List<String> packageInImporter, List<String> packageInImported,
-      EObject e) {
-    int n1Count = packageInImporter.size();
-    int n2Count = packageInImported.size();
-    int start = -1;
-    for (int i = 0; (i < n1Count && i < n2Count); i++) {
-      if (!packageInImporter.get(i).equals(packageInImported.get(i))) {
-        start = i;
-        break;
-      }
-    }
-    if (start == 0) {
-      return emptySet(); // no intersection found.
-    }
-    Set<IEObjectDescription> descriptions = newHashSet();
-    QualifiedName qualifiedName = nameProvider.getFullyQualifiedName(e);
-    List<String> segments = newArrayList(qualifiedName.getSegments());
-    for (int i = 0; i < start; i++) {
-      segments.remove(0);
-      QualifiedName newQualifiedName = qualifiedNames.createQualifiedName(segments);
-      descriptions.add(create(newQualifiedName, e));
-    }
-    return descriptions;
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
index 12ce4d4..1fb9d27 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
@@ -9,23 +9,18 @@
 package com.google.eclipse.protobuf.scoping;
 
 import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.OPTION_SOURCE__TARGET;
-import static com.google.eclipse.protobuf.scoping.OptionType.typeOf;
 import static com.google.eclipse.protobuf.util.Encodings.UTF_8;
 import static com.google.eclipse.protobuf.util.Tracer.DEBUG_SCOPING;
 import static com.google.eclipse.protobuf.validation.ProtobufResourceValidator.getScopeProviderTimingCollector;
-import static java.util.Collections.emptySet;
 import static java.util.Collections.singletonMap;
 import static org.eclipse.emf.ecore.resource.ContentHandler.UNSPECIFIED_CONTENT_TYPE;
 import static org.eclipse.xtext.EcoreUtil2.resolveLazyCrossReferences;
 import static org.eclipse.xtext.resource.XtextResource.OPTION_ENCODING;
 import static org.eclipse.xtext.util.CancelIndicator.NullImpl;
 
-import com.google.eclipse.protobuf.model.util.ModelObjects;
 import com.google.eclipse.protobuf.naming.ProtobufQualifiedNameConverter;
 import com.google.eclipse.protobuf.naming.ProtobufQualifiedNameProvider;
 import com.google.eclipse.protobuf.preferences.general.PreferenceNames;
-import com.google.eclipse.protobuf.protobuf.AbstractCustomOption;
-import com.google.eclipse.protobuf.protobuf.AbstractOption;
 import com.google.eclipse.protobuf.protobuf.ComplexType;
 import com.google.eclipse.protobuf.protobuf.ComplexTypeLink;
 import com.google.eclipse.protobuf.protobuf.ComplexValue;
@@ -34,7 +29,6 @@
 import com.google.eclipse.protobuf.protobuf.CustomOption;
 import com.google.eclipse.protobuf.protobuf.DefaultValueFieldOption;
 import com.google.eclipse.protobuf.protobuf.Enum;
-import com.google.eclipse.protobuf.protobuf.ExtensibleType;
 import com.google.eclipse.protobuf.protobuf.FieldName;
 import com.google.eclipse.protobuf.protobuf.FieldOption;
 import com.google.eclipse.protobuf.protobuf.Group;
@@ -52,7 +46,6 @@
 import com.google.eclipse.protobuf.protobuf.Protobuf;
 import com.google.eclipse.protobuf.protobuf.Rpc;
 import com.google.eclipse.protobuf.protobuf.Stream;
-import com.google.eclipse.protobuf.protobuf.TypeExtension;
 import com.google.eclipse.protobuf.protobuf.TypeLink;
 import com.google.eclipse.protobuf.protobuf.ValueField;
 import com.google.eclipse.protobuf.util.EResources;
@@ -83,25 +76,13 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-import java.util.Collection;
 
 /**
  * A scope provider for the Protobuf language.
  *
  * @author atrookey@google.com (Alexander Rookey)
  */
-public class ProtobufScopeProvider extends AbstractDeclarativeScopeProvider
-    implements ScopeProvider {
-  @Inject private ComplexTypeFinderStrategy complexTypeFinderDelegate;
-  @Inject private CustomOptionFieldFinder customOptionFieldFinder;
-  @Inject private CustomOptionFieldNameFinder customOptionFieldNameFinder;
-  @Inject private CustomOptionFinderStrategy customOptionFinderDelegate;
-  @Inject private ExtensionFieldFinderStrategy extensionFieldFinderDelegate;
-  @Inject private ExtensionFieldNameFinderStrategy extensionFieldNameFinderDelegate;
-  @Inject private MessageFieldFinderStrategy messageFieldFinderDelegate;
-  @Inject private ModelElementFinder modelElementFinder;
-  @Inject private ModelObjects modelObjects;
-  @Inject private NormalFieldNameFinderStrategy normalFieldNameFinderDelegate;
+public class ProtobufScopeProvider extends AbstractDeclarativeScopeProvider {
   @Inject private LinkingHelper linkingHelper;
   @Inject private IPreferenceStoreAccess storeAccess;
   @Inject private IUriResolver uriResolver;
@@ -141,10 +122,6 @@
     return getOptionType(context.eContainer());
   }
 
-  private Collection<IEObjectDescription> allMessages(Protobuf root) {
-    return modelElementFinder.find(root, complexTypeFinderDelegate, Message.class);
-  }
-
   /**
    * Returns the InputStream associated with the resource at location {@code descriptorLocation}.
    */
@@ -211,7 +188,7 @@
     return (ProtobufImportedNamespaceAwareLocalScopeProvider) super.getDelegate();
   }
 
-  /** Returns the local scope provider. */
+  /** Returns the global scope provider. */
   private ProtobufImportUriGlobalScopeProvider getGlobalScopeProvider() {
     return getLocalScopeProvider().getGlobalScopeProvider();
   }
@@ -307,60 +284,6 @@
     return retval;
   }
 
-  @Override
-  public Collection<IEObjectDescription> potentialComplexTypesFor(MessageField field) {
-    return modelElementFinder.find(field, complexTypeFinderDelegate, ComplexType.class);
-  }
-
-  @Override
-  public Collection<IEObjectDescription> potentialExtensibleTypesFor(TypeExtension extension) {
-    Protobuf root = modelObjects.rootOf(extension);
-    return modelElementFinder.find(root, complexTypeFinderDelegate, ExtensibleType.class);
-  }
-
-  @Override
-  public Collection<IEObjectDescription> potentialExtensionFieldNames(ComplexValue value) {
-    return customOptionFieldNameFinder.findFieldNamesSources(
-        value, extensionFieldNameFinderDelegate);
-  }
-
-  @Override
-  public Collection<IEObjectDescription> potentialExtensionFieldsFor(AbstractCustomOption option) {
-    return customOptionFieldFinder.findOptionFields(option, extensionFieldFinderDelegate);
-  }
-
-  @Override
-  public Collection<IEObjectDescription> potentialMessageFieldsFor(AbstractCustomOption option) {
-    return customOptionFieldFinder.findOptionFields(option, messageFieldFinderDelegate);
-  }
-
-  @Override
-  public Collection<IEObjectDescription> potentialMessagesFor(Rpc rpc) {
-    Protobuf root = modelObjects.rootOf(rpc);
-    return allMessages(root);
-  }
-
-  @Override
-  public Collection<IEObjectDescription> potentialMessagesFor(Stream stream) {
-    Protobuf root = modelObjects.rootOf(stream);
-    return allMessages(root);
-  }
-
-  @Override
-  public Collection<IEObjectDescription> potentialNormalFieldNames(ComplexValue value) {
-    return customOptionFieldNameFinder.findFieldNamesSources(value, normalFieldNameFinderDelegate);
-  }
-
-  @Override
-  public Collection<IEObjectDescription> potentialSourcesFor(AbstractCustomOption option) {
-    OptionType optionType = typeOf((AbstractOption) option);
-    Collection<IEObjectDescription> descriptions = emptySet();
-    if (optionType != null) {
-      descriptions = modelElementFinder.find(option, customOptionFinderDelegate, optionType);
-    }
-    return descriptions;
-  }
-
   /**
    * Recursively scopes the {@code FieldName} starting with the {@code OptionSource}.
    *
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/QualifiedNameDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/QualifiedNameDescriptions.java
deleted file mode 100644
index 65528f4..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/QualifiedNameDescriptions.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static java.util.Collections.unmodifiableList;
-
-import static org.eclipse.xtext.resource.EObjectDescription.create;
-
-import static com.google.common.collect.Lists.newArrayList;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.naming.QualifiedName;
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.eclipse.protobuf.model.util.QualifiedNames;
-import com.google.eclipse.protobuf.naming.IProtobufQualifiedNameProvider;
-import com.google.eclipse.protobuf.naming.NamingStrategy;
-import com.google.inject.Inject;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class QualifiedNameDescriptions {
-  @Inject private IProtobufQualifiedNameProvider nameProvider;
-  @Inject private QualifiedNames qualifiedNames;
-
-  Collection<IEObjectDescription> qualifiedNames(EObject e, NamingStrategy namingStrategy) {
-    QualifiedName fqn = nameProvider.getFullyQualifiedName(e, namingStrategy);
-    return allQualifiedNames(e, fqn);
-  }
-
-  private Collection<IEObjectDescription> allQualifiedNames(EObject e, QualifiedName fqn) {
-    List<IEObjectDescription> descriptions = newArrayList();
-    descriptions.add(create(fqn, e));
-    descriptions.add(create(qualifiedNames.addLeadingDot(fqn), e));
-    return unmodifiableList(descriptions);
-  }
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ScopeProvider.java
deleted file mode 100644
index a568949..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ScopeProvider.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import java.util.Collection;
-
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.eclipse.protobuf.protobuf.AbstractCustomOption;
-import com.google.eclipse.protobuf.protobuf.ComplexValue;
-import com.google.eclipse.protobuf.protobuf.MessageField;
-import com.google.eclipse.protobuf.protobuf.Rpc;
-import com.google.eclipse.protobuf.protobuf.Stream;
-import com.google.eclipse.protobuf.protobuf.TypeExtension;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-public interface ScopeProvider {
-  Collection<IEObjectDescription> potentialComplexTypesFor(MessageField field);
-
-  Collection<IEObjectDescription> potentialExtensibleTypesFor(TypeExtension extension);
-
-  Collection<IEObjectDescription> potentialMessagesFor(Rpc rpc);
-
-  Collection<IEObjectDescription> potentialMessagesFor(Stream stream);
-
-  Collection<IEObjectDescription> potentialSourcesFor(AbstractCustomOption option);
-
-  Collection<IEObjectDescription> potentialMessageFieldsFor(AbstractCustomOption option);
-
-  Collection<IEObjectDescription> potentialExtensionFieldsFor(AbstractCustomOption option);
-
-  Collection<IEObjectDescription> potentialNormalFieldNames(ComplexValue value);
-
-  Collection<IEObjectDescription> potentialExtensionFieldNames(ComplexValue value);
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/UniqueDescriptions.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/UniqueDescriptions.java
deleted file mode 100644
index c4ab188..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/UniqueDescriptions.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (c) 2012 Google Inc.
- *
- * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
- * Public License v1.0 which accompanies this distribution, and is available at
- *
- * http://www.eclipse.org/legal/epl-v10.html
- */
-package com.google.eclipse.protobuf.scoping;
-
-import static com.google.common.collect.Maps.newHashMap;
-
-import java.util.Collection;
-import java.util.Map;
-
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-/**
- * @author alruiz@google.com (Alex Ruiz)
- */
-class UniqueDescriptions {
-
-  private final Map<String, IEObjectDescription> descriptionsByName = newHashMap();
-
-  void addAll(Collection<IEObjectDescription> descriptions) {
-    for (IEObjectDescription description : descriptions) {
-      String name = description.getName().toString();
-      if (!descriptionsByName.containsKey(name)) {
-        descriptionsByName.put(name, description);
-      }
-    }
-  }
-
-  Collection<IEObjectDescription> values() {
-    return descriptionsByName.values();
-  }
-}