]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/FrameworkWizard/src/org/tianocore/frameworkwizard/workspace/WorkspaceTools.java
1. Fix EDKT408: Clone a library class does not copy the library head
[mirror_edk2.git] / Tools / Java / Source / FrameworkWizard / src / org / tianocore / frameworkwizard / workspace / WorkspaceTools.java
index 4e40d59efc16f54fd5d0db2018ae14ba5be93434..dedbdddf20b48c45d4355a0c14eaa102630ea3a3 100644 (file)
@@ -23,6 +23,8 @@ import org.apache.xmlbeans.XmlCursor;
 import org.apache.xmlbeans.XmlException;\r
 import org.tianocore.DbPathAndFilename;\r
 import org.tianocore.IndustryStdIncludesDocument.IndustryStdIncludes;\r
+import org.tianocore.LibraryClassDeclarationsDocument.LibraryClassDeclarations;\r
+import org.tianocore.LibraryClassDefinitionsDocument.LibraryClassDefinitions;\r
 import org.tianocore.ModuleSurfaceAreaDocument.ModuleSurfaceArea;\r
 import org.tianocore.MsaFilesDocument.MsaFiles;\r
 import org.tianocore.PackageDependenciesDocument.PackageDependencies;\r
@@ -676,6 +678,10 @@ public class WorkspaceTools {
         msaFile.setFilenameArray(msaFile.getFilenameList().size() - 1, fn);\r
         spd.setMsaFiles(msaFile);\r
         SaveFile.saveSpdFile(mid.getPackageId().getPath(), spd);\r
+        //\r
+        // Update GlobalData\r
+        //\r
+        GlobalData.openingPackageList.getPackageSurfaceAreaFromId(mid.getPackageId()).setMsaFiles(msaFile);\r
     }\r
 \r
     /**\r
@@ -733,10 +739,18 @@ public class WorkspaceTools {
     public Vector<String> getAllFilesPathOfModule(String path) {\r
         Vector<String> v = new Vector<String>();\r
         path = Tools.convertPathToCurrentOsType(path);\r
+\r
+        //\r
+        // First add msa file's path\r
+        //\r
         v.addElement(path);\r
+\r
         ModuleSurfaceArea msa = GlobalData.openingModuleList\r
                                                             .getModuleSurfaceAreaFromId(GlobalData.openingModuleList\r
                                                                                                                     .getIdByPath(path));\r
+        //\r
+        // Get common defined files of module\r
+        //\r
         if (msa != null) {\r
             //\r
             // Get all files' path of a module\r
@@ -751,6 +765,44 @@ public class WorkspaceTools {
             }\r
         }\r
 \r
+        //\r
+        // Get include header files for this module\r
+        //\r
+        if (msa.getLibraryClassDefinitions() != null) {\r
+            LibraryClassDefinitions lcd = msa.getLibraryClassDefinitions();\r
+            for (int index = 0; index < lcd.sizeOfLibraryClassArray(); index++) {\r
+                if (lcd.getLibraryClassList().get(index).getUsage().toString()\r
+                       .equals(DataType.USAGE_TYPE_ALWAYS_PRODUCED)\r
+                    || lcd.getLibraryClassList().get(index).getUsage().toString()\r
+                          .equals(DataType.USAGE_TYPE_SOMETIMES_PRODUCED)) {\r
+                    //\r
+                    // Get library class name\r
+                    //\r
+                    String name = lcd.getLibraryClassList().get(index).getKeyword();\r
+\r
+                    //\r
+                    // Find file path for this class\r
+                    //\r
+                    PackageIdentification pid = GlobalData.openingModuleList.getIdByPath(path).getPackageId();\r
+                    PackageSurfaceArea spd = GlobalData.openingPackageList.getPackageSurfaceAreaFromId(pid);\r
+                    if (spd != null) {\r
+                        if (spd.getLibraryClassDeclarations() != null) {\r
+                            LibraryClassDeclarations lcdl = spd.getLibraryClassDeclarations();\r
+                            for (int indexOfLibOfSpd = 0; indexOfLibOfSpd < lcdl.sizeOfLibraryClassArray(); indexOfLibOfSpd++) {\r
+                                if (lcdl.getLibraryClassList().get(indexOfLibOfSpd).getName().equals(name)) {\r
+                                    v.addElement(Tools.convertPathToCurrentOsType(Tools.getFilePathOnly(pid.getPath())\r
+                                                                                  + DataType.FILE_SEPARATOR\r
+                                                                                  + lcdl.getLibraryClassList()\r
+                                                                                        .get(indexOfLibOfSpd)\r
+                                                                                        .getIncludeHeader()));\r
+                                }\r
+                            }\r
+                        }\r
+                    }\r
+                }\r
+            }\r
+        }\r
+\r
         return v;\r
     }\r
 \r