1 11 package org.eclipse.jdt.internal.debug.ui.breakpoints; 12 13 import com.ibm.icu.text.MessageFormat; 14 import java.util.HashMap ; 15 import java.util.Map ; 16 17 import org.eclipse.core.runtime.CoreException; 18 import org.eclipse.core.runtime.IAdapterFactory; 19 import org.eclipse.debug.core.DebugPlugin; 20 import org.eclipse.debug.core.model.IBreakpoint; 21 import org.eclipse.debug.ui.BreakpointTypeCategory; 22 import org.eclipse.debug.ui.IBreakpointTypeCategory; 23 import org.eclipse.jdt.debug.core.IJavaClassPrepareBreakpoint; 24 import org.eclipse.jdt.debug.core.IJavaExceptionBreakpoint; 25 import org.eclipse.jdt.debug.core.IJavaLineBreakpoint; 26 import org.eclipse.jdt.debug.core.IJavaMethodBreakpoint; 27 import org.eclipse.jdt.debug.core.IJavaMethodEntryBreakpoint; 28 import org.eclipse.jdt.debug.core.IJavaStratumLineBreakpoint; 29 import org.eclipse.jdt.debug.core.IJavaWatchpoint; 30 import org.eclipse.jdt.internal.debug.ui.JavaDebugImages; 31 import org.eclipse.jface.resource.ImageDescriptor; 32 33 36 public class JavaBreakpointTypeAdapterFactory implements IAdapterFactory { 37 38 private Map fStratumTypes = new HashMap (); 39 40 private Map fOtherTypes = new HashMap (); 42 43 46 public Object getAdapter(Object adaptableObject, Class adapterType) { 47 if (adapterType.equals(IBreakpointTypeCategory.class)) { 48 if (adaptableObject instanceof IJavaStratumLineBreakpoint) { 49 IJavaStratumLineBreakpoint stratumBreakpoint = (IJavaStratumLineBreakpoint) adaptableObject; 50 try { 51 String stratum = stratumBreakpoint.getStratum(); 52 if (stratum == null) { 53 String sourceName = stratumBreakpoint.getSourceName(); 55 if (sourceName != null) { 56 int index = sourceName.lastIndexOf('.'); 57 if (index >= 0 && index < (sourceName.length() - 1)) { 58 String suffix = sourceName.substring(index + 1); 59 if (!suffix.equalsIgnoreCase("java")) { stratum = suffix.toUpperCase(); 61 } 62 } 63 } 64 } 65 if (stratum != null) { 66 Object type = fStratumTypes.get(stratum); 67 if (type == null) { 68 String label = MessageFormat.format(BreakpointMessages.JavaBreakpointTypeAdapterFactory_0, new String []{stratum}); 69 if (stratum.equalsIgnoreCase("jsp")) { type = new BreakpointTypeCategory(label, getImageDescriptor(JavaDebugImages.IMG_OBJS_JSP_BRKPT_TYPE)); 71 } else { 72 type = new BreakpointTypeCategory(label); 73 } 74 fStratumTypes.put(stratum, type); 75 } 76 return type; 77 } 78 } catch (CoreException e) { 79 } 80 } 81 if (adaptableObject instanceof IBreakpoint) { 82 IBreakpoint breakpoint = (IBreakpoint)adaptableObject; 83 String type = DebugPlugin.getDefault().getBreakpointManager().getTypeName(breakpoint); 84 IBreakpointTypeCategory category = (IBreakpointTypeCategory) fOtherTypes.get(type); 85 if (category == null) { 86 if (breakpoint instanceof IJavaExceptionBreakpoint) { 87 category = new BreakpointTypeCategory(type, getImageDescriptor(JavaDebugImages.IMG_OBJS_EXCEPTION_BRKPT_TYPE)); 88 } else if (breakpoint instanceof IJavaClassPrepareBreakpoint) { 89 category = new BreakpointTypeCategory(type, getImageDescriptor(JavaDebugImages.IMG_OBJS_CLASSLOAD_BRKPT_TYPE)); 90 } else if (breakpoint instanceof IJavaMethodBreakpoint || breakpoint instanceof IJavaMethodEntryBreakpoint) { 91 category = new BreakpointTypeCategory(type, getImageDescriptor(JavaDebugImages.IMG_OBJS_METHOD_BRKPT_TYPE)); 92 } else if (breakpoint instanceof IJavaWatchpoint) { 93 category = new BreakpointTypeCategory(type, getImageDescriptor(JavaDebugImages.IMG_OBJS_WATCHPOINT_TYPE)); 94 } else if (breakpoint instanceof IJavaLineBreakpoint) { 95 category = new BreakpointTypeCategory(type, getImageDescriptor(JavaDebugImages.IMG_OBJS_LINE_BRKPT_TYPE)); 96 } 97 if (category != null) { 98 fOtherTypes.put(type, category); 99 } 100 } 101 return category; 102 } 103 } 104 return null; 105 } 106 107 110 public Class [] getAdapterList() { 111 return new Class []{IBreakpointTypeCategory.class}; 112 } 113 114 private ImageDescriptor getImageDescriptor(String key) { 115 return JavaDebugImages.getImageDescriptor(key); 116 } 117 118 } 119 | Popular Tags |