From e55d8a3c6b8bdf3a228ae4d9f8afbdecdd36444b Mon Sep 17 00:00:00 2001 From: klu2 Date: Sun, 6 Aug 2006 07:26:05 +0000 Subject: [PATCH 1/1] In preprocess for getting platform PCD information, if meet error, put error into stack but not stop immediately, all errors will be summaried after preprocess working. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1194 6f19259b-4bc3-4df7-8a09-765794883524 --- ...latformPcdPreprocessActionForBuilding.java | 36 ++- .../action/PlatformPcdPreprocessAction.java | 245 ++++++++++++------ .../pcd/entity/MemoryDatabaseManager.java | 4 + .../pcd/entity/ModulePcdInfoFromFpd.java | 4 +- 4 files changed, 199 insertions(+), 90 deletions(-) diff --git a/Tools/Source/GenBuild/org/tianocore/build/pcd/action/PlatformPcdPreprocessActionForBuilding.java b/Tools/Source/GenBuild/org/tianocore/build/pcd/action/PlatformPcdPreprocessActionForBuilding.java index fd1ae56eb6..7dd90886b9 100644 --- a/Tools/Source/GenBuild/org/tianocore/build/pcd/action/PlatformPcdPreprocessActionForBuilding.java +++ b/Tools/Source/GenBuild/org/tianocore/build/pcd/action/PlatformPcdPreprocessActionForBuilding.java @@ -28,18 +28,19 @@ import java.util.Map; import org.apache.xmlbeans.XmlException; import org.apache.xmlbeans.XmlObject; import org.tianocore.DynamicPcdBuildDefinitionsDocument.DynamicPcdBuildDefinitions; +import org.tianocore.PcdBuildDefinitionDocument; import org.tianocore.PlatformSurfaceAreaDocument; +import org.tianocore.build.exception.PlatformPcdPreprocessBuildException; import org.tianocore.build.fpd.FpdParserTask; import org.tianocore.build.global.GlobalData; import org.tianocore.build.id.FpdModuleIdentification; import org.tianocore.pcd.action.ActionMessage; -import org.tianocore.pcd.entity.ModulePcdInfoFromFpd; +import org.tianocore.pcd.action.PlatformPcdPreprocessAction; import org.tianocore.pcd.entity.MemoryDatabaseManager; +import org.tianocore.pcd.entity.ModulePcdInfoFromFpd; import org.tianocore.pcd.entity.Token; import org.tianocore.pcd.entity.UsageIdentification; import org.tianocore.pcd.exception.EntityException; -import org.tianocore.pcd.action.PlatformPcdPreprocessAction; -import org.tianocore.build.exception.PlatformPcdPreprocessBuildException; import org.tianocore.pcd.exception.PlatformPcdPreprocessException; /** @@ -120,7 +121,9 @@ public class PlatformPcdPreprocessActionForBuilding extends PlatformPcdPreproces **/ public void execute() throws PlatformPcdPreprocessBuildException { - String errorMessageHeader = "Fail to initialize Pcd memory database for building. Because:"; + String errorMessageHeader = "Fail to initialize Pcd memory database for building. Because:"; + String errorsForPreprocess = null; + // // Get memoryDatabaseManager instance from GlobalData. // The memoryDatabaseManager should be initialized as static variable @@ -138,6 +141,10 @@ public class PlatformPcdPreprocessActionForBuilding extends PlatformPcdPreproces } catch (PlatformPcdPreprocessException exp) { throw new PlatformPcdPreprocessBuildException(errorMessageHeader + exp.getMessage()); } + errorsForPreprocess = this.getErrorString(); + if (errorsForPreprocess != null) { + throw new PlatformPcdPreprocessBuildException(errorMessageHeader + "\r\n" + errorsForPreprocess); + } // // Generate for PEI, DXE PCD DATABASE's definition and initialization. @@ -228,7 +235,10 @@ public class PlatformPcdPreprocessActionForBuilding extends PlatformPcdPreproces id.getArch(), id.getModule().getVersion(), id.getModule().getModuleType()); - allModules.add(new ModulePcdInfoFromFpd(usageId, pcdBuildDefinitions.get(id))); + allModules.add( + new ModulePcdInfoFromFpd( + usageId, + ((PcdBuildDefinitionDocument)pcdBuildDefinitions.get(id)).getPcdBuildDefinition())); } return allModules; } @@ -542,7 +552,7 @@ public class PlatformPcdPreprocessActionForBuilding extends PlatformPcdPreproces return exceptionString; } } else { - exceptionString = String.format("[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n "+ + exceptionString = String.format("[FPD file error] The datum type of PCD %s in %s is VOID*. For VOID* type, you have three format choise:\n"+ "1) UNICODE string: like L\"xxxx\";\r\n"+ "2) ANSIC string: like \"xxx\";\r\n"+ "3) Byte array: like {0x2, 0x45, 0x23}\r\n"+ @@ -602,19 +612,18 @@ public class PlatformPcdPreprocessActionForBuilding extends PlatformPcdPreproces "PCD entry %s in module %s!", token.cName, moduleName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + return null; } dynamicPcdBuildDataArray = dynamicPcdBuildDefinitions.getPcdBuildDataList(); for (index = 0; index < dynamicPcdBuildDataArray.size(); index ++) { - try { - tokenSpaceStrRet = GlobalData.getGuidInfoFromCname(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuidCName()); - } catch (Exception e) { - throw new PlatformPcdPreprocessException ("Fail to get token space guid for token " + dynamicPcdBuildDataArray.get(index).getCName()); - } + tokenSpaceStrRet = this.getGuidInfoFromSpd(dynamicPcdBuildDataArray.get(index).getTokenSpaceGuidCName()); if (tokenSpaceStrRet == null) { - throw new PlatformPcdPreprocessException ("Fail to get token space guid for token " + dynamicPcdBuildDataArray.get(index).getCName()); + exceptionString = "Fail to get token space guid for token " + dynamicPcdBuildDataArray.get(index).getCName(); + putError(exceptionString); + continue; } dynamicPrimaryKey = Token.getPrimaryKeyString(dynamicPcdBuildDataArray.get(index).getCName(), @@ -655,6 +664,7 @@ public class PlatformPcdPreprocessActionForBuilding extends PlatformPcdPreproces dynamicPcdBuildDefinitions = fpdDocInstance.getPlatformSurfaceArea().getDynamicPcdBuildDefinitions(); if (dynamicPcdBuildDefinitions == null) { + putError("There is no in FPD file!"); return null; } diff --git a/Tools/Source/PcdTools/org/tianocore/pcd/action/PlatformPcdPreprocessAction.java b/Tools/Source/PcdTools/org/tianocore/pcd/action/PlatformPcdPreprocessAction.java index 04ebf89684..ac346d69c2 100644 --- a/Tools/Source/PcdTools/org/tianocore/pcd/action/PlatformPcdPreprocessAction.java +++ b/Tools/Source/PcdTools/org/tianocore/pcd/action/PlatformPcdPreprocessAction.java @@ -42,6 +42,24 @@ public abstract class PlatformPcdPreprocessAction { /// private MemoryDatabaseManager pcdDbManager; + /// + /// Errors string when perform preprocess + /// + private String errorString; + + /// + /// the count of errors when perform preprocess + /// + private int errorCount; + + /** + Default contructor function + **/ + public PlatformPcdPreprocessAction() { + pcdDbManager = null; + errorString = null; + } + /** Set parameter pcdDbManager @@ -130,6 +148,25 @@ public abstract class PlatformPcdPreprocessAction { getAllDynamicPcdInfoFromFpd() throws PlatformPcdPreprocessException; + /** + Return the error string after preprocess + + @return String error string + **/ + public String getErrorString() { + return errorString; + } + + public void putError(String error) { + if (errorString == null) { + errorString = "### ERROR[" + errorCount + "] ###\r\n" + error + "\r\n\r\n"; + } else { + errorString += "### ERROR[" + errorCount + "] ###\r\n" + error + "\r\n\r\n"; + } + + errorCount++; + } + /** Collect all PCD information from FPD file into PCD memory database. @@ -193,9 +230,13 @@ public abstract class PlatformPcdPreprocessAction { tokenSpaceStrRet = getGuidInfoFromSpd(pcdBuildData.getTokenSpaceGuidCName()); if (tokenSpaceStrRet == null) { - throw new PlatformPcdPreprocessException( - "Fail to get Token space guid for token" + pcdBuildData.getCName() + - " from all SPD files. You must have an for this token space Guid"); + putError("Fail to get Token space guid for token" + pcdBuildData.getCName() + + " from all SPD files. You must have an for this token space Guid"); + // + // Do not break preprocess, continues to analysis. + // All errors will be summary to be shown. + // + continue; } primaryKey = Token.getPrimaryKeyString(pcdBuildData.getCName(), tokenSpaceStrRet[1]); @@ -215,7 +256,12 @@ public abstract class PlatformPcdPreprocessAction { "datum type of this PCD entry is not BOOLEAN!", pcdBuildData.getCName(), moduleName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + // + // Do not break preprocess, continues to analysis. + // All errors will be summary to be shown. + // + continue; } // @@ -231,7 +277,12 @@ public abstract class PlatformPcdPreprocessAction { exceptionString = String.format("In FPD file, there is no value for PCD entry %s in module %s!", pcdBuildData.getCName(), moduleName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + // + // Do not break preprocess, continues to analysis. + // All errors will be summary to be shown. + // + continue; } // @@ -242,7 +293,12 @@ public abstract class PlatformPcdPreprocessAction { datum, datumType, maxDatumSize)) != null) { - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + // + // Do not break preprocess, continues to analysis. + // All errors will be summary to be shown. + // + continue; } } @@ -267,7 +323,12 @@ public abstract class PlatformPcdPreprocessAction { pcdBuildData.getCName(), pcdBuildData.getDatumType().toString(), Token.getStringOfdatumType(token.datumType)); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + // + // Do not break preprocess, continues to analysis. + // All errors will be summary to be shown. + // + continue; } // @@ -277,7 +338,12 @@ public abstract class PlatformPcdPreprocessAction { exceptionString = String.format("In FPD file, the token number of PCD entry %s in module %s is different with same PCD entry in other modules!", pcdBuildData.getCName(), moduleName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + // + // Do not break preprocess, continues to analysis. + // All errors will be summary to be shown. + // + continue; } // @@ -288,7 +354,12 @@ public abstract class PlatformPcdPreprocessAction { " is different with others module's", token.cName, moduleName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + // + // Do not break preprocess, continues to analysis. + // All errors will be summary to be shown. + // + continue; } if (token.isDynamicPCD) { @@ -306,7 +377,12 @@ public abstract class PlatformPcdPreprocessAction { "illega! You could no set in for a dynamic PCD!", token.cName, moduleName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + // + // Do not break preprocess, continues to analysis. + // All errors will be summary to be shown. + // + continue; } } @@ -318,7 +394,12 @@ public abstract class PlatformPcdPreprocessAction { moduleName, maxDatumSize, token.datumSize); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + // + // Do not break preprocess, continues to analysis. + // All errors will be summary to be shown. + // + continue; } } @@ -330,10 +411,13 @@ public abstract class PlatformPcdPreprocessAction { tokenSpaceStrRet = this.getGuidInfoFromSpd(pcdBuildData.getTokenSpaceGuidCName()); if (tokenSpaceStrRet == null) { - throw new PlatformPcdPreprocessException( - "Fail to get Token space guid for token" + token.cName + - " from all SPD files. You must have an for this token space Guid"); - + putError("Fail to get Token space guid for token" + token.cName + + " from all SPD files. You must have an for this token space Guid"); + // + // Do not break preprocess, continues to analysis. + // All errors will be summary to be shown. + // + continue; } token = new Token(pcdBuildData.getCName(), tokenSpaceStrRet[1]); @@ -348,10 +432,12 @@ public abstract class PlatformPcdPreprocessAction { // For Dynamic and Dynamic Ex type, need find the dynamic information // in section in FPD file. // - updateDynamicInformation(moduleName, - token, - datum, - maxDatumSize); + if (null == updateDynamicInformation(moduleName, + token, + datum, + maxDatumSize)) { + continue; + } } pcdDbManager.addTokenToDatabase(primaryKey, token); @@ -375,12 +461,13 @@ public abstract class PlatformPcdPreprocessAction { datum, maxDatumSize); if (!token.addUsageInstance(usageInstance)) { - throw new PlatformPcdPreprocessException( - String.format("PCD %s for module %s has already exist in database, Please check all PCD build entries "+ - "in modules %s in to make sure no duplicated definitions in FPD file!", - token.cName, - moduleName, - moduleName)); + putError(String.format("PCD %s for module %s(%s) has already exist in database, Please check all PCD build entries "+ + "in modules %s in to make sure no duplicated definitions in FPD file!", + token.cName, + modules.get(index).usageId.moduleGuid, + moduleName, + moduleName)); + continue; } } } @@ -437,7 +524,8 @@ public abstract class PlatformPcdPreprocessAction { "in FPD file, but it is required!", token.cName, moduleName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + return null; } token.datumSize = dynamicInfo.getMaxDatumSize(); @@ -459,7 +547,8 @@ public abstract class PlatformPcdPreprocessAction { moduleName, maxDatumSize, dynamicInfo.getMaxDatumSize()); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + return null; } tokenNumber = Long.decode(dynamicInfo.getToken().toString()); if (tokenNumber != token.tokenNumber) { @@ -469,7 +558,8 @@ public abstract class PlatformPcdPreprocessAction { moduleName, token.tokenNumber, tokenNumber); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + return null; } token.dynamicExTokenNumber = tokenNumber; @@ -499,7 +589,8 @@ public abstract class PlatformPcdPreprocessAction { skuInfoList.get(index).getValue().toString(), token.datumType, token.datumSize)) != null) { - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + return null; } token.skuData.add(skuInstance); @@ -514,7 +605,8 @@ public abstract class PlatformPcdPreprocessAction { exceptionString = "In FPD file, for dynamic PCD " + token.cName + ", the value in module " + moduleName + " is " + datum.toString() + " but the "+ "value of sku 0 data in is " + skuInstance.value.value + ". They are must be same!"+ " or you could not define value for a dynamic PCD in every !"; - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + return null; } } continue; @@ -530,9 +622,8 @@ public abstract class PlatformPcdPreprocessAction { "file, who use HII, but there is no defined for Sku %d data!", token.cName, index); - if (exceptionString != null) { - throw new PlatformPcdPreprocessException(exceptionString); - } + putError(exceptionString); + return null; } if (skuInfoList.get(index).getVariableOffset() == null) { @@ -540,9 +631,8 @@ public abstract class PlatformPcdPreprocessAction { "file, who use HII, but there is no defined for Sku %d data!", token.cName, index); - if (exceptionString != null) { - throw new PlatformPcdPreprocessException(exceptionString); - } + putError(exceptionString); + return null; } if (skuInfoList.get(index).getHiiDefaultValue() == null) { @@ -550,9 +640,8 @@ public abstract class PlatformPcdPreprocessAction { "file, who use HII, but there is no defined for Sku %d data!", token.cName, index); - if (exceptionString != null) { - throw new PlatformPcdPreprocessException(exceptionString); - } + putError(exceptionString); + return null; } if (skuInfoList.get(index).getHiiDefaultValue() != null) { @@ -571,11 +660,11 @@ public abstract class PlatformPcdPreprocessAction { offset = Integer.decode(skuInfoList.get(index).getVariableOffset()); if (offset > 0xFFFF) { - throw new PlatformPcdPreprocessException( - String.format("In FPD file, for dynamic PCD %s , the variable offset defined in sku %d data "+ - "exceed 64K, it is not allowed!", - token.cName, - index)); + putError(String.format("In FPD file, for dynamic PCD %s , the variable offset defined in sku %d data "+ + "exceed 64K, it is not allowed!", + token.cName, + index)); + return null; } // @@ -583,10 +672,10 @@ public abstract class PlatformPcdPreprocessAction { // variableGuidString = getGuidInfoFromSpd(skuInfoList.get(index).getVariableGuid().toString()); if (variableGuidString == null) { - throw new PlatformPcdPreprocessException( - String.format("In FPD file, for dynamic PCD %s, the variable guid %s can be found in all SPD file!", - token.cName, - skuInfoList.get(index).getVariableGuid().toString())); + putError(String.format("In FPD file, for dynamic PCD %s, the variable guid %s can be found in all SPD file!", + token.cName, + skuInfoList.get(index).getVariableGuid().toString())); + return null; } String variableStr = skuInfoList.get(index).getVariableName(); Pattern pattern = Pattern.compile("0x([a-fA-F0-9]){4}"); @@ -614,14 +703,16 @@ public abstract class PlatformPcdPreprocessAction { exceptionString = String.format("In FPD file, for dynamic PCD %s, the dynamic info must "+ "be one of 'DefaultGroup', 'HIIGroup', 'VpdGroup'.", token.cName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + return null; } if (!hasSkuId0) { exceptionString = String.format("In FPD file, for dynamic PCD %s in , there are "+ "no sku id = 0 data, which is required for every dynamic PCD", token.cName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + return null; } return token; @@ -660,7 +751,8 @@ public abstract class PlatformPcdPreprocessAction { tokenSpaceStrRet = this.getGuidInfoFromSpd(pcdBuildData.getTokenSpaceGuidCName()); if (tokenSpaceStrRet == null) { - throw new PlatformPcdPreprocessException("Fail to get Token space guid for token" + pcdBuildData.getCName()); + putError("Fail to get Token space guid for token" + pcdBuildData.getCName()); + continue; } primaryKey = Token.getPrimaryKeyString(pcdBuildData.getCName(), @@ -672,9 +764,9 @@ public abstract class PlatformPcdPreprocessAction { pcdType = Token.getPcdTypeFromString(pcdBuildData.getItemType().toString()); if (pcdType != Token.PCD_TYPE.DYNAMIC_EX) { - throw new PlatformPcdPreprocessException( - String.format("In FPD file, it not allowed for DYNAMIC PCD %s who is no used by any module", - pcdBuildData.getCName())); + putError(String.format("In FPD file, it not allowed for DYNAMIC PCD %s who is no used by any module", + pcdBuildData.getCName())); + continue; } // @@ -696,7 +788,8 @@ public abstract class PlatformPcdPreprocessAction { token.datumType, token.datumSize); if (exceptionString != null) { - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + continue; } skuInfoList = pcdBuildData.getSkuInfoList(); @@ -724,7 +817,8 @@ public abstract class PlatformPcdPreprocessAction { skuInfoList.get(index).getValue().toString(), token.datumType, token.datumSize)) != null) { - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + continue; } token.skuData.add(skuInstance); @@ -742,9 +836,8 @@ public abstract class PlatformPcdPreprocessAction { "file, who use HII, but there is no defined for Sku %d data!", token.cName, index); - if (exceptionString != null) { - throw new PlatformPcdPreprocessException(exceptionString); - } + putError(exceptionString); + continue; } if (skuInfoList.get(index).getVariableOffset() == null) { @@ -752,9 +845,8 @@ public abstract class PlatformPcdPreprocessAction { "file, who use HII, but there is no defined for Sku %d data!", token.cName, index); - if (exceptionString != null) { - throw new PlatformPcdPreprocessException(exceptionString); - } + putError(exceptionString); + continue; } if (skuInfoList.get(index).getHiiDefaultValue() == null) { @@ -762,9 +854,8 @@ public abstract class PlatformPcdPreprocessAction { "file, who use HII, but there is no defined for Sku %d data!", token.cName, index); - if (exceptionString != null) { - throw new PlatformPcdPreprocessException(exceptionString); - } + putError(exceptionString); + continue; } if (skuInfoList.get(index).getHiiDefaultValue() != null) { @@ -778,16 +869,18 @@ public abstract class PlatformPcdPreprocessAction { hiiDefaultValue, token.datumType, token.datumSize)) != null) { - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + continue; } offset = Integer.decode(skuInfoList.get(index).getVariableOffset()); if (offset > 0xFFFF) { - throw new PlatformPcdPreprocessException( - String.format("In FPD file, for dynamic PCD %s , the variable offset defined in sku %d data "+ + exceptionString = String.format("In FPD file, for dynamic PCD %s , the variable offset defined in sku %d data "+ "exceed 64K, it is not allowed!", token.cName, - index)); + index); + putError(exceptionString); + continue; } // @@ -795,10 +888,11 @@ public abstract class PlatformPcdPreprocessAction { // variableGuidString = this.getGuidInfoFromSpd(skuInfoList.get(index).getVariableGuid().toString()); if (variableGuidString == null) { - throw new PlatformPcdPreprocessException( - String.format("In FPD file, for dynamic PCD %s, the variable guid %s can be found in all SPD file!", - token.cName, - skuInfoList.get(index).getVariableGuid().toString())); + exceptionString = String.format("In FPD file, for dynamic PCD %s, the variable guid %s can be found in all SPD file!", + token.cName, + skuInfoList.get(index).getVariableGuid().toString()); + putError(exceptionString); + continue; } String variableStr = skuInfoList.get(index).getVariableName(); Pattern pattern = Pattern.compile("0x([a-fA-F0-9]){4}"); @@ -826,14 +920,15 @@ public abstract class PlatformPcdPreprocessAction { exceptionString = String.format("In FPD file, for dynamic PCD %s, the dynamic info must "+ "be one of 'DefaultGroup', 'HIIGroup', 'VpdGroup'.", token.cName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); } if (!hasSkuId0) { exceptionString = String.format("In FPD file, for dynamic PCD %s in , there are "+ "no sku id = 0 data, which is required for every dynamic PCD", token.cName); - throw new PlatformPcdPreprocessException(exceptionString); + putError(exceptionString); + continue; } tokenArray.add(token); diff --git a/Tools/Source/PcdTools/org/tianocore/pcd/entity/MemoryDatabaseManager.java b/Tools/Source/PcdTools/org/tianocore/pcd/entity/MemoryDatabaseManager.java index ba0e3ca229..2962e748a2 100644 --- a/Tools/Source/PcdTools/org/tianocore/pcd/entity/MemoryDatabaseManager.java +++ b/Tools/Source/PcdTools/org/tianocore/pcd/entity/MemoryDatabaseManager.java @@ -235,6 +235,10 @@ public class MemoryDatabaseManager { return getUsageInstanceArrayByKeyString(primaryKey); } + public void clearDatabase() { + memoryDatabase.clear(); + } + /** Get all PCD token for a usage instance according to primary key. diff --git a/Tools/Source/PcdTools/org/tianocore/pcd/entity/ModulePcdInfoFromFpd.java b/Tools/Source/PcdTools/org/tianocore/pcd/entity/ModulePcdInfoFromFpd.java index 09abb6f956..fe9f7ecabc 100644 --- a/Tools/Source/PcdTools/org/tianocore/pcd/entity/ModulePcdInfoFromFpd.java +++ b/Tools/Source/PcdTools/org/tianocore/pcd/entity/ModulePcdInfoFromFpd.java @@ -41,8 +41,8 @@ public class ModulePcdInfoFromFpd { **/ public ModulePcdInfoFromFpd(UsageIdentification usageId, - XmlObject pcdBuildDefinition) { + PcdBuildDefinition pcdBuildDefinition) { this.usageId = usageId; - this.pcdBuildDefinition = ((PcdBuildDefinitionDocument)pcdBuildDefinition).getPcdBuildDefinition(); + this.pcdBuildDefinition = pcdBuildDefinition; } } -- 2.39.2