コード例 #1
0
        private static void SetResolverForContext(EvaluationContext context, SdkResolver resolver)
        {
            var sdkService = (SdkResolverService)context.SdkResolverService;

            sdkService.InitializeForTests(null, new List <SdkResolver> {
                resolver
            });
        }
コード例 #2
0
        private void SetResolverState(int submissionId, SdkResolver resolver, object state)
        {
            // Do not set state for resolution requests that are not associated with a valid build submission ID
            if (submissionId != BuildEventContext.InvalidSubmissionId)
            {
                ConcurrentDictionary <SdkResolver, object> resolverState = _resolverStateBySubmission.GetOrAdd(submissionId, new ConcurrentDictionary <SdkResolver, object>(NativeMethodsShared.GetLogicalCoreCount(), _resolvers.Count));

                resolverState.AddOrUpdate(resolver, state, (sdkResolver, obj) => state);
            }
        }
コード例 #3
0
        private void SetResolverState(int submissionId, SdkResolver resolver, object state)
        {
            // Do not set state for resolution requests that are not associated with a valid build submission ID
            if (submissionId != BuildEventContext.InvalidSubmissionId)
            {
                ConcurrentDictionary <SdkResolver, object> resolverState = _resolverStateBySubmission.GetOrAdd(submissionId, new ConcurrentDictionary <SdkResolver, object>(Environment.ProcessorCount, _resolvers.Count));

                resolverState.AddOrUpdate(resolver, state, (sdkResolver, obj) => state);
            }
        }
コード例 #4
0
        private void SetResolverState(int submissionId, SdkResolver resolver, object state)
        {
            // Do not set state for resolution requests that are not associated with a valid build submission ID
            if (submissionId != BuildEventContext.InvalidSubmissionId)
            {
                ConcurrentDictionary <SdkResolver, object> resolverState = _resolverStateBySubmission.GetOrAdd(
                    submissionId,
                    _ => new ConcurrentDictionary <SdkResolver, object>(
                        NativeMethodsShared.GetLogicalCoreCount(),
                        ChangeWaves.AreFeaturesEnabled(ChangeWaves.Wave17_4) ? _specificResolversManifestsRegistry.Count + _generalResolversManifestsRegistry.Count : _resolversList.Count));

                resolverState.AddOrUpdate(resolver, state, (sdkResolver, obj) => state);
            }
        }
コード例 #5
0
ファイル: InternalEngineHelpers.cs プロジェクト: 3F/IeXod
        public static ProjectOptions CreateProjectOptionsWithResolver(SdkResolver resolver)
        {
            var context    = EvaluationContext.Create(EvaluationContext.SharingPolicy.Isolated);
            var sdkService = (SdkResolverService)context.SdkResolverService;

            sdkService.InitializeForTests(null, new List <SdkResolver>()
            {
                resolver
            });

            return(new ProjectOptions
            {
                EvaluationContext = context
            });
        }
コード例 #6
0
        private object GetResolverState(int submissionId, SdkResolver resolver)
        {
            // Do not fetch state for resolution requests that are not associated with a valid build submission ID
            if (submissionId != BuildEventContext.InvalidSubmissionId)
            {
                ConcurrentDictionary <SdkResolver, object> resolverState;

                if (_resolverStateBySubmission.TryGetValue(submissionId, out resolverState))
                {
                    object state;

                    if (resolverState.TryGetValue(resolver, out state))
                    {
                        return(state);
                    }
                }
            }

            return(null);
        }
コード例 #7
0
        protected override ConfigFile LoadConfig(ConfigFile config)
        {
            config = base.LoadConfig(config);
            var sdkResolver = new SdkResolver(SharpGenLogger);

            Log.LogMessage("Resolving SDKs...");
            foreach (var cfg in config.ConfigFilesLoaded)
            {
                Log.LogMessage($"Resolving SDK for Config {cfg}");
                foreach (var sdk in cfg.Sdks)
                {
                    Log.LogMessage($"Resolving {sdk.Name}: Version {sdk.Version}");
                    foreach (var directory in sdkResolver.ResolveIncludeDirsForSdk(sdk))
                    {
                        Log.LogMessage($"Resolved include directory {directory}");
                        cfg.IncludeDirs.Add(directory);
                    }
                }
            }
            return(config);
        }
コード例 #8
0
        /// <summary>
        /// Run CodeGenerator
        /// </summary>
        public void Run()
        {
            Logger.Progress(0, "Starting code generation...");

            try
            {
                var consumerConfig = new ConfigFile
                {
                    Id = ConsumerBindMappingConfigId
                };

                var(filesWithIncludes, filesWithExtensions) = Config.GetFilesWithIncludesAndExtensionHeaders();

                var configsWithIncludes = new HashSet <ConfigFile>();

                foreach (var config in Config.ConfigFilesLoaded)
                {
                    if (filesWithIncludes.Contains(config.Id))
                    {
                        configsWithIncludes.Add(config);
                    }
                }

                var sdkResolver = new SdkResolver(Logger);

                foreach (var config in Config.ConfigFilesLoaded)
                {
                    foreach (var sdk in config.Sdks)
                    {
                        config.IncludeDirs.AddRange(sdkResolver.ResolveIncludeDirsForSdk(sdk));
                    }
                }

                var cppHeadersUpdated = GenerateHeaders(filesWithExtensions, configsWithIncludes, consumerConfig);

                if (Logger.HasErrors)
                {
                    Logger.Fatal("Failed to generate C++ headers.");
                }

                CppModule group;
                var       groupFileName = $"{Config.Id}-out.xml";

                if (cppHeadersUpdated.Count != 0)
                {
                    var resolver = new IncludeDirectoryResolver(Logger);
                    resolver.Configure(Config);

                    var castXml = new CastXml(Logger, resolver, CastXmlExecutablePath, Array.Empty <string>())
                    {
                        OutputPath = IntermediateOutputPath,
                    };

                    group = GenerateExtensionHeaders(filesWithExtensions, cppHeadersUpdated, castXml);
                    group = ParseCpp(castXml, group);

                    if (IsGeneratingDoc)
                    {
                        ApplyDocumentation(DocumentationCache, group);
                    }
                }
                else
                {
                    Logger.Progress(10, "Config files unchanged. Read previous C++ parsing...");
                    if (File.Exists(Path.Combine(IntermediateOutputPath, groupFileName)))
                    {
                        group = CppModule.Read(Path.Combine(IntermediateOutputPath, groupFileName));
                    }
                    else
                    {
                        group = new CppModule();
                    }
                }

                // Save back the C++ parsed includes
                group.Write(Path.Combine(IntermediateOutputPath, groupFileName));

                Config.ExpandDynamicVariables(Logger, group);

                var(docAggregator, asm) = ExecuteMappings(group, consumerConfig);

                asm.Write(Path.Combine(IntermediateOutputPath, "Assembly.xml"));

                asm = CsAssembly.Read(Path.Combine(IntermediateOutputPath, "Assembly.xml"));

                GenerateConfigForConsumers(consumerConfig);

                GenerateCode(docAggregator, asm, new ExternalDocCommentsReader(ExternalDocumentation));

                if (Logger.HasErrors)
                {
                    Logger.Fatal("Code generation failed");
                }

                // Update Checkfile for assembly
                File.WriteAllText(_assemblyCheckFile, "");
                File.SetLastWriteTime(_assemblyCheckFile, _assemblyDatetime);

                // Update Checkfile for all config files
                File.WriteAllText(_allConfigCheck, "");
                File.SetLastWriteTime(_allConfigCheck, DateTime.Now);
            }
            finally
            {
                Logger.Progress(100, "Finished");
            }
        }
コード例 #9
0
 public SdkResolverException(string resourceName, SdkResolver resolver, SdkReference sdk, Exception innerException, params string[] args)
     : base(string.Format(ResourceUtilities.GetResourceString(resourceName), args), innerException)
 {
     Resolver = resolver;
     Sdk      = sdk;
 }