blob: cb326cac59717dae161eae17807841bfd5117632 [file] [log] [blame]
/*
* Copyright (c) 2013, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html
*
* 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 com.google.dart.tools.debug.ui.internal.objectinspector;
import com.google.dart.tools.debug.core.dartium.DartiumDebugValue;
import com.google.dart.tools.debug.core.dartium.DartiumDebugVariable;
import com.google.dart.tools.debug.core.server.ServerDebugValue;
import com.google.dart.tools.debug.core.server.ServerDebugVariable;
import org.eclipse.core.runtime.IAdapterFactory;
import org.eclipse.core.runtime.IAdapterManager;
import org.eclipse.core.runtime.Platform;
import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.model.IVariable;
import org.eclipse.ui.IActionFilter;
/**
* An IActionFilter implementation used to determine whether inspect actions apply to certain
* objects, and to manage the enablement state of those actions.
*/
public class InspectorActionFilter implements IActionFilter {
static class InspectorAdapterFactory implements IAdapterFactory {
private InspectorActionFilter inspectorFilter = new InspectorActionFilter();
public InspectorAdapterFactory() {
}
@Override
@SuppressWarnings("rawtypes")
public Object getAdapter(Object adaptableObject, Class adapterType) {
return inspectorFilter;
}
@SuppressWarnings("rawtypes")
@Override
public Class[] getAdapterList() {
return new Class[] {IActionFilter.class};
}
}
public static void registerAdapters() {
IAdapterManager manager = Platform.getAdapterManager();
IAdapterFactory factory = new InspectorAdapterFactory();
manager.registerAdapters(factory, ServerDebugVariable.class);
manager.registerAdapters(factory, DartiumDebugVariable.class);
manager.registerAdapters(factory, InspectorVariable.class);
}
public InspectorActionFilter() {
}
@Override
public boolean testAttribute(Object object, String name, String value) {
if ("isInspectableObject".equals(name)) {
return Boolean.toString(isInspectableObject(object)).equals(value);
} else if ("canInspectObject".equals(name)) {
return Boolean.toString(canInspectObject(object)).equals(value);
} else if ("canInspectClass".equals(name)) {
return Boolean.toString(canInspectClass(object)).equals(value);
} else if ("canInspectLibrary".equals(name)) {
return Boolean.toString(canInspectLibrary(object)).equals(value);
} else {
return false;
}
}
private boolean canInspectClass(Object object) {
if (!isInspectableObject(object)) {
return false;
}
if (object instanceof IVariable) {
IVariable variable = (IVariable) object;
try {
object = variable.getValue();
} catch (DebugException e) {
return false;
}
}
if (isPrimitive(object)) {
return false;
}
return true;
}
private boolean canInspectLibrary(Object object) {
if (!isInspectableObject(object)) {
return false;
}
if (object instanceof IVariable) {
IVariable variable = (IVariable) object;
try {
object = variable.getValue();
} catch (DebugException e) {
return false;
}
}
if (isPrimitive(object)) {
return false;
}
return true;
}
private boolean canInspectObject(Object object) {
if (!isInspectableObject(object)) {
return false;
}
if (object instanceof InspectorVariable) {
return false;
}
return true;
}
private boolean isInspectableObject(Object object) {
return object instanceof ServerDebugVariable || object instanceof DartiumDebugVariable
|| object instanceof InspectorVariable;
}
private boolean isPrimitive(Object object) {
if (object instanceof DartiumDebugValue) {
DartiumDebugValue val = (DartiumDebugValue) object;
if (val.isPrimitive()) {
return true;
}
} else if (object instanceof ServerDebugValue) {
ServerDebugValue val = (ServerDebugValue) object;
if (val.isPrimitive()) {
return true;
}
}
return false;
}
}