r8lib in database

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1349 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
alfred 2006-08-22 07:39:14 +00:00
parent a61513d6f9
commit eee63a7bca
5 changed files with 72 additions and 75 deletions

View File

@ -15,13 +15,13 @@ package org.tianocore.migration;
import java.util.regex.*;
import java.io.*;
public class Critic {
private static Pattern ptnheadcomment = Pattern.compile("^\\/\\*\\+\\+(.*?)\\-\\-\\*\\/",Pattern.DOTALL);
private static Pattern ptnfunccomment = Pattern.compile("([\\};\\/\">]\\s*)([\\w\\s]*?[_\\w][_\\w\\d]*\\s*\\([^\\)\\(]*\\)\\s*)\\/\\*\\+\\+(.*?)\\-\\-\\*\\/(\\s*.*?)([\\{;])",Pattern.DOTALL); // find function with {;">/ , may be unsafe
public final class Critic {
private static final Pattern ptnheadcomment = Pattern.compile("^\\/\\*\\+\\+(.*?)\\-\\-\\*\\/",Pattern.DOTALL);
private static final Pattern ptnfunccomment = Pattern.compile("([\\};\\/\">]\\s*)([\\w\\s]*?[_\\w][_\\w\\d]*\\s*\\([^\\)\\(]*\\)\\s*)\\/\\*\\+\\+(.*?)\\-\\-\\*\\/(\\s*.*?)([\\{;])",Pattern.DOTALL); // find function with {;">/ , may be unsafe
//private static Pattern ptncommentstructure = Pattern.compile("\\/\\*\\+\\+\\s*Routine Description:\\s*(.*?)\\s*Arguments:\\s*(.*?)\\s*Returns:\\s*(.*?)\\s*\\-\\-\\*\\/",Pattern.DOTALL);
private static Pattern ptncommentequation = Pattern.compile("([^\\s]*)\\s+-\\s+(.*)\\s*");
private static final Pattern ptncommentequation = Pattern.compile("([^\\s]*)\\s+-\\s+(.*)\\s*");
private static Matcher mtrcommentequation;
private static Pattern ptnnewcomment = Pattern.compile("(\\s*@(param|retval)\\s+[^\\s]+)\\s+(.*)");
private static final Pattern ptnnewcomment = Pattern.compile("(\\s*@(param|retval)\\s+[^\\s]+)\\s+(.*)");
private static Matcher mtrnewcomment;
private static final int totallinelength = 82;

View File

@ -14,6 +14,7 @@ package org.tianocore.migration;
import java.io.*;
import java.util.*;
import java.util.regex.*;
public final class Database {
Database(String path) throws Exception {
@ -24,17 +25,19 @@ public final class Database {
importDBGuid("Ppi.csv", "Ppi");
importDBGuid("Protocol.csv", "Protocol");
importDBMacro("Macro.csv");
importListR8Only();
}
public static String defaultpath = "C:" + File.separator + "tianocore" + File.separator + "edk2" + File.separator + "Tools" + File.separator + "Conf" + File.separator + "Migration";
public String DatabasePath;
public Set<String> error = new HashSet<String>();
public Set<String> r8only = new HashSet<String>();
private Map<String,Guid> hashguid = new HashMap<String,Guid>();
private Map<String,Func> hashfunc = new HashMap<String,Func>();
private Map<String,Macro> hashmacro = new HashMap<String,Macro>();
//-------------------------------------import------------------------------------------//
private void importDBLib(String filename) throws Exception {
BufferedReader rd = new BufferedReader(new FileReader(DatabasePath + File.separator + filename));
String line;
@ -88,7 +91,21 @@ public final class Database {
}
}
}
private void importListR8Only() throws Exception {
Pattern ptnr8only = Pattern.compile("////#?(\\w*)?.*?R8_(.*?)\\s*\\(.*?////~", Pattern.DOTALL);
String wholeline = Common.file2string(DatabasePath + File.separator + "R8Lib.c");
System.out.println("Found " + "R8Lib.c" + ", Importing R8Lib Database.");
Matcher mtrr8only = ptnr8only.matcher(wholeline);
while (mtrr8only.find()) {
r8only.add(mtrr8only.group(2));
}
}
//-------------------------------------import------------------------------------------//
//-------------------------------------get------------------------------------------//
public String getR9Lib(String r8funcname) {
String temp = null;
if (hashfunc.containsKey(r8funcname)) {
@ -105,18 +122,6 @@ public final class Database {
return temp;
}
public boolean hasFunc(String r8lib) {
return hashfunc.containsKey(r8lib);
}
public boolean hasGuid(String r8guid) {
return hashguid.containsKey(r8guid);
}
public boolean hasMacro(String r8macro) {
return hashmacro.containsKey(r8macro);
}
public String getR9Macro(String r8macro) {
return hashmacro.get(r8macro).r9name; // the verification job of if the macro exists in the database is done when registering it
}
@ -141,6 +146,26 @@ public final class Database {
return temp;
}
//-------------------------------------get------------------------------------------//
//-------------------------------------has------------------------------------------//
public boolean hasFunc(String r8lib) {
return hashfunc.containsKey(r8lib);
}
public boolean hasGuid(String r8guid) {
return hashguid.containsKey(r8guid);
}
public boolean hasMacro(String r8macro) {
return hashmacro.containsKey(r8macro);
}
//-------------------------------------has------------------------------------------//
//-------------------------------------init------------------------------------------//
public static Database init() throws Exception {
if (System.getenv("WORKSPACE") == null) {
return new Database("C:" + File.separator + "tianocore" + File.separator + "edk2" + File.separator + "Tools" + File.separator + "Conf" + File.separator + "Migration");

View File

@ -83,7 +83,7 @@ public class ModuleInfo {
CommentOutNonLocalHFile();
parsePreProcessedSourceCode();
new SourceFileReplacer(modulepath, outputpath, this).flush(); // some adding library actions are taken here,so it must be put before "MsaWriter"
SourceFileReplacer.flush(this); // some adding library actions are taken here,so it must be put before "MsaWriter"
// show result
if (MigrationTool.ui.yesOrNo("Parse of the Module Information has completed. View details?")) {
@ -100,7 +100,7 @@ public class ModuleInfo {
show(hashr8only, "hashr8only : ");
}
new MsaWriter(modulepath, outputpath, this).flush();
new MsaWriter(this).flush();
Common.deleteDir(modulepath + File.separator + "temp");
//Common.toDoAll(modulepath + File.separator + "temp", Common.class.getMethod("deleteDir", String.class), null, null, Common.DIR);

View File

@ -20,14 +20,10 @@ import org.tianocore.SupportedArchitectures.Enum;
import org.apache.xmlbeans.*;
public class MsaWriter {
MsaWriter(String path, String outpath, ModuleInfo moduleinfo) {
modulepath = path;
outputpath = outpath;
MsaWriter(ModuleInfo moduleinfo) {
mi = moduleinfo;
}
private String modulepath;
private String outputpath;
private ModuleInfo mi;
private ModuleSurfaceAreaDocument msadoc = ModuleSurfaceAreaDocument.Factory.newInstance();
@ -185,7 +181,7 @@ public class MsaWriter {
options.setSavePrettyPrintIndent(2);
options.setUseDefaultNamespace();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputpath + File.separator + "Migration_" + mi.modulename + File.separator + mi.modulename + ".msa"));
BufferedWriter bw = new BufferedWriter(new FileWriter(mi.outputpath + File.separator + "Migration_" + mi.modulename + File.separator + mi.modulename + ".msa"));
fulfillMsadoc().save(bw, options);
//MsaTreeEditor.init(mi, ui, msadoc);
bw.flush();

View File

@ -18,17 +18,10 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern;
public final class SourceFileReplacer {
SourceFileReplacer(String path, String outpath, ModuleInfo moduleinfo) {
modulepath = path;
outputpath = outpath;
mi = moduleinfo;
}
private String modulepath;
private String outputpath;
private ModuleInfo mi;
private boolean showdetails = false;
private static ModuleInfo mi;
private static boolean showdetails = false;
private class r8tor9 {
private static class r8tor9 {
r8tor9(String r8, String r9) {
r8thing = r8;
r9thing = r9;
@ -38,34 +31,17 @@ public final class SourceFileReplacer {
}
// these sets are used only for printing log of the changes in current file
private Set<r8tor9> filefunc = new HashSet<r8tor9>();
private Set<r8tor9> filemacro = new HashSet<r8tor9>();
private Set<r8tor9> fileguid = new HashSet<r8tor9>();
private Set<r8tor9> fileppi = new HashSet<r8tor9>();
private Set<r8tor9> fileprotocol = new HashSet<r8tor9>();
private Set<String> filer8only = new HashSet<String>();
private static final Set<r8tor9> filefunc = new HashSet<r8tor9>();
private static final Set<r8tor9> filemacro = new HashSet<r8tor9>();
private static final Set<r8tor9> fileguid = new HashSet<r8tor9>();
private static final Set<r8tor9> fileppi = new HashSet<r8tor9>();
private static final Set<r8tor9> fileprotocol = new HashSet<r8tor9>();
private static final Set<String> filer8only = new HashSet<String>();
private static final String r8only = "EfiLibInstallDriverBinding " +
"EfiLibInstallAllDriverProtocols " +
"EfiLibCompareLanguage " +
"BufToHexString " +
"EfiStrTrim " + //is the r8only lib going to be enlarged???? Caution !!!!
"EfiValueToHexStr " +
"HexStringToBuf " +
"IsHexDigit " +
"NibbleToHexChar " +
"GetHob " +
"GetHobListSize " +
"GetHobVersion " +
"GetHobBootMode " +
"GetCpuHobInfo " +
"GetDxeCoreHobInfo " +
"GetNextFirmwareVolumeHob " +
"GetNextGuidHob " +
"GetPalEntryHobInfo " +
"GetIoPortSpaceAddressHobInfo ";
public void flush() throws Exception {
public static final void flush(ModuleInfo moduleinfo) throws Exception {
mi = moduleinfo;
String outname = null;
String inname = null;
if (MigrationTool.ui.yesOrNo("Changes will be made to the Source Code. View details?")) {
@ -82,7 +58,7 @@ public final class SourceFileReplacer {
outname = inname;
}
MigrationTool.ui.println("\nModifying file: " + inname);
Common.string2file(sourcefilereplace(modulepath + File.separator + "temp" + File.separator + inname), outputpath + File.separator + "Migration_" + mi.modulename + File.separator + outname);
Common.string2file(sourcefilereplace(mi.modulepath + File.separator + "temp" + File.separator + inname), mi.outputpath + File.separator + "Migration_" + mi.modulename + File.separator + outname);
} else if (inname.contains(".h") || inname.contains(".H") || inname.contains(".dxs") || inname.contains(".uni")) {
if (inname.contains(".H")) {
outname = inname.replaceFirst(".H", ".h");
@ -90,7 +66,7 @@ public final class SourceFileReplacer {
outname = inname;
}
MigrationTool.ui.println("\nCopying file: " + inname);
Common.string2file(Common.file2string(modulepath + File.separator + "temp" + File.separator + inname), outputpath + File.separator + "Migration_" + mi.modulename + File.separator + outname);
Common.string2file(Common.file2string(mi.modulepath + File.separator + "temp" + File.separator + inname), mi.outputpath + File.separator + "Migration_" + mi.modulename + File.separator + outname);
}
}
@ -99,12 +75,12 @@ public final class SourceFileReplacer {
}
}
private void addr8only() throws Exception {
private static final void addr8only() throws Exception {
String paragraph = null;
String line = Common.file2string(Database.defaultpath + File.separator + "R8Lib.c");
Common.ensureDir(modulepath + File.separator + "result" + File.separator + "R8Lib.c");
PrintWriter outfile1 = new PrintWriter(new BufferedWriter(new FileWriter(outputpath + File.separator + "Migration_" + mi.modulename + File.separator + "R8Lib.c")));
PrintWriter outfile2 = new PrintWriter(new BufferedWriter(new FileWriter(outputpath + File.separator + "Migration_" + mi.modulename + File.separator + "R8Lib.h")));
String line = Common.file2string(MigrationTool.db.DatabasePath + File.separator + "R8Lib.c");
Common.ensureDir(mi.modulepath + File.separator + "result" + File.separator + "R8Lib.c");
PrintWriter outfile1 = new PrintWriter(new BufferedWriter(new FileWriter(mi.outputpath + File.separator + "Migration_" + mi.modulename + File.separator + "R8Lib.c")));
PrintWriter outfile2 = new PrintWriter(new BufferedWriter(new FileWriter(mi.outputpath + File.separator + "Migration_" + mi.modulename + File.separator + "R8Lib.h")));
Pattern ptnr8only = Pattern.compile("////#?(\\w*)?.*?R8_(\\w*).*?////~", Pattern.DOTALL);
Matcher mtrr8only = ptnr8only.matcher(line);
Matcher mtrr8onlyhead;
@ -132,7 +108,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!
private String sourcefilereplace(String filename) throws Exception {
private static final String sourcefilereplace(String filename) throws Exception {
BufferedReader rd = new BufferedReader(new FileReader(filename));
StringBuffer wholefile = new StringBuffer();
String line;
@ -198,7 +174,7 @@ public final class SourceFileReplacer {
Iterator<r8tor9> rt = filefunc.iterator();
while (rt.hasNext()) {
temp = rt.next();
if (r8only.contains(temp.r8thing)) {
if (MigrationTool.db.r8only.contains(temp.r8thing)) {
filer8only.add(r8thing);
mi.hashr8only.add(r8thing);
addr8 = true;
@ -297,7 +273,7 @@ public final class SourceFileReplacer {
return line;
}
private void show(Set<r8tor9> hash, String sh) {
private static final void show(Set<r8tor9> hash, String sh) {
Iterator<r8tor9> it = hash.iterator();
r8tor9 temp;
if (showdetails) {
@ -312,7 +288,7 @@ public final class SourceFileReplacer {
}
}
private void replaceGuid(String line, Set<String> hash, String kind, Set<r8tor9> filehash) {
private static final void replaceGuid(String line, Set<String> hash, String kind, Set<r8tor9> filehash) {
Iterator<String> it;
String r8thing;
String r9thing;