blob: 376cc9fca92347bad551bf60e0170ba084b4af1a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2012 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.debug.ui.variables;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
import org.eclipse.jdt.debug.core.IJavaVariable;
import org.eclipse.jdt.internal.debug.ui.IJDIPreferencesConstants;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jface.preference.IPreferenceStore;
/**
* Provides static methods for filtering the content in Java views. By filtering in the
* content provider rather than in the model the UI does not get updated until after the
* filtering is done.
*
* @since 3.4
* @see JavaVariableContentProvider
* @see JavaExpressionContentProvider
* @see JavaStackFrameContentProvider
*/
public class JavaContentProviderFilter {
/**
* Filters the given array of variables based on preference settings. Currently
* removes static variables and constants if the appropriate preference is set.
* @param variables array of variables to filter
* @param context the current view's context, required because the preferences are view specific
* @return array of filtered variables
* @throws DebugException
*/
public static Object[] filterVariables(Object[] variables, IPresentationContext context) throws DebugException {
boolean filterStatics = !includeStatic(context);
boolean filterConstants = !includeConstants(context);
if (filterStatics || filterConstants) {
List<Object> keep = new ArrayList<>(variables.length);
for (Object variable : variables) {
boolean filter = false;
if (variable instanceof IJavaVariable) {
IJavaVariable var = (IJavaVariable) variable;
if (var.isStatic()){
if (var.isFinal()){
filter = filterConstants;
} else {
filter = filterStatics;
}
}
}
if (!filter) {
keep.add(variable);
}
}
return keep.toArray(new Object[keep.size()]);
}
return variables;
}
/**
* Returns whether static variables should be displayed in the view
* identified by the given presentation context. Checks for a preference
* that is specific to the presentation context.
*
* @param context the context of the view being displayed
* @return whether static variable should be displayed
*/
private static boolean includeStatic(IPresentationContext context){
IPreferenceStore store = JDIDebugUIPlugin.getDefault().getPreferenceStore();
String statics = context.getId() + "." + IJDIPreferencesConstants.PREF_SHOW_STATIC_VARIABLES; //$NON-NLS-1$
return store.getBoolean(statics);
}
/**
* Returns whether constants should be displayed in the view
* identified by the given presentation context. Checks for a preference
* that is specific to the presentation context.
*
* @param context the context of the view being displayed
* @return whether constants should be displayed
*/
private static boolean includeConstants(IPresentationContext context){
IPreferenceStore store = JDIDebugUIPlugin.getDefault().getPreferenceStore();
String constants = context.getId() + "." + IJDIPreferencesConstants.PREF_SHOW_CONSTANTS; //$NON-NLS-1$
return store.getBoolean(constants);
}
}