private static string GetEnvironmentVariableName(AccessorTypeDeclaration accessorTypeDeclaration,
                                                         AccessorFieldDeclaration accessorFieldDeclaration)
        {
            var assemblyName  = accessorTypeDeclaration.TargetInterfaceType.Assembly.GetName().Name;
            var interfaceName = accessorTypeDeclaration.TargetInterfaceType.Name;

            var environmentVariablePrefixAttribute =
                accessorTypeDeclaration.GetAttribute <EnvironmentVariablePrefixAttribute>();
            var prefix = environmentVariablePrefixAttribute?.Prefix ?? $@"{assemblyName}_{interfaceName}";

            var environmentVariableNameAttribute = accessorFieldDeclaration.GetAttribute <EnvironmentVariableNameAttribute>();
            var name = string.IsNullOrEmpty(environmentVariableNameAttribute?.Name)
                ? accessorFieldDeclaration.Name
                : environmentVariableNameAttribute.Name;

            return(string.IsNullOrEmpty(prefix) ? name : $"{prefix}_{name}");
        }
        private static string GetCommandlineName(AccessorTypeDeclaration accessorTypeDeclaration,
                                                 AccessorFieldDeclaration accessorFieldDeclaration)
        {
            var interfaceName = accessorTypeDeclaration.TargetInterfaceType.Name;

            var commandlineArgumentPrefixAttribute =
                accessorTypeDeclaration.GetAttribute <CommandlineArgumentPrefixAttribute>();
            var prefix = commandlineArgumentPrefixAttribute?.Prefix ?? interfaceName;

            var commandlineArgumentNameAttribute =
                accessorFieldDeclaration.GetAttribute <CommandlineArgumentNameAttribute>();
            var name = string.IsNullOrEmpty(commandlineArgumentNameAttribute?.Name)
                ? accessorFieldDeclaration.Name
                : commandlineArgumentNameAttribute.Name;

            return(prefix == "" ? $"--{name}" : $"--{prefix}_{name}");
        }
        public static XmlFileInterfaceAccessorReportData GetInterfaceData(AccessorTypeDeclaration accessorTypeDeclaration)
        {
            var xmlFileAttribute = accessorTypeDeclaration.GetAttribute <XmlFileAttribute>();

            var filePath = Path.Combine(
                Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ??
                throw new InvalidOperationException(),
                string.IsNullOrEmpty(xmlFileAttribute?.FilePath)
                    ? @".\ApplicationRegisties.xml"
                    : xmlFileAttribute?.FilePath);
            var xrootPath = string.IsNullOrEmpty(xmlFileAttribute?.XRootPath)
                ? "/ApplicationRegisties/" + accessorTypeDeclaration.Name
                : xmlFileAttribute.XRootPath;


            return(new XmlFileInterfaceAccessorReportData(filePath,
                                                          xrootPath));
        }
        public static RegistryAccessorReportData GetPropertyData(RegistryRoot registryRoot, AccessorTypeDeclaration accessorTypeDeclaration, AccessorFieldDeclaration accessorFieldDeclaration)
        {
            var assemblyName  = accessorTypeDeclaration.TargetInterfaceType.Assembly.GetName().Name;
            var interfaceName = accessorTypeDeclaration.TargetInterfaceType.Name;

            var registoKeyAttribute = accessorTypeDeclaration.GetAttribute <RegistryKeyAttribute>();
            var key = string.IsNullOrEmpty(registoKeyAttribute?.Key)
                ? $@"Software\ApplicationRegistries\{assemblyName}\{interfaceName}"
                : registoKeyAttribute.Key;

            var registoNameAttribute = accessorFieldDeclaration.GetAttribute <RegistryNameAttribute>();
            var name = string.IsNullOrEmpty(registoNameAttribute?.Name)
                ? accessorFieldDeclaration.Name
                : registoNameAttribute.Name;

            return(new RegistryAccessorReportData(key,
                                                  name
                                                  ));
        }