1 19 package edu.umd.cs.findbugs; 20 import java.util.Map ; 21 22 import edu.umd.cs.findbugs.ba.AnalysisContext; 23 24 public class AnalysisLocal<T> { 25 protected T initialValue() { 26 return null; 27 } 28 29 protected Map <AnalysisLocal<T>, T> getMap() { 30 Map <?,?> m = AnalysisContext.currentAnalysisContext().getAnalysisLocals(); 31 return (Map <AnalysisLocal<T>, T>) m; 32 } 33 34 public T get() { 35 Map <AnalysisLocal<T>, T> m = getMap(); 36 37 if (m.containsKey(this)) { 38 return m.get(this); 39 } 40 41 synchronized(m) { 42 if (m.containsKey(this)) { 43 return m.get(this); 44 } 45 T result = initialValue(); 46 m.put(this,result); 47 return result; 48 } 49 } 50 public void set(T value) { 51 Map <AnalysisLocal<T>, T> m = getMap(); 52 m.put(this, value); 53 } 54 public void remove() { 55 Map <AnalysisLocal<T>, T> m = getMap(); 56 m.remove(this); 57 } 58 } 59 | Popular Tags |