From: jwang36 Date: Fri, 18 Aug 2006 00:54:57 +0000 (+0000) Subject: Added to fix the issue of many property override warning when build with -v option... X-Git-Tag: edk2-stable201903~24555 X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=commitdiff_plain;h=471e8e4c3dd416a9d5a72116bfc0cb7dc1fd05b7;ds=sidebyside Added to fix the issue of many property override warning when build with -v option; and also improve the build performance. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1318 6f19259b-4bc3-4df7-8a09-765794883524 --- diff --git a/Tools/Source/GenBuild/org/tianocore/build/global/PropertyManager.java b/Tools/Source/GenBuild/org/tianocore/build/global/PropertyManager.java new file mode 100644 index 0000000000..50a2ead4aa --- /dev/null +++ b/Tools/Source/GenBuild/org/tianocore/build/global/PropertyManager.java @@ -0,0 +1,100 @@ +package org.tianocore.build.global; + +import java.util.HashMap; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.Set; +import java.util.Stack; + +import org.apache.tools.ant.Project; +import org.apache.tools.ant.PropertyHelper; + +public class PropertyManager { + private static Stack> propertyTableStack = new Stack>(); + private static HashMap orgPropertyTable = null; + private static HashMap oldPropertyTable = null; + private static HashMap bakPropertyTable = null; + private static Project prj = null; + + public static void save() { + if (orgPropertyTable == null) { + Hashtable prjProperties = prj.getProperties(); + orgPropertyTable = new HashMap(); + + Set keys = prjProperties.keySet(); + Iterator iter = keys.iterator(); + while (iter.hasNext()) { + String item = (String)iter.next(); + orgPropertyTable.put(item, (String)prjProperties.get(item)); + } + } + + if (bakPropertyTable != null) { + propertyTableStack.push(bakPropertyTable); + oldPropertyTable = bakPropertyTable; + } else { + oldPropertyTable = orgPropertyTable; + } + bakPropertyTable = new HashMap(); + } + + public static void restore() { + if (bakPropertyTable == null) { + return; + } + Set keys = bakPropertyTable.keySet(); + + Iterator iter = keys.iterator(); + while (iter.hasNext()) { + String name = (String)iter.next(); + String value = (String)bakPropertyTable.get(name); + setProperty(prj, name, value); + } + + if (propertyTableStack.size() > 0) { + bakPropertyTable = (HashMap)propertyTableStack.pop(); + } else { + bakPropertyTable = null; + } + + if (propertyTableStack.size() == 0) { + oldPropertyTable = orgPropertyTable; + } else { + oldPropertyTable = (HashMap)propertyTableStack.peek(); + } + } + + public static void setProject(Project prj) { + PropertyManager.prj = prj; + } + + public static void setProperty(String name, String value) { + if (prj == null) { + return; + } + + setProperty(prj, name, value); + + if (oldPropertyTable == null || bakPropertyTable == null) { + return; + } + + String oldValue = oldPropertyTable.get(name); + if (oldValue == null) { + oldValue = value; + } + bakPropertyTable.put(name, oldValue); + } + + public static void setProperty(Project project, String name, String value) { + if (project == null) { + if (prj == null) { + return; + } + project = prj; + } + + PropertyHelper.getPropertyHelper(project).setProperty(null, name, value, false); + } +} +