1 19 package org.netbeans.modules.debugger.jpda.actions; 20 21 import java.beans.PropertyChangeListener ; 22 import java.beans.PropertyChangeSupport ; 23 import java.util.ArrayList ; 24 import java.util.Collections ; 25 import java.util.HashSet ; 26 import java.util.Iterator ; 27 import java.util.Set ; 28 import org.netbeans.api.debugger.Properties; 29 import org.netbeans.api.debugger.jpda.SmartSteppingFilter; 30 31 32 36 public class SmartSteppingFilterImpl implements SmartSteppingFilter { 37 38 private HashSet <String > filter = new HashSet <String >(); 39 private ArrayList <String > exact = new ArrayList <String >(); 40 private ArrayList <String > start = new ArrayList <String >(); 41 private ArrayList <String > end = new ArrayList <String >(); 42 private PropertyChangeSupport pcs; 43 {pcs = new PropertyChangeSupport (this);} 44 45 { 46 addExclusionPatterns ( 47 (Set ) Properties.getDefault ().getProperties ("debugger"). 48 getProperties ("sources").getProperties ("class_filters"). 49 getCollection ( 50 "enabled", 51 Collections.EMPTY_SET 52 ) 53 ); 54 } 55 56 57 65 public void addExclusionPatterns (Set <String > patterns) { 66 Set <String > reallyNew = new HashSet <String >(patterns); 67 reallyNew.removeAll (filter); 68 if (reallyNew.size () < 1) return; 69 70 filter.addAll (reallyNew); 71 refreshFilters (reallyNew); 72 73 pcs.firePropertyChange (PROP_EXCLUSION_PATTERNS, null, reallyNew); 74 } 75 76 81 public void removeExclusionPatterns (Set <String > patterns) { 82 filter.removeAll (patterns); 83 exact = new ArrayList <String >(); 84 start = new ArrayList <String >(); 85 end = new ArrayList <String >(); 86 refreshFilters (filter); 87 88 pcs.firePropertyChange (PROP_EXCLUSION_PATTERNS, patterns, null); 89 } 90 91 94 public String [] getExclusionPatterns () { 95 String [] ef = new String [filter.size ()]; 96 return filter.toArray (ef); 97 } 98 99 public boolean stopHere (String className) { 100 int i, k = exact.size (); 101 for (i = 0; i < k; i++) { 102 if (exact.get (i).equals (className)) return false; 103 } 104 k = start.size (); 105 for (i = 0; i < k; i++) { 106 if (className.startsWith (start.get (i))) return false; 107 } 108 k = end.size (); 109 for (i = 0; i < k; i++) { 110 if (className.endsWith (end.get (i))) return false; 111 } 112 return true; 113 } 114 115 120 public void addPropertyChangeListener (PropertyChangeListener l) { 121 pcs.addPropertyChangeListener (l); 122 } 123 124 129 public void removePropertyChangeListener ( 130 PropertyChangeListener l 131 ) { 132 pcs.removePropertyChangeListener (l); 133 } 134 135 138 private void refreshFilters (Set <String > newFilters) { 139 Iterator <String > i = newFilters.iterator (); 140 while (i.hasNext ()) { 141 String p = i.next (); 142 if (p.startsWith ("*")) 143 end.add (p.substring (1)); 144 else 145 if (p.endsWith ("*")) 146 start.add (p.substring (0, p.length () - 1)); 147 else 148 exact.add (p); 149 } 150 } 151 } 152 | Popular Tags |