1 32 package net.sf.retrotranslator.transformer; 33 34 import java.io.UnsupportedEncodingException ; 35 import java.util.regex.*; 36 37 40 class TextFileTransformer { 41 42 private static Pattern pattern = Pattern.compile("([A-Za-z0-9_$]+\\.)+[A-Za-z0-9_$]+"); 43 44 private ReplacementLocatorFactory factory; 45 46 public TextFileTransformer(ReplacementLocatorFactory factory) { 47 this.factory = factory; 48 } 49 50 public byte[] transform(byte[] bytes, EmbeddingConverter converter) { 51 boolean modified = false; 52 Matcher matcher = pattern.matcher(toString(bytes)); 53 StringBuffer buffer = new StringBuffer (); 54 while (matcher.find()) { 55 String originalName = matcher.group().replace('.', '/'); 56 ClassReplacement replacement = factory.getLocator().getReplacement(originalName); 57 String backportName = replacement == null ? originalName : replacement.getReferenceTypeName(); 58 String name = converter == null ? backportName : converter.convertClassName(backportName); 59 if (originalName.equals(name)) { 60 matcher.appendReplacement(buffer, "$0"); 61 } else { 62 modified = true; 63 matcher.appendReplacement(buffer, Matcher.quoteReplacement(name.replace('/', '.'))); 64 } 65 } 66 return modified ? toBytes(matcher.appendTail(buffer).toString()) : bytes; 67 } 68 69 private static String toString(byte[] bytes) { 70 try { 71 return new String (bytes, "UTF-8"); 72 } catch (UnsupportedEncodingException e) { 73 throw new RuntimeException (e); 74 } 75 } 76 77 private static byte[] toBytes(String s) { 78 try { 79 return s.getBytes("UTF-8"); 80 } catch (UnsupportedEncodingException e) { 81 throw new RuntimeException (e); 82 } 83 } 84 85 } 86 | Popular Tags |