/*
* Copyright 2003-2009 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.codehaus.groovy.eclipse.debug.ui;
import org.codehaus.groovy.eclipse.GroovyPlugin;
import org.codehaus.groovy.eclipse.core.preferences.PreferenceConstants;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.internal.ui.viewers.model.provisional.ILabelUpdate;
import org.eclipse.jdt.debug.core.IJavaStackFrame;
import org.eclipse.jdt.internal.debug.ui.variables.JavaStackFrameLabelProvider;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.graphics.RGB;
/**
*
* @author Andrew Eisenberg
* @created Jan 27, 2010
*/
class GroovyJavaStackFrameLabelProvider extends JavaStackFrameLabelProvider implements IPropertyChangeListener {
private boolean isEnabled;
private String[] filteredList;
private IPreferenceStore preferenceStore;
public GroovyJavaStackFrameLabelProvider() {
preferenceStore = GroovyPlugin.getDefault().getPreferenceStore();
isEnabled = preferenceStore.getBoolean(PreferenceConstants.GROOVY_DEBUG_FILTER_STACK);
filteredList = computeFilteredList();
}
private String[] computeFilteredList() {
String filter = preferenceStore.getString(PreferenceConstants.GROOVY_DEBUG_FILTER_LIST);
if (filter != null) {
return filter.split(",");
} else {
return new String[0];
}
}
@Override
protected void retrieveLabel(ILabelUpdate update) throws CoreException {
super.retrieveLabel(update);
if (isEnabled && !update.isCanceled()) {
Object element = update.getElement();
if (element instanceof IJavaStackFrame) {
IJavaStackFrame frame = (IJavaStackFrame) element;
if (isFiltered(frame.getDeclaringTypeName())) {
try {
update.setForeground(new RGB(200, 200, 200), 0);
} catch (ArrayIndexOutOfBoundsException e) {
// ignore, there are no columns in this LabelUpdate
} catch (NullPointerException e) {
// ignore, the columns are null
}
}
}
}
}
private boolean isFiltered(String qualifiedName) {
for (String filter : filteredList) {
if (qualifiedName.startsWith(filter)) {
return true;
}
}
return false;
}
public void propertyChange(PropertyChangeEvent event) {
if (PreferenceConstants.GROOVY_DEBUG_FILTER_STACK.equals(event.getProperty())) {
isEnabled = preferenceStore.getBoolean(PreferenceConstants.GROOVY_DEBUG_FILTER_STACK);
} else if (PreferenceConstants.GROOVY_DEBUG_FILTER_LIST.equals(event.getProperty())) {
filteredList = computeFilteredList();
}
}
void connect() {
GroovyPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(this);
}
void disconnect() {
GroovyPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(this);
}
}