def METHOD_NAME(self, PackageData, Arch = None):
    IsValidFileFlag = False
    SupArchList     = []
    for ArchItem in Arch:
        #
        # Validate Arch
        #
        if (ArchItem == '' or ArchItem is None):
            ArchItem = 'COMMON'
        SupArchList.append(ArchItem)
    for PackageItem in PackageData:
        PackageItemObj = InfPackageItem()
        HelpStringObj = PackageItem[1]
        CurrentLineOfPackItem = PackageItem[2]
        PackageItem = PackageItem[0]
        if HelpStringObj is not None:
            HelpString = HelpStringObj.HeaderComments + HelpStringObj.TailComments
            PackageItemObj.SetHelpString(HelpString)
        if len(PackageItem) >= 1:
            #
            # Validate file exist/format.
            #
            if IsValidPath(PackageItem[0], ''):
                IsValidFileFlag = True
            elif IsValidPath(PackageItem[0], GlobalData.gINF_MODULE_DIR):
                IsValidFileFlag = True
            elif IsValidPath(PackageItem[0], GlobalData.gWORKSPACE):
                IsValidFileFlag = True
            else:
                Logger.Error("InfParser",
                             ToolError.FORMAT_INVALID,
                             ST.ERR_INF_PARSER_FILE_NOT_EXIST_OR_NAME_INVALID%(PackageItem[0]),
                             File=CurrentLineOfPackItem[2],
                             Line=CurrentLineOfPackItem[1],
                             ExtraData=CurrentLineOfPackItem[0])
                return False
            if IsValidFileFlag:
                PackageItemObj.SetPackageName(PackageItem[0])
        if len(PackageItem) == 2:
            #
            # Validate Feature Flag Express
            #
            if PackageItem[1].strip() == '':
                Logger.Error("InfParser",
                             ToolError.FORMAT_INVALID,
                             ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_MISSING,
                             File=CurrentLineOfPackItem[2],
                             Line=CurrentLineOfPackItem[1],
                             ExtraData=CurrentLineOfPackItem[0])
            #
            # Validate FFE
            #
            FeatureFlagRtv = IsValidFeatureFlagExp(PackageItem[1].strip())
            if not FeatureFlagRtv[0]:
                Logger.Error("InfParser",
                             ToolError.FORMAT_INVALID,
                             ST.ERR_INF_PARSER_FEATURE_FLAG_EXP_SYNTAX_INVLID%(FeatureFlagRtv[1]),
                             File=CurrentLineOfPackItem[2],
                             Line=CurrentLineOfPackItem[1],
                             ExtraData=CurrentLineOfPackItem[0])
            PackageItemObj.SetFeatureFlagExp(PackageItem[1].strip())
        if len(PackageItem) > 2:
            #
            # Invalid format of Package statement
            #
            Logger.Error("InfParser",
                         ToolError.FORMAT_INVALID,
                         ST.ERR_INF_PARSER_PACKAGE_SECTION_CONTENT_ERROR,
                         File=CurrentLineOfPackItem[2],
                         Line=CurrentLineOfPackItem[1],
                         ExtraData=CurrentLineOfPackItem[0])
        PackageItemObj.SetSupArchList(SupArchList)
        #
        # Determine package file name duplicate. Follow below rule:
        #
        # A package filename must not be duplicated within a [Packages]
        # section. Package filenames may appear in multiple architectural
        # [Packages] sections. A package filename listed in an
        # architectural [Packages] section must not be listed in the common
        # architectural [Packages] section.
        #
        # NOTE: This check will not report error now.
        #
        for Item in self.Packages:
            if Item.GetPackageName() == PackageItemObj.GetPackageName():
                ItemSupArchList = Item.GetSupArchList()
                for ItemArch in ItemSupArchList:
                    for PackageItemObjArch in SupArchList:
                        if ItemArch == PackageItemObjArch:
                            #
                            # ST.ERR_INF_PARSER_ITEM_DUPLICATE
                            #
                            pass
                        if ItemArch.upper() == 'COMMON' or PackageItemObjArch.upper() == 'COMMON':
                            #
                            # ST.ERR_INF_PARSER_ITEM_DUPLICATE_COMMON
                            #
                            pass
        if (PackageItemObj) in self.Packages:
            PackageList = self.Packages[PackageItemObj]
            PackageList.append(PackageItemObj)
            self.Packages[PackageItemObj] = PackageList
        else:
            PackageList = []
            PackageList.append(PackageItemObj)
            self.Packages[PackageItemObj] = PackageList
    return True