diff --git a/com.google.eclipse.protobuf.ui/plugin.xml b/com.google.eclipse.protobuf.ui/plugin.xml
index ffd462d..691a6d6 100644
--- a/com.google.eclipse.protobuf.ui/plugin.xml
+++ b/com.google.eclipse.protobuf.ui/plugin.xml
@@ -6,10 +6,12 @@
       class="com.google.eclipse.protobuf.ui.ProtobufExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
       contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
       default="true"
-      extensions="proto,protodevel"
       icon="icons/pb.gif"
       id="com.google.eclipse.protobuf.Protobuf"
       name="%editor.name">
+       <contentTypeBinding
+             contentTypeId="com.google.eclipse.protobuf.Protobuf">
+       </contentTypeBinding>
     </editor>
   </extension>
   <extension point="org.eclipse.ui.handlers">
@@ -296,4 +298,4 @@
       </command>
     </menuContribution>
   </extension>
-</plugin>
\ No newline at end of file
+</plugin>
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
index c99cd33..e01066f 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/ProtobufUiModule.java
@@ -19,6 +19,7 @@
 import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
 import org.eclipse.xtext.documentation.IEObjectDocumentationProvider;
 import org.eclipse.xtext.parser.IParser;
+import org.eclipse.xtext.resource.IResourceServiceProvider;
 import org.eclipse.xtext.ui.LanguageSpecific;
 import org.eclipse.xtext.ui.editor.*;
 import org.eclipse.xtext.ui.editor.model.XtextDocumentProvider;
@@ -28,6 +29,7 @@
 import org.eclipse.xtext.ui.editor.syntaxcoloring.*;
 import org.eclipse.xtext.ui.validation.IResourceUIValidatorExtension;
 
+import com.google.eclipse.protobuf.resource.IResourceVerifier;
 import com.google.eclipse.protobuf.scoping.IFileUriResolver;
 import com.google.eclipse.protobuf.ui.builder.nature.AutoAddNatureEditorCallback;
 import com.google.eclipse.protobuf.ui.documentation.ProtobufDocumentationProvider;
@@ -40,12 +42,14 @@
 import com.google.eclipse.protobuf.ui.outline.*;
 import com.google.eclipse.protobuf.ui.parser.PreferenceDrivenProtobufParser;
 import com.google.eclipse.protobuf.ui.preferences.compiler.CompilerPreferences;
+import com.google.eclipse.protobuf.ui.preferences.editor.ignore.IgnoredExtensionsPreferences;
 import com.google.eclipse.protobuf.ui.preferences.editor.numerictag.NumericTagPreferences;
 import com.google.eclipse.protobuf.ui.preferences.editor.save.SaveActionsPreferences;
 import com.google.eclipse.protobuf.ui.preferences.general.GeneralPreferences;
 import com.google.eclipse.protobuf.ui.preferences.misc.MiscellaneousPreferences;
 import com.google.eclipse.protobuf.ui.preferences.paths.PathsPreferences;
 import com.google.eclipse.protobuf.ui.quickfix.ProtobufQuickAssistProcessor;
+import com.google.eclipse.protobuf.ui.resource.*;
 import com.google.eclipse.protobuf.ui.scoping.FileUriResolver;
 import com.google.eclipse.protobuf.ui.validation.*;
 import com.google.inject.Binder;
@@ -91,6 +95,14 @@
     return ProtobufReconciler.class;
   }
 
+  public Class<? extends IResourceServiceProvider> bindIResourceServiceProvider() {
+    return ProtobufServiceProvider.class;
+  }
+
+  public Class<? extends IResourceVerifier> bindIResourceVerifier() {
+    return ResourceVerifier.class;
+  }
+
   public Class<? extends IResourceUIValidatorExtension> bindIResourceUIValidatorExtension() {
     return ProtobufResourceUIValidatorExtension.class;
   }
@@ -129,6 +141,7 @@
   public void configurePreferencesInitializers(Binder binder) {
     configurePreferenceInitializer(binder, "compilerPreferences", CompilerPreferences.Initializer.class);
     configurePreferenceInitializer(binder, "generalPreferences", GeneralPreferences.Initializer.class);
+    configurePreferenceInitializer(binder, "ignoredExtensions", IgnoredExtensionsPreferences.Initializer.class);
     configurePreferenceInitializer(binder, "numericTagPreferences", NumericTagPreferences.Initializer.class);
     configurePreferenceInitializer(binder, "miscellaneousPreferences", MiscellaneousPreferences.Initializer.class);
     configurePreferenceInitializer(binder, "pathsPreferences", PathsPreferences.Initializer.class);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
index 6d3eaa9..14bdda8 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/spelling/ProtobufSpelling.java
@@ -17,6 +17,7 @@
 import org.eclipse.jface.text.source.*;
 import org.eclipse.ui.texteditor.spelling.*;
 import org.eclipse.xtext.nodemodel.*;
+import org.eclipse.xtext.parser.IParseResult;
 import org.eclipse.xtext.resource.XtextResource;
 import org.eclipse.xtext.ui.editor.model.XtextDocument;
 import org.eclipse.xtext.util.concurrent.IUnitOfWork;
@@ -51,7 +52,10 @@
   private void removeUnwantedAnnotations(final IAnnotationModel model) {
     xtextDocument().readOnly(new IUnitOfWork.Void<XtextResource>() {
       @Override public void process(XtextResource resource) throws Exception {
-        removeUnwantedAnnotations(resource.getParseResult().getRootNode(), model);
+        IParseResult parseResult = resource.getParseResult();
+        if (parseResult != null) {
+          removeUnwantedAnnotations(parseResult.getRootNode(), model);
+        }
       }
     });
   }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/ignore/IgnoredExtensionsPreferences.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/ignore/IgnoredExtensionsPreferences.java
new file mode 100644
index 0000000..bc4e954
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/ignore/IgnoredExtensionsPreferences.java
@@ -0,0 +1,38 @@
+/*
+ * 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.ui.preferences.editor.ignore;
+
+import static com.google.eclipse.protobuf.ui.preferences.editor.ignore.PreferenceNames.IGNORED_EXTENSIONS;
+import static com.google.eclipse.protobuf.ui.util.CommaSeparatedValues.splitCsv;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.xtext.ui.editor.preferences.*;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class IgnoredExtensionsPreferences {
+  private final IPreferenceStore store;
+
+  public IgnoredExtensionsPreferences(IPreferenceStoreAccess storeAccess) {
+    store = storeAccess.getWritablePreferenceStore();
+  }
+
+  public String[] extensions() {
+    String value = store.getString(IGNORED_EXTENSIONS);
+    return splitCsv(value);
+  }
+
+  public static class Initializer implements IPreferenceStoreInitializer {
+    @Override public void initialize(IPreferenceStoreAccess storeAccess) {
+      IPreferenceStore store = storeAccess.getWritablePreferenceStore();
+      store.setDefault(IGNORED_EXTENSIONS, ".ascii.proto,.binary.proto,.xml.proto");
+    }
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/ignore/PreferenceNames.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/ignore/PreferenceNames.java
new file mode 100644
index 0000000..4bb7ed2
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/editor/ignore/PreferenceNames.java
@@ -0,0 +1,18 @@
+/*
+ * 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.ui.preferences.editor.ignore;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+final class PreferenceNames {
+  static final String IGNORED_EXTENSIONS = "ignored.extensions";
+
+  private PreferenceNames() {}
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/ProtobufServiceProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/ProtobufServiceProvider.java
new file mode 100644
index 0000000..72649d0
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/ProtobufServiceProvider.java
@@ -0,0 +1,29 @@
+/*
+ * 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.ui.resource;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.xtext.resource.impl.DefaultResourceServiceProvider;
+
+import com.google.eclipse.protobuf.resource.IResourceVerifier;
+import com.google.inject.Inject;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ProtobufServiceProvider extends DefaultResourceServiceProvider {
+  @Inject private IResourceVerifier resourceVerifier;
+
+  @Override public boolean canHandle(URI uri) {
+    if (!super.canHandle(uri)) {
+      return false;
+    }
+    return !resourceVerifier.shouldIgnore(uri);
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/ResourceVerifier.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/ResourceVerifier.java
new file mode 100644
index 0000000..d520251
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/ResourceVerifier.java
@@ -0,0 +1,38 @@
+/*
+ * 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.ui.resource;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreAccess;
+
+import com.google.eclipse.protobuf.resource.IResourceVerifier;
+import com.google.eclipse.protobuf.ui.preferences.editor.ignore.IgnoredExtensionsPreferences;
+import com.google.inject.Inject;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class ResourceVerifier implements IResourceVerifier {
+  private final String[] extensions;
+
+  @Inject public ResourceVerifier(IPreferenceStoreAccess storeAccess) {
+    IgnoredExtensionsPreferences preferences = new IgnoredExtensionsPreferences(storeAccess);
+    extensions = preferences.extensions();
+  }
+
+  @Override public boolean shouldIgnore(URI uri) {
+    String fileName = uri.lastSegment();
+    for (String extension : extensions) {
+      if (fileName.endsWith(extension)) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufValidation.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufValidation.java
index eca5199..a021fd8 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufValidation.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/validation/ProtobufValidation.java
@@ -15,6 +15,7 @@
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.xtext.parser.IParseResult;
 import org.eclipse.xtext.resource.XtextResource;
 import org.eclipse.xtext.resource.impl.ListBasedDiagnosticConsumer;
 import org.eclipse.xtext.ui.editor.XtextEditor;
@@ -59,7 +60,11 @@
   }
 
   private static EObject rootOf(XtextResource resource) {
-    return resource == null ? null : resource.getParseResult().getRootASTElement();
+    if (resource == null) {
+      return null;
+    }
+    IParseResult parseResult = resource.getParseResult();
+    return parseResult == null ? null : parseResult.getRootASTElement();
   }
 
   private static void resetUriInImports(EObject root) {
diff --git a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
index d306d0f..caafc24 100644
--- a/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
+++ b/com.google.eclipse.protobuf/META-INF/MANIFEST.MF
@@ -33,7 +33,6 @@
  com.google.eclipse.protobuf.protobuf.impl,
  com.google.eclipse.protobuf.protobuf.util,
  com.google.eclipse.protobuf.resource,
- com.google.eclipse.protobuf.resource.filter,
  com.google.eclipse.protobuf.scoping,
  com.google.eclipse.protobuf.serializer,
  com.google.eclipse.protobuf.services,
diff --git a/com.google.eclipse.protobuf/plugin.xml b/com.google.eclipse.protobuf/plugin.xml
index abdcd04..ded8b9d 100644
--- a/com.google.eclipse.protobuf/plugin.xml
+++ b/com.google.eclipse.protobuf/plugin.xml
@@ -11,4 +11,15 @@
       class="com.google.eclipse.protobuf.protobuf.ProtobufPackage"
       genModel="com/google/eclipse/protobuf/Protobuf.genmodel" />
   </extension>
+  <extension
+        point="org.eclipse.core.contenttype.contentTypes">
+     <content-type
+           base-type="org.eclipse.core.runtime.text"
+           describer="org.eclipse.core.internal.content.TextContentDescriber"
+           file-extensions="proto,protodevel"
+           id="com.google.eclipse.protobuf.Protobuf"
+           name="Protocol Buffer"
+           priority="high">
+     </content-type>
+  </extension>
 </plugin>
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
index 65478d6..e9b73d3 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/ProtobufRuntimeModule.java
@@ -8,14 +8,6 @@
  */
 package com.google.eclipse.protobuf;
 
-import com.google.eclipse.protobuf.conversion.ProtobufTerminalConverters;
-import com.google.eclipse.protobuf.linking.ProtobufResource;
-import com.google.eclipse.protobuf.naming.*;
-import com.google.eclipse.protobuf.resource.ResourceServiceProvider;
-import com.google.eclipse.protobuf.scoping.*;
-import com.google.eclipse.protobuf.validation.*;
-import com.google.inject.Binder;
-
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.xtext.conversion.IValueConverterService;
 import org.eclipse.xtext.naming.*;
@@ -24,12 +16,20 @@
 import org.eclipse.xtext.scoping.impl.ImportUriResolver;
 import org.eclipse.xtext.validation.IResourceValidator;
 
+import com.google.eclipse.protobuf.conversion.ProtobufTerminalConverters;
+import com.google.eclipse.protobuf.linking.ProtobufResource;
+import com.google.eclipse.protobuf.naming.*;
+import com.google.eclipse.protobuf.resource.GlobalResourceServiceProvider;
+import com.google.eclipse.protobuf.scoping.*;
+import com.google.eclipse.protobuf.validation.*;
+import com.google.inject.Binder;
+
 /**
  * Use this class to register components to be used at runtime / without the Equinox extension registry.
  */
 public class ProtobufRuntimeModule extends AbstractProtobufRuntimeModule {
   public Class<? extends IGlobalServiceProvider> bindIGlobalServiceProvider() {
-    return ResourceServiceProvider.class;
+    return GlobalResourceServiceProvider.class;
   }
 
   public Class<? extends ImportUriResolver> bindImportUriResolver() {
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/linking/ProtobufResource.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/linking/ProtobufResource.java
index b1c48c9..670b02b 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/linking/ProtobufResource.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/linking/ProtobufResource.java
@@ -8,18 +8,33 @@
  */
 package com.google.eclipse.protobuf.linking;
 
+import java.io.*;
+import java.util.Map;
+
 import org.eclipse.emf.ecore.*;
 import org.eclipse.xtext.diagnostics.DiagnosticMessage;
 import org.eclipse.xtext.linking.lazy.LazyLinkingResource;
 import org.eclipse.xtext.nodemodel.INode;
 import org.eclipse.xtext.util.Triple;
 
+import com.google.eclipse.protobuf.resource.IResourceVerifier;
+import com.google.inject.Inject;
+
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufResource extends LazyLinkingResource {
+  @Inject private IResourceVerifier resourceVerifier;
+
   @Override
   protected ProtobufDiagnostic createDiagnostic(Triple<EObject, EReference, INode> t, DiagnosticMessage message) {
     return new ProtobufDiagnostic(message.getIssueCode(), message.getIssueData(), message.getMessage(), t.getThird());
   }
+
+  @Override protected void doLoad(InputStream inputStream, Map<?, ?> options) throws IOException {
+    if (resourceVerifier.shouldIgnore(uri)) {
+      return;
+    }
+    super.doLoad(inputStream, options);
+  }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/ResourceServiceProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/GlobalResourceServiceProvider.java
similarity index 85%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/ResourceServiceProvider.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/GlobalResourceServiceProvider.java
index cf59dc9..db0cc6e 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/ResourceServiceProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/GlobalResourceServiceProvider.java
@@ -20,8 +20,8 @@
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class ResourceServiceProvider extends ResourceServiceProviderImpl {
-  @Inject public ResourceServiceProvider(Registry registry, IResourceServiceProvider provider) {
+public class GlobalResourceServiceProvider extends ResourceServiceProviderImpl {
+  @Inject public GlobalResourceServiceProvider(Registry registry, IResourceServiceProvider provider) {
     super(registry, provider);
   }
 
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/IResourceVerifier.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/IResourceVerifier.java
new file mode 100644
index 0000000..637a592
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/IResourceVerifier.java
@@ -0,0 +1,29 @@
+/*
+ * 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.resource;
+
+import org.eclipse.emf.common.util.URI;
+
+import com.google.inject.ImplementedBy;
+
+/**
+ * Indicates whether the resource should be parsed and validated.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@ImplementedBy(IResourceVerifier.ResourceVerifier.class)
+public interface IResourceVerifier {
+  boolean shouldIgnore(URI uri);
+
+  class ResourceVerifier implements IResourceVerifier {
+    @Override public boolean shouldIgnore(URI uri) {
+      return false;
+    }
+  }
+}
\ No newline at end of file
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/filter/MatchingQualifiedNameAndTypeFilter.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/filter/MatchingQualifiedNameAndTypeFilter.java
deleted file mode 100644
index 3bdac63..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/resource/filter/MatchingQualifiedNameAndTypeFilter.java
+++ /dev/null
@@ -1,51 +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.resource.filter;
-
-import java.util.regex.Pattern;
-
-import org.eclipse.emf.ecore.EClass;
-import org.eclipse.xtext.naming.QualifiedName;
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.common.base.Predicate;
-
-/**
- * Indicates whether the qualified name and {@code EClass} of a <code>{@link IEObjectDescription}</code> match the given
- * pattern and type, respectively.
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public class MatchingQualifiedNameAndTypeFilter implements Predicate<IEObjectDescription> {
-  private final Pattern pattern;
-  private final EClass type;
-
-  /**
-   * Creates a new <code>{@link MatchingQualifiedNameAndTypeFilter}</code>.
-   * @param pattern the pattern that qualified names should match.
-   * @param type the type of model object to match.
-   * @return the created filter.
-   */
-  public static MatchingQualifiedNameAndTypeFilter matchingQualifiedNameAndType(Pattern pattern, EClass type) {
-    return new MatchingQualifiedNameAndTypeFilter(pattern, type);
-  }
-
-  private MatchingQualifiedNameAndTypeFilter(Pattern pattern, EClass type) {
-    this.pattern = pattern;
-    this.type = type;
-  }
-
-  @Override public boolean apply(IEObjectDescription input) {
-    if (!type.equals(input.getEClass())) {
-      return false;
-    }
-    QualifiedName qualifiedName = input.getQualifiedName();
-    return pattern.matcher(qualifiedName.toString()).matches();
-  }
-}
