]> git.proxmox.com Git - mirror_edk2.git/blobdiff - Tools/Java/Source/GenBuild/org/tianocore/build/global/SurfaceAreaQuery.java
Removed the BASE type as any type in the check of SupModuleList in getLibraryClasses()
[mirror_edk2.git] / Tools / Java / Source / GenBuild / org / tianocore / build / global / SurfaceAreaQuery.java
index 9e4c445508fa6774db1e5085755a1666ffecbe7c..36eda95c3f4791cdb8b695da2d4432db13e475bd 100644 (file)
@@ -38,6 +38,7 @@ import org.tianocore.build.id.PackageIdentification;
 import org.tianocore.build.id.PlatformIdentification;\r
 import org.tianocore.build.toolchain.ToolChainInfo;\r
 import org.tianocore.common.exception.EdkException;\r
+import org.tianocore.common.definitions.EdkDefinitions;\r
 import org.w3c.dom.Node;\r
 \r
 /**\r
@@ -76,8 +77,7 @@ public class SurfaceAreaQuery {
     //\r
     // keep the namep declaration for xmlbeans Xpath query\r
     //\r
-    private String queryDeclaration = null;\r
-\r
+    private String queryDeclaration = null;    \r
     private StringBuffer normQueryString = new StringBuffer(4096);\r
     private Pattern xPathPattern = Pattern.compile("([^/]*)(/|//)([^/]+)");\r
 \r
@@ -594,7 +594,7 @@ public class SurfaceAreaQuery {
      *          xpath\r
      * @returns null if nothing is there\r
      */\r
-    public String[] getLibraryClasses(String usage, String arch) {\r
+    public String[] getLibraryClasses(String usage, String arch, String moduleType) {\r
         String[] xPath;\r
         if (usage == null || usage.equals("")) {\r
             xPath = new String[] { "/LibraryClass" };\r
@@ -611,8 +611,9 @@ public class SurfaceAreaQuery {
         List<String> libraryClassName = new ArrayList<String>();\r
         for (int i = 0; i < libraryClassList.length; i++) {\r
                        List archList = libraryClassList[i].getSupArchList();\r
-\r
-                       if (arch == null || contains(archList, arch)) {\r
+            List moduleTypeList = libraryClassList[i].getSupModuleList();\r
+                       if ((arch == null || contains(archList, arch))\r
+                && (moduleType == null || contains(moduleTypeList, moduleType))) {\r
                 libraryClassName.add(libraryClassList[i].getKeyword());\r
                        }\r
         }\r
@@ -1948,30 +1949,56 @@ public class SurfaceAreaQuery {
         return new ModuleSADocument.ModuleSA[0];\r
 \r
     }\r
\r
     /**\r
-    Get name array of PCD in a module. In one module, token space\r
-    is same, and token name should not be conflicted.\r
-\r
-    @return String[]\r
+       Get name array who contains all PCDs in a module according to specified arch.\r
+       \r
+       @param arch          The specified architecture type.\r
+       \r
+       @return String[]     return all PCDs name into array, if no any PCD used by\r
+                            this module, a String[0] array is returned.\r
     **/\r
-    public String[] getModulePcdEntryNameArray() {\r
+    public String[] getModulePcdEntryNameArray(String arch) {\r
         PcdCodedDocument.PcdCoded.PcdEntry[] pcdEntries  = null;\r
-        String[]            results;\r
-        int                 index;\r
-        String[]            xPath       = new String[] {"/PcdEntry"};\r
-        Object[]         returns     = get ("PcdCoded", xPath);\r
+        java.util.List                       archList    = null;\r
+        java.util.List<String>               results     = new java.util.ArrayList<String> ();\r
+        int                                  index;\r
+        String[]                             xPath       = new String[] {"/PcdEntry"};\r
+        Object[]                             returns     = get ("PcdCoded", xPath);\r
 \r
         if (returns == null) {\r
             return new String[0];\r
         }\r
 \r
-        pcdEntries = (PcdCodedDocument.PcdCoded.PcdEntry[])returns;\r
-        results    = new String[pcdEntries.length];\r
+        pcdEntries  = (PcdCodedDocument.PcdCoded.PcdEntry[])returns;\r
 \r
         for (index = 0; index < pcdEntries.length; index ++) {\r
-            results[index] = pcdEntries[index].getCName();\r
+            archList        = pcdEntries[index].getSupArchList();\r
+            //\r
+            // If the ArchList is specified in MSA for this PCD, need check\r
+            // current arch whether can support by this PCD.\r
+            // \r
+            if (archList != null) {\r
+                if (archList.contains(arch)) {\r
+                    results.add(new String(pcdEntries[index].getCName()));\r
+                }\r
+            } else {\r
+                //\r
+                // If no ArchList is specificied in MSA for this PCD, that means\r
+                // this PCD support all architectures.\r
+                // \r
+                results.add(new String(pcdEntries[index].getCName()));\r
+            }\r
         }\r
-        return results;\r
+\r
+        if (results.size() == 0) {\r
+            return new String[0];\r
+        }\r
+\r
+        String[]    retArray = new String[results.size()];\r
+        results.toArray(retArray);\r
+\r
+        return retArray;        \r
     }\r
 \r
     /**\r
@@ -1983,15 +2010,8 @@ public class SurfaceAreaQuery {
                if (list == null || list.size()== 0) {\r
                        return true;\r
                }\r
-        Iterator it = list.iterator();\r
-        while (it.hasNext()) {\r
-            String s = (String)it.next();\r
-            if (s.equalsIgnoreCase(str)) {\r
-                return true;\r
-            }\r
-        }\r
 \r
-        return false;\r
+        return list.contains(str);\r
     }\r
 \r
        public boolean isHaveTianoR8FlashMap(){\r