1 11 package org.eclipse.debug.internal.ui.actions.context; 12 13 import org.eclipse.core.runtime.IAdaptable; 14 import org.eclipse.core.runtime.IProgressMonitor; 15 import org.eclipse.core.runtime.IStatus; 16 import org.eclipse.core.runtime.Status; 17 import org.eclipse.core.runtime.jobs.Job; 18 import org.eclipse.debug.core.ILaunch; 19 import org.eclipse.debug.core.model.IDebugElement; 20 import org.eclipse.debug.core.model.IDebugTarget; 21 import org.eclipse.debug.core.model.IProcess; 22 import org.eclipse.debug.core.model.IStepFilters; 23 import org.eclipse.debug.internal.ui.actions.provisional.IAsynchronousStepFiltersAdapter; 24 import org.eclipse.debug.internal.ui.actions.provisional.IBooleanRequestMonitor; 25 import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; 26 27 32 public class StepFiltersAdapter extends StandardActionAdapter implements IAsynchronousStepFiltersAdapter { 33 34 37 public void supportsStepFilters(final Object element, final IBooleanRequestMonitor requestMonitor) { 38 Job job = new Job("supportsStepFilters") { protected IStatus run(IProgressMonitor monitor) { 40 boolean supported = false; 41 IDebugTarget[] debugTargets = getDebugTargets(element); 42 for (int i=0; i<debugTargets.length; i++) 43 { 44 IStepFilters filters = getTarget(debugTargets[i]); 45 46 if (filters != null) 47 { 48 if (filters.supportsStepFilters()) 49 supported = true; 50 } 51 52 if (supported) 54 break; 55 56 } 57 58 requestMonitor.setResult(supported); 59 requestMonitor.done(); 60 return Status.OK_STATUS; 61 } 62 }; 63 job.setSystem(true); 64 job.setRule(createUpdateSchedulingRule()); 65 job.schedule(); 66 } 67 68 71 public void isStepFiltersEnabled(final Object element, final IBooleanRequestMonitor requestMonitor) { 72 Job job = new Job("isStepFiltersEnabled") { protected IStatus run(IProgressMonitor monitor) { 74 IDebugTarget[] debugTargets = getDebugTargets(element); 75 76 for (int i=0; i<debugTargets.length; i++) 77 { 78 IStepFilters filters = getTarget(element); 79 80 if (filters != null) 81 requestMonitor.setResult(filters.isStepFiltersEnabled()); 82 else 83 { 84 requestMonitor.setResult(false); 85 } 86 } 87 requestMonitor.done(); 88 return Status.OK_STATUS; 89 } 90 }; 91 job.setSystem(true); 92 job.setRule(createUpdateSchedulingRule()); 93 job.schedule(); 94 } 95 96 99 public void setStepFiltersEnabled(final Object element, final boolean enabled, final IAsynchronousRequestMonitor requestMonitor) { 100 Job job = new Job("setStepFiltersEnabled") { protected IStatus run(IProgressMonitor monitor) { 102 103 IDebugTarget[] debugTargets = getDebugTargets(element); 104 for (int i=0; i<debugTargets.length; i++) 105 { 106 IStepFilters filters = getTarget(debugTargets[i]); 107 108 if (filters != null && filters.isStepFiltersEnabled() != enabled) 109 filters.setStepFiltersEnabled(enabled); 110 111 } 112 requestMonitor.done(); 113 return Status.OK_STATUS; 114 } 115 }; 116 job.setSystem(true); 117 job.schedule(); 118 } 119 120 private IStepFilters getTarget(Object element) 121 { 122 if (element instanceof IStepFilters) { 123 return (IStepFilters) element; 124 } else if (element instanceof IAdaptable) { 125 return (IStepFilters) ((IAdaptable)element).getAdapter(IStepFilters.class); 126 } 127 return null; 128 } 129 130 private IDebugTarget[] getDebugTargets(Object element) { 131 if (element instanceof IDebugElement) { 132 IDebugElement debugElement = (IDebugElement) element; 133 return new IDebugTarget[] {debugElement.getDebugTarget()}; 134 } else if (element instanceof ILaunch) { 135 ILaunch launch = (ILaunch) element; 136 return launch.getDebugTargets(); 137 } else if (element instanceof IProcess) { 138 IProcess process = (IProcess) element; 139 return process.getLaunch().getDebugTargets(); 140 } else { 141 return new IDebugTarget[0]; 142 } 143 } 144 145 } 146 | Popular Tags |