]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Source/MigrationTools/org/tianocore/migration/Critic.java
enhance ForDoAll
[mirror_edk2.git] / Tools / Source / MigrationTools / org / tianocore / migration / Critic.java
index 97129b561b80570ea985197802b2e7f096c0d53b..95e95e9dd4cd5b2a456be65442e0c39ad9ce467b 100644 (file)
@@ -15,131 +15,186 @@ package org.tianocore.migration;
 import java.util.regex.*;\r
 import java.io.*;\r
 \r
-public class Critic implements Common.ForDoAll {\r
-       private static Pattern ptnheadcomment = Pattern.compile("^\\/\\*\\+\\+(.*?)\\-\\-\\*\\/",Pattern.DOTALL);\r
-       private static Pattern ptnfunccomment = Pattern.compile("([\\w\\d]*\\s*[_\\w][_\\w\\d]*\\s*\\([^\\)\\(]*\\)\\s*)(\\/\\*\\+\\+.*?)(\\-\\-\\*\\/\\s*)(.*?)([\\{;])",Pattern.DOTALL);\r
-       private static Pattern ptncommentstructure = Pattern.compile("\\/\\*\\+\\+\\s*Routine Description:\\s*(.*?)\\s*Arguments:\\s*(.*?)\\s*Returns:\\s*(.*?)\\s*\\-\\-\\*\\/",Pattern.DOTALL);\r
-       private static Pattern ptninfequation = Pattern.compile("([^\\s]*)\\s*-\\s*(.*)\\s*");\r
-       private static Matcher mtrinfequation;\r
-       private static Matcher mtrfunccomment;\r
+public final class Critic {\r
+       private static final Pattern ptnheadcomment = Pattern.compile("^\\/\\*\\+\\+(.*?)\\-\\-\\*\\/",Pattern.DOTALL);\r
+       private static final Pattern ptnfunccomment = Pattern.compile("([\\};\\/\">]\\s*)([\\w\\s]*?[_\\w][_\\w\\d]*\\s*\\([^\\)\\(]*\\)\\s*)\\/\\*\\+\\+(.*?)\\-\\-\\*\\/(\\s*.*?)([\\{;])",Pattern.DOTALL);           // find function with {;">/ , may be unsafe\r
+       //private static Pattern ptncommentstructure = Pattern.compile("\\/\\*\\+\\+\\s*Routine Description:\\s*(.*?)\\s*Arguments:\\s*(.*?)\\s*Returns:\\s*(.*?)\\s*\\-\\-\\*\\/",Pattern.DOTALL);\r
+       private static final Pattern ptncommentequation = Pattern.compile("([^\\s]*)\\s+-\\s+(.*)\\s*");\r
+       private static Matcher mtrcommentequation;\r
+       private static final Pattern ptnnewcomment = Pattern.compile("(\\s*@(param|retval)\\s+[^\\s]+)\\s+(.*)");\r
+       private static Matcher mtrnewcomment;\r
        \r
-       public void toDo(String filepath) throws Exception {\r
+       private static final int totallinelength = 82;\r
+       \r
+       public static final void run(String filepath) throws Exception {\r
+               if (MigrationTool.doCritic) {                                   // this is left here to set an example for future structure\r
+                       critic(filepath);\r
+               }\r
+       }\r
+       \r
+       private static final void critic(String filepath) throws Exception {\r
                if (filepath.contains(".c") || filepath.contains(".h")) {\r
                        BufferedReader rd = null;\r
                        String line = null;\r
                        StringBuffer templine = new StringBuffer();\r
-                       boolean description = false;\r
-                       boolean arguments = false;\r
-                       boolean returns = false;\r
-                       \r
+                       boolean incomment = false;\r
+\r
                        System.out.println("Criticing   " + filepath);\r
                        String wholeline = Common.file2string(filepath);\r
-                       \r
+\r
+                       wholeline = wholeline.replaceAll("\t", "  ");\r
                        wholeline = Common.replaceAll(wholeline, ptnheadcomment, "/** @file$1**/");\r
-                       //wholeline = Common.replaceAll(wholeline, ptnfunccomment, "$2$3$4$1$5");\r
+                       wholeline = Common.replaceAll(wholeline, ptnfunccomment, "$1/**$3**/$4$2$5");\r
                        //wholeline = Common.replaceAll(wholeline, ptncommentstructure, "/**\n#%\n$1\n%#\n#%%\n$2\n%%#\n#%%%\n$3\n%%%#\n**/");\r
-                       /*\r
+\r
+                       // first scan\r
+                       boolean description = false;\r
+                       boolean arguments = false;\r
+                       boolean returns = false;\r
+                       boolean inequation = false;\r
                        rd = new BufferedReader(new StringReader(wholeline));\r
                        while ((line = rd.readLine()) != null) {\r
-                               if (line.contains("\\-\\-\\*\\/")) {\r
+                               if (line.matches("\\/\\*\\*")) {\r
+                                       incomment = true;\r
                                        description = false;\r
                                        arguments = false;\r
                                        returns = false;\r
                                        templine.append(line + "\n");\r
-                               } else if (line.contains("Routine Description:")) {\r
-                                       description = true;\r
-                                       arguments = false;\r
-                                       returns = false;\r
-                               } else if (line.contains("Arguments:")) {\r
-                                       description = false;\r
-                                       arguments = true;\r
-                                       returns = false;\r
-                               } else if (line.contains("Returns:")) {\r
-                                       description = false;\r
-                                       arguments = false;\r
-                                       returns = true;\r
-                               } else if (description) {\r
+                               } else if (line.matches("\\*\\*\\/")) {\r
+                                       incomment = false;\r
                                        templine.append(line + "\n");\r
-                                       //System.out.println("Description:" + line);\r
-                               } else if (arguments) {\r
-                                       mtrinfequation = ptninfequation.matcher(line);\r
-                                       if (mtrinfequation.find()) {\r
-                                               templine.append("  @param   " + mtrinfequation.group(1) + "     " + mtrinfequation.group(2) + "\n");\r
-                                       } else {\r
-                                               templine.append(line + "\n");\r
+                               } else if (incomment) {\r
+                                       if (line.contains("Routine Description:")) {\r
+                                               description = true;\r
+                                               arguments = false;\r
+                                               returns = false;\r
+                                       } else if (line.contains("Arguments:")) {\r
+                                               description = false;\r
+                                               arguments = true;\r
+                                               returns = false;\r
+                                       } else if (line.contains("Returns:")) {\r
+                                               description = false;\r
+                                               arguments = false;\r
+                                               returns = true;\r
+                                       } else if (description) {\r
+                                               if (line.trim().length() != 0) {\r
+                                                       templine.append("  " + line.trim() + "\n");\r
+                                               }\r
+                                       } else if (arguments) {\r
+                                               mtrcommentequation = ptncommentequation.matcher(line);\r
+                                               if (mtrcommentequation.find()) {\r
+                                                       inequation = true;\r
+                                                       templine.append("  @param  " + mtrcommentequation.group(1) + "     " + mtrcommentequation.group(2) + "\n");\r
+                                               } else if (inequation && line.trim().length() == 0) {\r
+                                                       inequation = false;\r
+                                                       templine.append(line + "\n");\r
+                                               } else if (inequation && line.trim().length() != 0) {\r
+                                                       templine.append("#%#%" + line + "\n");\r
+                                               } else {\r
+                                                       templine.append("  " + line.trim() + "\n");\r
+                                               }\r
+                                       } else if (returns) {\r
+                                               mtrcommentequation = ptncommentequation.matcher(line);\r
+                                               if (mtrcommentequation.find()) {\r
+                                                       inequation = true;\r
+                                                       templine.append("  @retval " + mtrcommentequation.group(1) + "     " + mtrcommentequation.group(2) + "\n");\r
+                                               } else if (inequation && line.trim().length() == 0) {\r
+                                                       inequation = false;\r
+                                                       templine.append(line + "\n");\r
+                                               } else if (inequation && line.trim().length() != 0) {\r
+                                                       templine.append("#%#%" + line + "\n");\r
+                                               } else {\r
+                                                       templine.append("  " + line.trim() + "\n");\r
+                                               }\r
                                        }\r
-                                       //System.out.println("Arguments:" + line);\r
-                               } else if (returns) {\r
-                                       mtrinfequation = ptninfequation.matcher(line);\r
-                                       if (mtrinfequation.find()) {\r
-                                               templine.append("  @retval   " + mtrinfequation.group(1) + "     " + mtrinfequation.group(2) + "\n");\r
-                                       } else {\r
-                                               templine.append(line + "\n");\r
-                                       }\r
-                                       //System.out.println("Returns:" + line);\r
                                } else {\r
                                        templine.append(line + "\n");\r
                                }\r
                        }\r
-                       wholeline = templine.toString();*/\r
-                       /* -----slow edition of replacefirst with stringbuffer-----\r
-                       line.append(wholeline);\r
-                       mtrfunccomment = ptnfunccomment.matcher(line);\r
-                       while (mtrfunccomment.find()) {\r
-                               line.replace(0, line.length()-1, mtrfunccomment.replaceFirst("$2$4$3$1$5"));\r
-                       }\r
-                       */\r
-                       // -----slow edition of replacefirst with string-----\r
-                       while ((mtrfunccomment = ptnfunccomment.matcher(wholeline)).find()) {\r
-                               //funccomment = mtrfunccomment.group(2);\r
-                               //mtrcommentstructure = ptncommentstructure.matcher(funccomment);\r
-                               wholeline = mtrfunccomment.replaceFirst("$2$4$3$1$5");\r
+                       wholeline = templine.toString();\r
+                       wholeline = wholeline.replaceAll("\n#%#%\\s*", " ");\r
+                       //\r
+                       \r
+                       // secend scan\r
+                       int startmax = 0;\r
+                       rd = new BufferedReader(new StringReader(wholeline));\r
+                       while ((line = rd.readLine()) != null) {\r
+                               if (line.matches("\\/\\*\\*")) {\r
+                                       incomment = true;\r
+                                       templine.append(line + "\n");\r
+                               } else if (line.matches("\\*\\*\\/")) {\r
+                                       incomment = false;\r
+                                       templine.append(line + "\n");\r
+                               } else if (incomment) {\r
+                                       mtrnewcomment = ptnnewcomment.matcher(line);\r
+                                       if (mtrnewcomment.find()) {\r
+                                               startmax = mtrnewcomment.group(1).length() > startmax ? mtrnewcomment.group(1).length() : startmax;\r
+                                       }\r
+                               }\r
                        }\r
+                       startmax++;\r
+                       //\r
                        \r
-                       /*\r
-                       // edit func comment\r
-                       mtrtempcomment = ptntempcomment.matcher(wholeline);\r
-                       while (mtrtempcomment.find()) {\r
-                               System.out.println("-----------------------------");\r
-                               System.out.println(mtrtempcomment.group());\r
-                               System.out.println("-----------------------------");\r
+                       // third scan\r
+                       int n = 0;\r
+                       String temp = null;\r
+                       String[] tempcont = null;\r
+                       int count = 0;\r
+                       templine = new StringBuffer();\r
+                       rd = new BufferedReader(new StringReader(wholeline));\r
+                       while ((line = rd.readLine()) != null) {\r
+                               if (line.matches("\\/\\*\\*")) {\r
+                                       incomment = true;\r
+                                       templine.append(line + "\n");\r
+                               } else if (line.matches("\\*\\*\\/")) {\r
+                                       incomment = false;\r
+                                       templine.append(line + "\n");\r
+                               } else if (incomment) {\r
+                                       mtrnewcomment = ptnnewcomment.matcher(line);\r
+                                       if (mtrnewcomment.find()) {\r
+                                               n = startmax - mtrnewcomment.group(1).length();\r
+                                               templine.append(mtrnewcomment.group(1));\r
+                                               while (n-- >= 0) {\r
+                                                       templine.append(" ");\r
+                                               }\r
+                                               temp = mtrnewcomment.group(3);\r
+                                               tempcont = temp.split(" ");                                                     // use \\s+ ?\r
+                                               \r
+                                               count = 0;\r
+                                               for (int i = 0; i < tempcont.length; i++) {\r
+                                                       count += tempcont[i].length();\r
+                                                       if (count <= (totallinelength - startmax)) {\r
+                                                               templine.append(tempcont[i] + " ");\r
+                                                               count += 1;\r
+                                                       } else {\r
+                                                               templine.append("\n");\r
+                                                               n = startmax;\r
+                                                               while (n-- >= 0) {\r
+                                                                       templine.append(" ");\r
+                                                               }\r
+                                                               templine.append(tempcont[i] + " ");\r
+                                                               count = tempcont[i].length() + 1;\r
+                                                       }\r
+                                               }\r
+                                               templine.append("\n");\r
+                                       } else {\r
+                                               templine.append(line + "\n");\r
+                                       }\r
+                               } else {\r
+                                       templine.append(line + "\n");\r
+                               }\r
                        }\r
-                       */\r
+                       wholeline = templine.toString();\r
+                       //\r
+\r
                        Common.string2file(wholeline, filepath);\r
                }\r
        }\r
        \r
-       public static void fireAt(String path) throws Exception {\r
-               Critic critic = new Critic();\r
-               Common.toDoAll(Common.dirCopy_(path), critic);\r
+       public static final void fireAt(String path) throws Exception {\r
+               //Common.toDoAll(Common.dirCopy_(path), Critic.class.getMethod("critic", String.class), null, null, Common.FILE);\r
+               Common.toDoAll(path, Critic.class.getMethod("run", String.class), null, null, Common.FILE);\r
+               //Common.toDoAll(Common.dirCopy_(path), critic, Common.FILE);\r
                System.out.println("Critic Done");\r
        }\r
-}\r
-//analyze func comment\r
-/*if (mtrcommentstructure.find()) {\r
-       newcomment.append("/*++\n\n" + mtrcommentstructure.group(1) + "\n\n");\r
-       \r
-       //System.out.println("-------1-------");\r
-       //System.out.println(mtrcommentstructure.group(1));\r
-       \r
-       // arg\r
-       //System.out.println("-------2-------");\r
-       //System.out.println(mtrcommentstructure.group(2));\r
-       mtrinfequation = ptninfequation.matcher(mtrcommentstructure.group(2));\r
-       while (mtrinfequation.find()) {\r
-               newcomment.append("@param   " + mtrinfequation.group(1) + "            " + mtrinfequation.group(2) + "\n");\r
-               //System.out.println("@param   " + mtrinfequation.group(1) + "   " + mtrinfequation.group(2));\r
-       }\r
-       newcomment.append("\n");\r
-       // return\r
-       //System.out.println("-------3-------");\r
-       //System.out.println(mtrcommentstructure.group(3));\r
-       mtrinfequation = ptninfequation.matcher(mtrcommentstructure.group(3));\r
-       while (mtrinfequation.find()) {\r
-               newcomment.append("@retval   " + mtrinfequation.group(1) + "            " + mtrinfequation.group(2) + "\n");\r
-               //System.out.println("@retval   " + mtrinfequation.group(1) + "   " + mtrinfequation.group(2));\r
-       }\r
-       System.out.println(newcomment);\r
-} else {\r
-       System.out.println("Error: Comment Style Incorrect");\r
-}*/
\ No newline at end of file
+}
\ No newline at end of file