1 11 package org.eclipse.jdt.internal.debug.ui; 12 13 14 import java.util.HashSet ; 15 import java.util.Set ; 16 17 import org.eclipse.debug.core.DebugException; 18 import org.eclipse.debug.core.model.IValue; 19 import org.eclipse.jdt.debug.core.IJavaClassType; 20 import org.eclipse.jdt.debug.core.IJavaDebugTarget; 21 import org.eclipse.jdt.debug.core.IJavaObject; 22 import org.eclipse.jdt.debug.core.IJavaVariable; 23 import org.eclipse.jdt.internal.debug.core.logicalstructures.JavaStructureErrorValue; 24 import org.eclipse.jdt.internal.debug.core.model.JDINullValue; 25 import org.eclipse.jdt.internal.debug.ui.actions.EditVariableLogicalStructureAction; 26 import org.eclipse.jdt.internal.debug.ui.actions.OpenVariableTypeAction; 27 import org.eclipse.ui.IActionFilter; 28 29 public class JavaVariableActionFilter implements IActionFilter { 30 31 private static final Set fgPrimitiveTypes = initPrimitiveTypes(); 32 33 private static Set initPrimitiveTypes() { 34 HashSet set = new HashSet (8); 35 set.add("short"); set.add("int"); set.add("long"); set.add("float"); set.add("double"); set.add("boolean"); set.add("byte"); set.add("char"); set.add("null"); return set; 45 } 46 47 50 public boolean testAttribute(Object target, String name, String value) { 51 if (target instanceof IJavaVariable) { 52 IJavaVariable var = (IJavaVariable) target; 53 IValue varValue; 54 try { 55 varValue= var.getValue(); 56 if (name.equals("PrimitiveVariableActionFilter")) { if (value.equals("isPrimitive")) { return isPrimitiveType(var); 59 } else if (value.equals("isValuePrimitive")) { return isValuePrimitiveType(var); 61 } 62 } else if (name.equals("ConcreteVariableActionFilter") && value.equals("isConcrete")) { return isDeclaredSameAsConcrete(var); 64 } else if (name.equals("JavaVariableActionFilter") && value.equals("instanceFilter")) { return !var.isStatic() && (varValue instanceof IJavaObject) && (((IJavaObject)varValue).getJavaType() instanceof IJavaClassType) && ((IJavaDebugTarget)var.getDebugTarget()).supportsInstanceBreakpoints(); 66 } else if (name.equals("DetailFormatterFilter") && value.equals("isDefined")) { return (varValue instanceof IJavaObject) && (JavaDetailFormattersManager.getDefault().hasAssociatedDetailFormatter(((IJavaObject)varValue).getJavaType())); 68 } else if (name.equals("JavaLogicalStructureFilter") && value.equals("canEditLogicalStructure")) { return varValue instanceof JavaStructureErrorValue || EditVariableLogicalStructureAction.getLogicalStructure(varValue) != null; 70 } 71 } catch (DebugException e) { 72 JDIDebugUIPlugin.log(e); 73 } 74 } 75 76 return false; 77 } 78 79 protected boolean isDeclaredSameAsConcrete(IJavaVariable var) throws DebugException { 80 IValue value= var.getValue(); 81 if (value instanceof JDINullValue) { 82 return false; 83 } 84 return !var.getReferenceTypeName().equals(value.getReferenceTypeName()); 85 } 86 protected String getTypeNameToOpen(String refType) { 87 refType = OpenVariableTypeAction.removeArray(refType); 88 if (fgPrimitiveTypes.contains(refType)) { 89 return null; 90 } 91 return refType; 92 } 93 94 95 protected boolean isPrimitiveType(IJavaVariable var) { 96 try { 97 return getTypeNameToOpen(var.getReferenceTypeName()) != null; 98 } catch (DebugException e) { 99 JDIDebugUIPlugin.log(e); 100 } 102 return false; 103 } 104 105 protected boolean isValuePrimitiveType(IJavaVariable var) { 106 try { 107 return getTypeNameToOpen(var.getValue().getReferenceTypeName()) != null; 108 } catch (DebugException e) { 109 JDIDebugUIPlugin.log(e); 110 } 112 return false; 113 } 114 } 115 | Popular Tags |