1 11 package org.eclipse.jdt.internal.debug.ui; 12 13 import java.util.HashSet ; 14 import java.util.Set ; 15 16 import org.eclipse.debug.core.DebugException; 17 import org.eclipse.debug.core.model.IValue; 18 import org.eclipse.jdt.debug.core.IJavaArrayType; 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.IJavaType; 23 import org.eclipse.jdt.debug.core.IJavaVariable; 24 import org.eclipse.jdt.internal.debug.core.logicalstructures.JavaStructureErrorValue; 25 import org.eclipse.jdt.internal.debug.core.model.JDINullValue; 26 import org.eclipse.jdt.internal.debug.core.model.JDIPlaceholderValue; 27 import org.eclipse.jdt.internal.debug.core.model.JDIReferenceListVariable; 28 import org.eclipse.jdt.internal.debug.ui.actions.EditVariableLogicalStructureAction; 29 import org.eclipse.jdt.internal.debug.ui.display.JavaInspectExpression; 30 import org.eclipse.ui.IActionFilter; 31 32 import com.sun.jdi.ClassNotLoadedException; 33 34 39 public class JavaVarActionFilter implements IActionFilter { 40 41 44 private static final Set fgPrimitiveTypes = initPrimitiveTypes(); 45 46 50 private static Set initPrimitiveTypes() { 51 HashSet set = new HashSet (8); 52 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; 62 } 63 64 69 protected boolean isDeclaredSameAsConcrete(IJavaVariable var) { 70 try { 71 IValue value = var.getValue(); 72 if (value instanceof JDINullValue) { 73 return false; 74 } 75 return !var.getReferenceTypeName().equals(value.getReferenceTypeName()); 76 } 77 catch(DebugException e) {JDIDebugUIPlugin.log(e);} 78 return false; 79 } 80 81 86 protected boolean isPrimitiveType(Object obj) { 87 if(obj instanceof IJavaVariable) { 88 try { 89 return !fgPrimitiveTypes.contains(removeArray(((IJavaVariable) obj).getReferenceTypeName())); 90 } 91 catch (DebugException e) { 92 if(!(e.getStatus().getException() instanceof ClassNotLoadedException)) { 93 JDIDebugUIPlugin.log(e); 94 } 95 return false; 96 } 97 } 98 else if(obj instanceof JavaInspectExpression) { 99 try { 100 JavaInspectExpression exp = (JavaInspectExpression)obj; 101 IValue value = exp.getValue(); 102 if (value != null) { 103 return fgPrimitiveTypes.contains(removeArray(value.getReferenceTypeName())); 104 } 105 } catch (DebugException e) {JDIDebugUIPlugin.log(e);} 106 } 107 return false; 108 } 109 110 116 protected boolean isArrayType(Object object) { 117 if(object instanceof IJavaVariable) { 118 try { 119 IJavaType type = ((IJavaVariable)object).getJavaType(); 120 if(type != null) { 121 return type instanceof IJavaArrayType; 122 } 123 } 124 catch (DebugException e) {JDIDebugUIPlugin.log(e);} 125 } 126 return false; 127 } 128 129 135 protected boolean isValuePrimitiveType(IValue value) { 136 try { 137 return !fgPrimitiveTypes.contains(removeArray(value.getReferenceTypeName())); 138 } 139 catch (DebugException e) {JDIDebugUIPlugin.log(e);} 140 return false; 141 } 142 143 149 protected String removeArray(String type) { 150 if (type != null) { 151 int index= type.indexOf('['); 152 if (index > 0) { 153 return type.substring(0, index); 154 } 155 } 156 return type; 157 } 158 159 162 public boolean testAttribute(Object target, String name, String value) { 163 if (target instanceof IJavaVariable) { 164 IJavaVariable var = (IJavaVariable) target; 165 IValue varValue; 166 try { 167 varValue = var.getValue(); 168 if (name.equals("PrimitiveVariableActionFilter")) { if (value.equals("isPrimitive")) { return isPrimitiveType(var); 171 } 172 else if(value.equals("isArray")) { return isArrayType(var); 174 } 175 else if (value.equals("isValuePrimitive")) { return isValuePrimitiveType(varValue); 177 } 178 } 179 if (name.equals("JavaVariableFilter")) { if (value.equals("isInstanceRetrievalAvailable")) { return isInstanceRetrievalAvailable(var); 182 } 183 if(value.equals("isNullValue")) { return varValue instanceof JDINullValue; 185 } 186 if (value.equals("isReferenceListVariable")) { return var instanceof JDIReferenceListVariable; 188 } 189 if (value.equals("isPlaceholderValue")) { return varValue instanceof JDIPlaceholderValue; 191 } 192 } 193 else if (name.equals("ConcreteVariableActionFilter") && value.equals("isConcrete")) { return isDeclaredSameAsConcrete(var); 195 } 196 else if (name.equals("JavaVariableActionFilter")) { if(value.equals("instanceFilter")) { return !var.isStatic() && (varValue instanceof IJavaObject) && (((IJavaObject)varValue).getJavaType() instanceof IJavaClassType) && ((IJavaDebugTarget)var.getDebugTarget()).supportsInstanceBreakpoints(); 199 } 200 if(value.equals("isValidField")) { return !var.isFinal() & !(var.isFinal() & var.isStatic()); 202 } 203 } 204 else if (name.equals("DetailFormatterFilter") & (varValue instanceof IJavaObject)) { if(value.equals("isDefined")) { return JavaDetailFormattersManager.getDefault().hasAssociatedDetailFormatter(((IJavaObject)varValue).getJavaType()); 207 } 208 if(value.equals("inInterface")) { return JavaDetailFormattersManager.getDefault().hasInterfaceDetailFormatter(((IJavaObject)varValue).getJavaType()); 210 } 211 if(value.equals("inSuperclass")) { return JavaDetailFormattersManager.getDefault().hasSuperclassDetailFormatter(((IJavaObject)varValue).getJavaType()); 213 } 214 } 215 else if (name.equals("JavaLogicalStructureFilter") && value.equals("canEditLogicalStructure")) { return varValue instanceof JavaStructureErrorValue || EditVariableLogicalStructureAction.getLogicalStructure(varValue) != null; 217 } 218 } catch (DebugException e) {} 219 } 220 else if (target instanceof JavaInspectExpression) { 221 JavaInspectExpression exp = (JavaInspectExpression) target; 222 if (name.equals("PrimitiveVariableActionFilter") && value.equals("isNotPrimitive")) { return !isPrimitiveType(exp); 224 } 225 else if (name.equals("DetailFormatterFilter")) { try { 227 IValue varValue = exp.getValue(); 228 if(varValue instanceof IJavaObject) { 229 if(value.equals("isDefined")) { return JavaDetailFormattersManager.getDefault().hasAssociatedDetailFormatter(((IJavaObject)varValue).getJavaType()); 231 } 232 if(value.equals("inInterface")) { return JavaDetailFormattersManager.getDefault().hasInterfaceDetailFormatter(((IJavaObject)varValue).getJavaType()); 234 } 235 if(value.equals("inSuperclass")) { return JavaDetailFormattersManager.getDefault().hasSuperclassDetailFormatter(((IJavaObject)varValue).getJavaType()); 237 } 238 } 239 } 240 catch (DebugException exception) {} 241 } 242 } 243 return false; 244 } 245 246 252 protected boolean isInstanceRetrievalAvailable(IJavaVariable var) { 253 return ((IJavaDebugTarget)var.getDebugTarget()).supportsInstanceRetrieval() && !(var instanceof JDIReferenceListVariable); 254 } 255 } | Popular Tags |