private void AddRoslynMetadata(string baseTempDirectory, PluginBuilder builder, IPackage package)
        {
            string sourcesDir = CreateSubDirectory(baseTempDirectory, "src");

            this.logger.LogDebug(UIResources.APG_CreatingRoslynSources, sourcesDir);

            SourceGenerator.CreateSourceFiles(typeof(AnalyzerPluginGenerator).Assembly, RoslynResourcesRoot, sourcesDir, new Dictionary <string, string>());

            string[] sourceFiles = Directory.GetFiles(sourcesDir, "*.java", SearchOption.AllDirectories);
            Debug.Assert(sourceFiles.Any(), "Failed to correctly unpack the Roslyn analyzer specific source files");

            foreach (string sourceFile in sourceFiles)
            {
                builder.AddSourceFile(sourceFile);
            }

            builder.SetSourceCodeTokenReplacement(PackageId_Token, package.Id);
            builder.SetSourceCodeTokenReplacement(PackageVersion_Token, package.Version.ToString());
            builder.SetSourceCodeTokenReplacement(AnalyzerId_Token, package.Id);
            builder.SetSourceCodeTokenReplacement(RuleNamespace_Token, package.Id);

            foreach (string extension in Extensions)
            {
                builder.AddExtension(extension);
            }
        }
        [TestMethod] // Second test to check the handling of nesting
        public void GenerateSource2()
        {
            // Arrange
            string outputDir = Path.Combine(this.TestContext.TestDeploymentDir, this.TestContext.TestName);
            IDictionary <string, string> replacements = new Dictionary <string, string>();

            replacements.Add("[REPLACE1]", "111");
            replacements.Add("[REPLACE2]", "222");

            // Act
            SourceGenerator.CreateSourceFiles(this.GetType().Assembly, "SonarQube.Plugins.PluginGeneratorTests.resources.myorg.myapp", outputDir, replacements);

            // Assert
            string content;

            content = TestUtils.AssertFileExists("myappClass2.java", outputDir);
            Assert.AreEqual("111zzz", content, "Unexpected file content");

            AssertExpectedSourceFileCount(1, outputDir);
        }
        private void Build(string jarFilePath)
        {
            Assert.IsTrue(File.Exists(jarFilePath), "Jar file does not exist");

            // Get the java source files
            Directory.CreateDirectory(this.tempDir);
            string srcDir = CreateSubDir(this.tempDir, "src");
            string outDir = CreateSubDir(this.tempDir, "out");
            string xxxDir = CreateSubDir(this.tempDir, "xxx");

            SourceGenerator.CreateSourceFiles(this.GetType().Assembly,
                                              "SonarQube.Plugins.IntegrationTests.Roslyn.Resources",
                                              srcDir,
                                              new Dictionary <string, string>());

            JavaCompilationBuilder builder = new JavaCompilationBuilder(this.jdkWrapper);

            foreach (string source in Directory.GetFiles(srcDir, "*.java", SearchOption.AllDirectories))
            {
                builder.AddSources(source);
            }

            // Add the jars required to compile the Java code
            IEnumerable <string> jarFiles = GetCompileDependencies();

            foreach (string jar in jarFiles)
            {
                builder.AddClassPath(jar);
            }

            bool result = builder.Compile(xxxDir, outDir, logger);

            if (!result)
            {
                Assert.Inconclusive("Test setup error: failed to build the Java inspector");
            }

            this.inspectorClassFilePath = GetPluginInspectorClassFilePath(outDir);
        }