REMODEL OF SourceFileReplacer.java

AT LAST

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1464 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
alfred 2006-09-05 07:37:01 +00:00
parent 78b5fb8265
commit 16b7eeef54
4 changed files with 72 additions and 51 deletions

View File

@ -142,8 +142,15 @@ public final class Common {
} }
} }
} }
public static final void toDoAll(Set<String> set, ForDoAll fda) throws Exception {
Iterator<String> di = set.iterator();
while (di.hasNext()) {
fda.run(di.next());
}
}
public static void toDoAll(String path, ForDoAll fda, int type) throws Exception { // filter of file type can be done in toDo public static final void toDoAll(String path, ForDoAll fda, int type) throws Exception { // filter of file type can be done in toDo
String[] list = new File(path).list(); String[] list = new File(path).list();
File test; File test;

View File

@ -34,7 +34,7 @@ public class MigrationTool {
ModuleReader.ModuleScan(mi); ModuleReader.ModuleScan(mi);
//MigrationTool.ui.yesOrNo("go on replace?"); //MigrationTool.ui.yesOrNo("go on replace?");
SourceFileReplacer.flush(mi); // some adding library actions are taken here,so it must be put before "MsaWriter" SourceFileReplacer.fireAt(mi); // some adding library actions are taken here,so it must be put before "MsaWriter"
//MigrationTool.ui.yesOrNo("go on show?"); //MigrationTool.ui.yesOrNo("go on show?");
// show result // show result

View File

@ -15,8 +15,6 @@ package org.tianocore.migration;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
import org.tianocore.ModuleTypeDef;
/* /*
Class ModuleInfo is built for scanning the source files, it contains all the needed Class ModuleInfo is built for scanning the source files, it contains all the needed
information and all the temporary data. information and all the temporary data.

View File

@ -17,9 +17,10 @@ import java.util.*;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public final class SourceFileReplacer { public final class SourceFileReplacer implements Common.ForDoAll {
private static ModuleInfo mi; private static final SourceFileReplacer SFReplacer = new SourceFileReplacer();
private static boolean showdetails = false; private ModuleInfo mi;
private static boolean showdetails = true; // set this as default now, may be changed in the future
private static class r8tor9 { private static class r8tor9 {
r8tor9(String r8, String r9) { r8tor9(String r8, String r9) {
@ -38,52 +39,11 @@ public final class SourceFileReplacer {
private static final Set<r8tor9> fileprotocol = new HashSet<r8tor9>(); private static final Set<r8tor9> fileprotocol = new HashSet<r8tor9>();
private static final Set<String> filer8only = new HashSet<String>(); private static final Set<String> filer8only = new HashSet<String>();
public static final void flush(ModuleInfo moduleinfo) throws Exception {
mi = moduleinfo;
String outname = null;
String inname = null;
showdetails = true; // set this as default now, may be changed in the future
Iterator<String> di = mi.localmodulesources.iterator();
String tempinpath = mi.modulepath + File.separator + "temp" + File.separator;
String tempoutpath = MigrationTool.ModuleInfoMap.get(mi) + File.separator + "Migration_" + mi.modulename + File.separator;
while (di.hasNext()) {
inname = di.next();
if (inname.contains(".c") || inname.contains(".C")) {
if (inname.contains(".C")) {
outname = inname.replaceFirst(".C", ".c");
} else {
outname = inname;
}
MigrationTool.ui.println("\nModifying file: " + inname);
Common.string2file(sourcefilereplace(Common.file2string(tempinpath + inname)), tempoutpath + outname);
} else if (inname.contains(".h") || inname.contains(".H") || inname.contains(".uni")) {
if (inname.contains(".H")) {
outname = inname.replaceFirst(".H", ".h");
} else {
outname = inname;
}
MigrationTool.ui.println("\nCopying file: " + inname);
Common.string2file(Common.file2string(tempinpath + inname), tempoutpath + outname);
} else if (inname.contains(".dxs")) {
outname = inname;
MigrationTool.ui.println("\nModifying file: " + inname);
Common.string2file(convertdxs(Common.file2string(tempinpath + inname)), tempoutpath + outname);
}
}
if (!mi.hashr8only.isEmpty()) {
addr8only();
}
}
private static final String addincludefile(String wholeline, String hfile) { private static final String addincludefile(String wholeline, String hfile) {
return wholeline.replaceFirst("(\\*/\\s)", "$1\n#include " + hfile + "\n"); return wholeline.replaceFirst("(\\*/\\s)", "$1\n#include " + hfile + "\n");
} }
private static final String convertdxs(String wholeline) { private final String convertdxs(String wholeline) {
if (mi.getModuleType().equals("PEIM")) { if (mi.getModuleType().equals("PEIM")) {
return addincludefile(wholeline, "\\<PeimDepex.h\\>"); return addincludefile(wholeline, "\\<PeimDepex.h\\>");
} else { } else {
@ -91,7 +51,7 @@ public final class SourceFileReplacer {
} }
} }
private static final void addr8only() throws Exception { private final void addr8only() throws Exception {
String paragraph = null; String paragraph = null;
String line = Common.file2string(MigrationTool.db.DatabasePath + File.separator + "R8Lib.c"); String line = Common.file2string(MigrationTool.db.DatabasePath + File.separator + "R8Lib.c");
PrintWriter outfile1 = new PrintWriter(new BufferedWriter(new FileWriter(MigrationTool.ModuleInfoMap.get(mi) + File.separator + "Migration_" + mi.modulename + File.separator + "R8Lib.c"))); PrintWriter outfile1 = new PrintWriter(new BufferedWriter(new FileWriter(MigrationTool.ModuleInfoMap.get(mi) + File.separator + "Migration_" + mi.modulename + File.separator + "R8Lib.c")));
@ -123,7 +83,7 @@ public final class SourceFileReplacer {
} }
// Caution : if there is @ in file , it will be replaced with \n , so is you use Doxygen ... God Bless you! // Caution : if there is @ in file , it will be replaced with \n , so is you use Doxygen ... God Bless you!
private static final String sourcefilereplace(String wholeline) throws Exception { private final String sourcefilereplace(String wholeline) throws Exception {
boolean addr8 = false; boolean addr8 = false;
Pattern pat = Pattern.compile("g?(BS|RT)(\\s*->\\s*)([a-zA-Z_]\\w*)", Pattern.MULTILINE); // ! only two level () bracket allowed ! Pattern pat = Pattern.compile("g?(BS|RT)(\\s*->\\s*)([a-zA-Z_]\\w*)", Pattern.MULTILINE); // ! only two level () bracket allowed !
@ -312,4 +272,60 @@ public final class SourceFileReplacer {
} }
} }
} }
//-----------------------------------ForDoAll-----------------------------------//
public void run(String filepath) throws Exception {
String outname = null;
String inname = filepath.replace(mi.modulepath + File.separator, "");
String tempinpath = mi.modulepath + File.separator + "temp" + File.separator;
String tempoutpath = MigrationTool.ModuleInfoMap.get(mi) + File.separator + "Migration_" + mi.modulename + File.separator;
if (inname.contains(".c") || inname.contains(".C")) {
if (inname.contains(".C")) {
outname = inname.replaceFirst(".C", ".c");
} else {
outname = inname;
}
MigrationTool.ui.println("\nModifying file: " + inname);
Common.string2file(sourcefilereplace(Common.file2string(tempinpath + inname)), tempoutpath + outname);
} else if (inname.contains(".h") || inname.contains(".H") || inname.contains(".uni")) {
if (inname.contains(".H")) {
outname = inname.replaceFirst(".H", ".h");
} else {
outname = inname;
}
MigrationTool.ui.println("\nCopying file: " + inname);
Common.string2file(Common.file2string(tempinpath + inname), tempoutpath + outname);
} else if (inname.contains(".dxs")) {
outname = inname;
MigrationTool.ui.println("\nModifying file: " + inname);
Common.string2file(convertdxs(Common.file2string(tempinpath + inname)), tempoutpath + outname);
}
}
public boolean dirFilter(String filepath) {
return true;
}
public boolean fileFilter(String filepath) {
return true;
}
//-----------------------------------ForDoAll-----------------------------------//
private final void setModuleInfo(ModuleInfo moduleinfo) {
mi = moduleinfo;
}
private final void start() throws Exception {
Common.toDoAll(mi.localmodulesources, this);
if (!mi.hashr8only.isEmpty()) {
addr8only();
}
}
public static final void fireAt(ModuleInfo moduleinfo) throws Exception {
SFReplacer.setModuleInfo(moduleinfo);
SFReplacer.start();
}
} }