1 32 package net.sf.retrotranslator.transformer; 33 34 import java.lang.ref.SoftReference ; 35 import java.util.*; 36 import static net.sf.retrotranslator.transformer.TransformerTools.*; 37 38 41 class ReplacementLocatorFactory { 42 43 private static final String JAVA_UTIL_CONCURRENT = "java/util/concurrent/"; 44 45 private final ClassVersion target; 46 private final boolean advanced; 47 private final boolean retainapi; 48 private List<Backport> backports; 49 50 private SoftReference <ReplacementLocator> softReference = new SoftReference <ReplacementLocator>(null); 51 52 public ReplacementLocatorFactory(ClassVersion target, boolean advanced, boolean retainapi, List<Backport> backports) { 53 this.target = target; 54 this.advanced = advanced; 55 this.retainapi = retainapi; 56 this.backports = backports; 57 if (target == ClassVersion.VERSION_14 && !retainapi) { 58 addDefault(backports); 59 } 60 } 61 62 private void addDefault(List<Backport> backports) { 63 backports.add(new Backport("", RUNTIME_PREFIX, null, null)); 64 backports.add(new Backport(null, null, "java/lang/StringBuilder", "java/lang/StringBuffer")); 65 backports.add(new Backport(JAVA_UTIL_CONCURRENT, CONCURRENT_PREFIX + JAVA_UTIL_CONCURRENT, null, null)); 66 for (String name : new String []{"java/util/Deque", "java/util/ArrayDeque", 67 "java/util/Queue", "java/util/AbstractQueue", "java/util/PriorityQueue"}) { 68 backports.add(new Backport(null, null, name, CONCURRENT_PREFIX + name)); 69 } 70 } 71 72 public ClassVersion getTarget() { 73 return target; 74 } 75 76 public boolean isAdvanced() { 77 return advanced; 78 } 79 80 public boolean isRetainapi() { 81 return retainapi; 82 } 83 84 public boolean isEmpty() { 85 return backports.isEmpty(); 86 } 87 88 public synchronized ReplacementLocator getLocator() { 89 ReplacementLocator locator = softReference.get(); 90 if (locator == null) { 91 locator = new ReplacementLocator(advanced, backports); 92 softReference = new SoftReference <ReplacementLocator>(locator); 93 } 94 return locator; 95 } 96 97 } 98 | Popular Tags |