Bug 502843 Add "Hide java.lang.Object Methods" to Quick Outline
apply review comments
Change-Id: I6251f69bac55442a2515cf8e531cee8e2d099d77
Signed-off-by: Björn Michael <b.michael@gmx.de>
diff --git a/org.eclipse.jdt.ui/plugin.properties b/org.eclipse.jdt.ui/plugin.properties
index 9a40b70..8299cf0 100644
--- a/org.eclipse.jdt.ui/plugin.properties
+++ b/org.eclipse.jdt.ui/plugin.properties
@@ -589,6 +589,9 @@
HideOutputFolder.description= Hides Java output folders of the Java projects. A Java output folder is where the compiled Java classes are.
HideJavaOutputFolder.label= Java output folders
+HideJavaLangObjectMembersFilter.label=Inherited java.lang.Object members
+HideJavaLangObjectMembersFilter.description=Hides all inherited members from java.lang.Object
+
sourceHover= Source
sourceHoverDescription= Shows the source of the selected element, or the source near the matching opening curly brace.
javadocHover= Javadoc
diff --git a/org.eclipse.jdt.ui/plugin.xml b/org.eclipse.jdt.ui/plugin.xml
index c1a39cb..1b8fcae 100644
--- a/org.eclipse.jdt.ui/plugin.xml
+++ b/org.eclipse.jdt.ui/plugin.xml
@@ -5290,6 +5290,14 @@
class="org.eclipse.jdt.internal.ui.filters.SyntheticMembersFilter"
id="org.eclipse.jdt.internal.ui.text.QuickOutline.SyntheticMembersFilter">
</filter>
+ <filter
+ targetId="org.eclipse.jdt.internal.ui.text.QuickOutline"
+ name="%HideJavaLangObjectMembersFilter.label"
+ enabled="false"
+ description="%HideJavaLangObjectMembersFilter.description"
+ class="org.eclipse.jdt.internal.ui.filters.JavaLangObjectMembersFilter"
+ id="org.eclipse.jdt.internal.ui.text.QuickOutline.JavaLangObjectMembersFilter">
+ </filter>
<!-- Quick Hierarchy -->
<filter
targetId="org.eclipse.jdt.internal.ui.typehierarchy.QuickHierarchy"
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/JavaLangObjectMembersFilter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/JavaLangObjectMembersFilter.java
new file mode 100644
index 0000000..a9149d7
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/filters/JavaLangObjectMembersFilter.java
@@ -0,0 +1,71 @@
+/*******************************************************************************
+ * Copyright (c) 2016 Björn Michael and others.
+ * 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
+ *
+ * Contributors:
+ * Björn Michael <b.michael@gmx.de> - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.filters;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IMember;
+import org.eclipse.jdt.core.IType;
+import org.eclipse.jdt.core.ITypeRoot;
+
+/**
+ * Filters out members (method and fields) of {@link java.lang.Object}.
+ *
+ * @author Björn Michael
+ * @since 3.13
+ */
+public class JavaLangObjectMembersFilter extends ViewerFilter {
+
+ private static final String JAVA_LANG_OBJECT_CLASS_NAME= Object.class.getName();
+
+ /**
+ * Creates a new filter instance.
+ */
+ public JavaLangObjectMembersFilter() { // instantiated by org.eclipse.jdt.ui.javaElementFilters extension
+ super();
+ }
+
+ @Override
+ public boolean select(final Viewer viewer, final Object parentElement, final Object element) {
+ if (parentElement instanceof IType) {
+ if (JAVA_LANG_OBJECT_CLASS_NAME.equals(((IType) parentElement).getFullyQualifiedName())) {
+ return true; // java.lang.Object itself is shown; don't filter it out
+ }
+ }
+
+ if (parentElement instanceof ITypeRoot) {
+ IType primaryType= ((ITypeRoot) parentElement).findPrimaryType();
+ if (primaryType != null && JAVA_LANG_OBJECT_CLASS_NAME.equals(primaryType.getFullyQualifiedName())) {
+ return true; // top-level type is java.lang.Object itself; don't filter it out
+ }
+ }
+
+ if (element instanceof IMember) {
+ IMember member= (IMember) element;
+ switch (member.getElementType()) {
+ case IJavaElement.FIELD: // may be in future versions of JDK
+ case IJavaElement.METHOD:
+ IType declaringType= member.getDeclaringType();
+ if (declaringType != null) {
+ String fullyQualifiedName= declaringType.getFullyQualifiedName();
+ if (JAVA_LANG_OBJECT_CLASS_NAME.equals(fullyQualifiedName)) {
+ return false;
+ }
+ }
+ }
+ }
+
+ return true;
+ }
+
+}