예제 #1
0
        /// <summary>
        /// Java言語向けにアスペクトが正しく合成されるかどうかをテストします
        /// </summary>
        /// <param name="aspectFile">入力アスペクトファイル名</param>
        /// <param name="expectationFile">アスペクト合成後の期待値ファイル名</param>
        public void AssertCorrectWeavingForJava(string aspectFile, string expectationFile)
        {
            //アスペクトモデルの作成
            var aspectPath = FixtureUtil.GetAspectPath(aspectFile);

            Weaver.AnalizeAspect(aspectPath);

            //アスペクトの合成処理
            Weaver.Weave("Java", _javaModel);

            //期待されるモデルの作成
            var filePath    = FixtureUtil.GetAspectExpectationPath(expectationFile);
            var expectation = UnifiedGenerators.GenerateProgramFromFile(filePath);

            //for debug
            var gen = new JavaCodeGenerator();

            Console.Write(gen.Generate(_javaModel));

            //モデル内のブロック数が1増えているかどうか
            Assert.That(
                _amountOfBlockInJava + 1,
                Is.EqualTo(_javaModel.Descendants <UnifiedBlock>().Count()));
            //構造が一致しているかどうか
            Assert.That(
                _javaModel,
                Is.EqualTo(expectation).Using(StructuralEqualityComparer.Instance));
        }
예제 #2
0
        public void 特殊文字を含むアドバイス内の変数を指定された文字列に置き換えられる()
        {
            var code   = "System.out.println(JOINPOINT_NAME + \" is executed!\");";
            var advice = UcoGenerator.CreateAdvice("Java", code);

            //アドバイス内の特殊文字を置き換える
            Execution.ReplaceSpecialToken(advice, "test");

            code = "System.out.println(\"test\" + \" is executed!\");";
            var actual = UcoGenerator.CreateAdvice("Java", code);

            var gen = new JavaCodeGenerator();

            Console.WriteLine(gen.Generate(advice));

            Assert.That(gen.Generate(advice), Is.EqualTo(gen.Generate(actual)));
        }
예제 #3
0
        public void Setポイントカットを用いて初期化子つき変数宣言の直前にアスペクトを合成できる()
        {
            const string code = @"class A{ public void M() { int a = 10; int b = a; } }";
            //モデル化
            var model          = CreateProgramFromCode(".java", code);
            var beforeNumBlock = model.Descendants().OfType <UnifiedBlock>().Count();

            //アスペクトの合成
            Set.InsertAtBeforeSet(model, new Regex("b"), UcoGenerator.CreateAdvice("Java", "System.out.println();"));
            var afterNumBlock = model.Descendants().OfType <UnifiedBlock>().Count();

            //for debug
            var gen = new JavaCodeGenerator();

            Console.Write(gen.Generate(model));

            //アスペクトが合成されるためブロックの数が1つ増える
            Assert.That(afterNumBlock, Is.EqualTo(beforeNumBlock + 1));
        }
예제 #4
0
 private static void GenerateCpJavaDir(DirectoryInfo currentDirCp, DirectoryInfo currentDirCpJava)
 {
     foreach (var dir in currentDirCp.EnumerateDirectories())
     {
         var dirCpJava = cpJavaOutputDirectory.CreateSubdirectory(dir.Name);
         GenerateCpJavaDir(dir, dirCpJava);
     }
     foreach (var csFile in currentDirCp.EnumerateFiles("*.cs"))
     {
         string source       = csFile.OpenRead().ReadToEnd();
         var    outputSource = JavaCodeGenerator
                               .Generate(source, csFile.FullName.Remove(0, cpDir.FullName.Length),
                                         cpJavaPlatformDirectory);
         if (outputSource.HasValue)
         {
             File.WriteAllText(currentDirCpJava.FullName + "\\"
                               + Path.GetFileNameWithoutExtension(csFile.Name) + ".java", outputSource.Value);
         }
     }
 }
예제 #5
0
 public static string GenerateCode(UnifiedElement model)
 {
     return(CodeGenerator.Generate(model));
 }