Пример #1
0
        public void ProjectTypeAndExternalTypeWithSameName()
        {
            string projectType = TestUtil.PackageMemberParse("public interface Calendar {}");
            string program     = TestUtil.PackageMemberParse(@"import java.util.Calendar; 
															public class MyCalendar 
															{ 
																public Calendar getCalendar()
																{
																	return null;
																}
															}"                                                            );

            TypesVisitor typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = CodeBase;

            CompilationUnit cu1 = TestUtil.ParseProgram(projectType);

            typesVisitor.VisitCompilationUnit(cu1, null);

            CompilationUnit cu2 = TestUtil.ParseProgram(program);

            typesVisitor.VisitCompilationUnit(cu2, null);

            TypeDeclaration   type     = (TypeDeclaration)CodeBase.Types["Test.MyCalendar"];
            MethodDeclaration method   = (MethodDeclaration)type.Children[0];
            string            typeName = GetFullName(method.TypeReference);

            Assert.AreEqual("java.util.Calendar", typeName);
        }
Пример #2
0
        public void TripleInnerClassCallEnclosing()
        {
            string program = TestUtil.PackageMemberParse(@"class A
															{
																class B
																{
																	class C
																	{
																		B enclosing;
																	}
																}
															}"                                                            );

            CompilationUnit cu           = TestUtil.ParseProgram(program);
            TypesVisitor    typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = CodeBase;
            CodeBase.Types.Clear();
            typesVisitor.VisitCompilationUnit(cu, null);
            TypeDeclaration  ty       = (TypeDeclaration)CodeBase.Types["Test.A$B$C"];
            FieldDeclaration field    = (FieldDeclaration)ty.Children[0];
            string           fullName = GetFullName(field.TypeReference);

            Assert.AreEqual("Test.A$B", fullName);
        }
Пример #3
0
        public void InnerType()
        {
            string          program      = TestUtil.PackageMemberParse(@"
										public class ComponentUsage
										{ 
											public void Method() { Component.Item.StaticMethod();} 
										} 
										public class Component
										{ 
											public class Item
											{
												public static void StaticMethod(){}
											}
										}"                                        );
            CompilationUnit cu           = TestUtil.ParseProgram(program);
            TypesVisitor    typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = this.CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);
            InvocationExpression ivc    = (InvocationExpression)TestUtil.GetStatementNodeOf(cu, 0);
            Expression           target = ((FieldReferenceExpression)ivc.TargetObject).TargetObject;
            TypeReference        type   = GetType(target);

            Assert.IsNotNull(type);
            Assert.AreEqual("Component.Item", type.Type);
        }
Пример #4
0
 public void InnerClassCallsInnerInterface()
 {
     string program = TestUtil.PackageMemberParse("class A {class B { IC ic;} interface IC {} }");
     CompilationUnit cu = TestUtil.ParseProgram(program);
     NamespaceDeclaration ns = (NamespaceDeclaration) cu.Children[0];
     TypeDeclaration ty1 = (TypeDeclaration) ns.Children[0];
     TypeDeclaration ty2 = (TypeDeclaration) ty1.Children[0];
     FieldDeclaration fd = (FieldDeclaration) ty2.Children[0];
     TypesVisitor typesVisitor = new TypesVisitor();
     typesVisitor.CodeBase = CodeBase;
     typesVisitor.VisitCompilationUnit(cu, null);
     string fullName = GetFullName(fd.TypeReference);
     Assert.AreEqual("Test.A$IC", fullName);
 }
Пример #5
0
        public void InnerClassCallsInnerInterface()
        {
            string               program      = TestUtil.PackageMemberParse("class A {class B { IC ic;} interface IC {} }");
            CompilationUnit      cu           = TestUtil.ParseProgram(program);
            NamespaceDeclaration ns           = (NamespaceDeclaration)cu.Children[0];
            TypeDeclaration      ty1          = (TypeDeclaration)ns.Children[0];
            TypeDeclaration      ty2          = (TypeDeclaration)ty1.Children[0];
            FieldDeclaration     fd           = (FieldDeclaration)ty2.Children[0];
            TypesVisitor         typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);
            string fullName = GetFullName(fd.TypeReference);

            Assert.AreEqual("Test.A$IC", fullName);
        }
        public void InheritedTypesFromTypeHasAccessor()
        {
            string program = TestUtil.GetInput();
            CompilationUnit cu = TestUtil.ParseProgram(program);
            TypesVisitor typesVisitor = new TypesVisitor();
            typesVisitor.CodeBase = CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);
            InheritorsVisitor inheritorsVisitor = new InheritorsVisitor();
            inheritorsVisitor.CodeBase = CodeBase;
            inheritorsVisitor.VisitCompilationUnit(cu, null);

            VisitCompilationUnit(cu, null);

            Assert.AreEqual(4, CodeBase.References.Count);
            Assert.IsTrue(CodeBase.References.Contains("Test.IGraph.getDegree"));
            Assert.IsTrue(CodeBase.References.Contains("Test.ITree.getDegree"));
            Assert.IsTrue(CodeBase.References.Contains("Test.GenericTree.getDegree"));
            Assert.IsTrue(CodeBase.References.Contains("Test.BinaryTree.getDegree"));
        }
Пример #7
0
        public void LibrariyInheritedInstanceMethod()
        {
            string program  = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit cu           = TestUtil.ParseProgram(program);
            TypesVisitor    typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);

            NamespaceDeclaration ns     = (NamespaceDeclaration)cu.Children[0];
            TypeDeclaration      type   = (TypeDeclaration)ns.Children[1];
            MethodDeclaration    method = (MethodDeclaration)type.Children[0];

            AstUtil.AddModifierTo(method, Modifiers.Override);

            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Пример #8
0
        public void InheritedInnerType()
        {
            string program = TestUtil.PackageMemberParse(@"public class BaseClass {
                                                                public interface BaseInnerType
                                                                {
                                                                }
                                                            }
                                                            public class InheritedClass extends BaseClass{
                                                                BaseInnerType inner;
                                                            }");

            CompilationUnit cu = TestUtil.ParseProgram(program);
            TypesVisitor typesVisitor = new TypesVisitor();
            typesVisitor.CodeBase = this.CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);

            TypeDeclaration ty = (TypeDeclaration) CodeBase.Types["Test.InheritedClass"];
            FieldDeclaration fd = (FieldDeclaration) ty.Children[0];
            string type = GetFullName(fd.TypeReference);
            Assert.AreEqual("Test.BaseClass$BaseInnerType", type);
        }
        public void InheritedTypesFromTypeHasAccessor()
        {
            string          program      = TestUtil.GetInput();
            CompilationUnit cu           = TestUtil.ParseProgram(program);
            TypesVisitor    typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);
            InheritorsVisitor inheritorsVisitor = new InheritorsVisitor();

            inheritorsVisitor.CodeBase = CodeBase;
            inheritorsVisitor.VisitCompilationUnit(cu, null);

            VisitCompilationUnit(cu, null);

            Assert.AreEqual(4, CodeBase.References.Count);
            Assert.IsTrue(CodeBase.References.Contains("Test.IGraph.getDegree"));
            Assert.IsTrue(CodeBase.References.Contains("Test.ITree.getDegree"));
            Assert.IsTrue(CodeBase.References.Contains("Test.GenericTree.getDegree"));
            Assert.IsTrue(CodeBase.References.Contains("Test.BinaryTree.getDegree"));
        }
Пример #10
0
        public void NotDeclaredAccessor()
        {
            string          program  = TestUtil.GetInput();
            string          expected = TestUtil.GetExpected();
            CompilationUnit cu       = TestUtil.ParseProgram(program);

            TypesVisitor typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = CodeBase;

            InheritorsVisitor inheritorsVisitor = new InheritorsVisitor();

            inheritorsVisitor.CodeBase = CodeBase;

            typesVisitor.VisitCompilationUnit(cu, null);
            inheritorsVisitor.VisitCompilationUnit(cu, null);

            VisitCompilationUnit(cu, null);

            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
        public void CallInternalMethod()
        {
            string program = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit cu = TestUtil.ParseProgram(program);
            NamespaceDeclaration ns = (NamespaceDeclaration) cu.Children[0];
            TypeDeclaration ty = (TypeDeclaration) ns.Children[0];

            PropertyDeclaration property = new PropertyDeclaration(Modifiers.Public, null, "Name", null);
            property.TypeReference = new TypeReference("String");
            property.SetRegion = new PropertySetRegion(new BlockStatement(), null);
            ty.AddChild(property);

            TypesVisitor typesVisitor = new TypesVisitor();
            typesVisitor.CodeBase = CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);

            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Пример #12
0
        public void GetMethodDeclarationOf()
        {
            string               program         = TestUtil.PackageMemberParse(@"
					public class DC extends AC
					{
						public int A(string a) {return 0;}

						public void Main()
						{
							string p = null;
							int q = 0;

							A(p, q);
						}
					}

					public class AC
					{
						public int A(string arg1, int arg2) { return 0;}
					}"                    );
            CompilationUnit      compilationUnit = TestUtil.ParseProgram(program);
            NamespaceDeclaration ns         = (NamespaceDeclaration)compilationUnit.Children[0];
            TypeDeclaration      dcType     = (TypeDeclaration)ns.Children[0];
            MethodDeclaration    mt         = (MethodDeclaration)dcType.Children[1];
            InvocationExpression invocation = (InvocationExpression)((ExpressionStatement)mt.Body.Children[2]).Expression;
            TypesVisitor         vis        = new TypesVisitor();

            vis.CodeBase = CodeBase;
            vis.VisitCompilationUnit(compilationUnit, null);

            MethodDeclaration foundMethod = GetMethodDeclarationOf(dcType, invocation);

            Assert.IsNotNull(foundMethod);
            Assert.AreEqual("A", foundMethod.Name);
            Assert.AreEqual(2, foundMethod.Parameters.Count);
            ParameterDeclarationExpression parameter = (ParameterDeclarationExpression)foundMethod.Parameters[0];

            Assert.AreEqual("string", parameter.TypeReference.Type);
            Assert.AreEqual("arg1", parameter.ParameterName);
        }
Пример #13
0
        public void CallInternalMethod()
        {
            string program  = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit      cu = TestUtil.ParseProgram(program);
            NamespaceDeclaration ns = (NamespaceDeclaration)cu.Children[0];
            TypeDeclaration      ty = (TypeDeclaration)ns.Children[0];

            PropertyDeclaration property = new PropertyDeclaration(Modifiers.Public, null, "Name", null);

            property.TypeReference = new TypeReference("String");
            property.SetRegion     = new PropertySetRegion(new BlockStatement(), null);
            ty.AddChild(property);

            TypesVisitor typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);

            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Пример #14
0
        public void InheritedInnerType()
        {
            string program = TestUtil.PackageMemberParse(@"public class BaseClass {
																public interface BaseInnerType
																{
																}
															}
															public class InheritedClass extends BaseClass{
																BaseInnerType inner;
															}"                                                            );

            CompilationUnit cu           = TestUtil.ParseProgram(program);
            TypesVisitor    typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = this.CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);

            TypeDeclaration  ty   = (TypeDeclaration)CodeBase.Types["Test.InheritedClass"];
            FieldDeclaration fd   = (FieldDeclaration)ty.Children[0];
            string           type = GetFullName(fd.TypeReference);

            Assert.AreEqual("Test.BaseClass$BaseInnerType", type);
        }
        public void Siblings()
        {
            string program = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit cu = TestUtil.ParseProgram(program);

            TypesVisitor typesVisitor = new TypesVisitor();
            typesVisitor.CodeBase = CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);

            InheritorsVisitor inheritorsVisitor = new InheritorsVisitor();
            inheritorsVisitor.CodeBase = CodeBase;
            inheritorsVisitor.VisitCompilationUnit(cu, null);

            VisitCompilationUnit(cu, null);

            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Пример #16
0
        public void LibrariyInheritedInstanceMethod()
        {
            string program = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit cu = TestUtil.ParseProgram(program);
            TypesVisitor typesVisitor = new TypesVisitor();
            typesVisitor.CodeBase = CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);

            NamespaceDeclaration ns = (NamespaceDeclaration) cu.Children[0];
            TypeDeclaration type = (TypeDeclaration) ns.Children[1];
            MethodDeclaration method = (MethodDeclaration) type.Children[0];
            AstUtil.AddModifierTo(method, Modifiers.Override);

            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Пример #17
0
        private void Translate()
        {
            codeBase = new CodeBase(GetLanguage());
            codeBase.Types.LibrariesFolder = Libraries;
            codeBase.Types.HelpersFolder = HelperDirectory;

            codeBase.Mappings = new Mappings(Mappings);

            parentVisitor = new ParentVisitor();

            typesVisitor = new TypesVisitor();
            typesVisitor.CodeBase = codeBase;

            projectTypeReferenceCorrector = new TypeReferenceCorrector(true);
            projectTypeReferenceCorrector.CodeBase = codeBase;

            LoadFiles();

            codeBase.Types.Visitors.Add(parentVisitor);

            BeforeParse();
            progress.SetCount("Parsing", sourceFileCount);
            ParseAndPreVisit();

            BeforeTransformation();

            InheritedTypesExcludeTransformer inheritedTypesExcludeTransformer = new InheritedTypesExcludeTransformer();
            inheritedTypesExcludeTransformer.ParentTypes = baseTypeToExcludeMethod;
            CallVisitor(inheritedTypesExcludeTransformer, null);

            IDictionary visitors = GetVisitors(typeof(AbstractAstVisitor));
            visitors.Add(typeof(InheritorsVisitor).FullName, typeof(InheritorsVisitor));
            IDictionary transformers = GetVisitors(typeof(AbstractAstTransformer));
            transformers.Add(typeof(RenameRepeatedVariableTransformer).Name, typeof(RenameRepeatedVariableTransformer));
            progress.SetCount("Transformation", (visitors.Count + transformers.Count) * sourceFileCount);
            CallVisitors(visitors, "Transformation");
            CallVisitors(transformers, "Transformation");
            AfterTransformation();
            Diagnostics.Set("Phase", "Transformation");
            progress.SetCount("References", sourceFileCount);
            CallVisitor(typeof(ReferenceTransformer), "References");

            progress.SetCount("Mapping", 2 * sourceFileCount);
            CallVisitor(typeof(MemberMapper), "Mapping");
            CallVisitor(typeof(TypeMapper), "Mapping");

            BeforeRefactoring();

            int count = 6;
            if (Mode == "IKVM")
                count++;
            if (Namespace != null)
                count++;
            progress.SetCount("Refactoring", sourceFileCount * count);

            Refactor();

            CallVisitor(typeof(RemoveEmptyBlocksTransformer), null);

            OptimizeUsings();

            GenerateCode();

            SaveFiles();
        }
Пример #18
0
        public void ProjectTypeAndExternalTypeWithSameName()
        {
            string projectType = TestUtil.PackageMemberParse("public interface Calendar {}");
            string program = TestUtil.PackageMemberParse(@"import java.util.Calendar;
                                                            public class MyCalendar
                                                            {
                                                                public Calendar getCalendar()
                                                                {
                                                                    return null;
                                                                }
                                                            }");

            TypesVisitor typesVisitor = new TypesVisitor();
            typesVisitor.CodeBase = CodeBase;

            CompilationUnit cu1 = TestUtil.ParseProgram(projectType);
            typesVisitor.VisitCompilationUnit(cu1, null);

            CompilationUnit cu2 = TestUtil.ParseProgram(program);
            typesVisitor.VisitCompilationUnit(cu2, null);

            TypeDeclaration type = (TypeDeclaration) CodeBase.Types["Test.MyCalendar"];
            MethodDeclaration method = (MethodDeclaration) type.Children[0];
            string typeName = GetFullName(method.TypeReference);
            Assert.AreEqual("java.util.Calendar", typeName);
        }
Пример #19
0
        public void TripleInnerClassCallEnclosing()
        {
            string program = TestUtil.PackageMemberParse(@"class A
                                                            {
                                                                class B
                                                                {
                                                                    class C
                                                                    {
                                                                        B enclosing;
                                                                    }
                                                                }
                                                            }");

            CompilationUnit cu = TestUtil.ParseProgram(program);
            TypesVisitor typesVisitor = new TypesVisitor();
            typesVisitor.CodeBase = CodeBase;
            CodeBase.Types.Clear();
            typesVisitor.VisitCompilationUnit(cu, null);
            TypeDeclaration ty = (TypeDeclaration) CodeBase.Types["Test.A$B$C"];
            FieldDeclaration field = (FieldDeclaration) ty.Children[0];
            string fullName = GetFullName(field.TypeReference);
            Assert.AreEqual("Test.A$B", fullName);
        }
Пример #20
0
        public void GetMethodDeclarationOf()
        {
            string program = TestUtil.PackageMemberParse(@"
                    public class DC extends AC
                    {
                        public int A(string a) {return 0;}

                        public void Main()
                        {
                            string p = null;
                            int q = 0;

                            A(p, q);
                        }
                    }

                    public class AC
                    {
                        public int A(string arg1, int arg2) { return 0;}
                    }");
            CompilationUnit compilationUnit = TestUtil.ParseProgram(program);
            NamespaceDeclaration ns = (NamespaceDeclaration) compilationUnit.Children[0];
            TypeDeclaration dcType = (TypeDeclaration) ns.Children[0];
            MethodDeclaration mt = (MethodDeclaration) dcType.Children[1];
            InvocationExpression invocation = (InvocationExpression) ((ExpressionStatement) mt.Body.Children[2]).Expression;
            TypesVisitor vis = new TypesVisitor();

            vis.CodeBase = CodeBase;
            vis.VisitCompilationUnit(compilationUnit, null);

            MethodDeclaration foundMethod = GetMethodDeclarationOf(dcType, invocation);
            Assert.IsNotNull(foundMethod);
            Assert.AreEqual("A", foundMethod.Name);
            Assert.AreEqual(2, foundMethod.Parameters.Count);
            ParameterDeclarationExpression parameter = (ParameterDeclarationExpression) foundMethod.Parameters[0];
            Assert.AreEqual("string", parameter.TypeReference.Type);
            Assert.AreEqual("arg1", parameter.ParameterName);
        }
 public void InnerType()
 {
     string program = TestUtil.PackageMemberParse(@"
                                 public class ComponentUsage
                                 {
                                     public void Method() { Component.Item.StaticMethod();}
                                 }
                                 public class Component
                                 {
                                     public class Item
                                     {
                                         public static void StaticMethod(){}
                                     }
                                 }");
     CompilationUnit cu = TestUtil.ParseProgram(program);
     TypesVisitor typesVisitor = new TypesVisitor();
     typesVisitor.CodeBase = this.CodeBase;
     typesVisitor.VisitCompilationUnit(cu, null);
     InvocationExpression ivc = (InvocationExpression) TestUtil.GetStatementNodeOf(cu, 0);
     Expression target = ((FieldReferenceExpression) ivc.TargetObject).TargetObject;
     TypeReference type = GetType(target);
     Assert.IsNotNull(type);
     Assert.AreEqual("Component.Item", type.Type);
 }
Пример #22
0
        private void Translate()
        {
            codeBase = new CodeBase(GetLanguage());
            codeBase.Types.LibrariesFolder = Libraries;
            codeBase.Types.HelpersFolder   = HelperDirectory;

            codeBase.Mappings = new Mappings(Mappings);

            parentVisitor = new ParentVisitor();

            typesVisitor          = new TypesVisitor();
            typesVisitor.CodeBase = codeBase;

            projectTypeReferenceCorrector          = new TypeReferenceCorrector(true);
            projectTypeReferenceCorrector.CodeBase = codeBase;

            LoadFiles();

            codeBase.Types.Visitors.Add(parentVisitor);

            BeforeParse();
            progress.SetCount("Parsing", sourceFileCount);
            ParseAndPreVisit();

            BeforeTransformation();

            InheritedTypesExcludeTransformer inheritedTypesExcludeTransformer = new InheritedTypesExcludeTransformer();

            inheritedTypesExcludeTransformer.ParentTypes = baseTypeToExcludeMethod;
            CallVisitor(inheritedTypesExcludeTransformer, null);

            IDictionary visitors = GetVisitors(typeof(AbstractAstVisitor));

            visitors.Add(typeof(InheritorsVisitor).FullName, typeof(InheritorsVisitor));
            IDictionary transformers = GetVisitors(typeof(AbstractAstTransformer));

            transformers.Add(typeof(RenameRepeatedVariableTransformer).Name, typeof(RenameRepeatedVariableTransformer));
            progress.SetCount("Transformation", (visitors.Count + transformers.Count) * sourceFileCount);
            CallVisitors(visitors, "Transformation");
            CallVisitors(transformers, "Transformation");
            AfterTransformation();
            Diagnostics.Set("Phase", "Transformation");
            progress.SetCount("References", sourceFileCount);
            CallVisitor(typeof(ReferenceTransformer), "References");

            progress.SetCount("Mapping", 2 * sourceFileCount);
            CallVisitor(typeof(MemberMapper), "Mapping");
            CallVisitor(typeof(TypeMapper), "Mapping");

            BeforeRefactoring();

            int count = 6;

            if (Mode == "IKVM")
            {
                count++;
            }
            if (Namespace != null)
            {
                count++;
            }
            progress.SetCount("Refactoring", sourceFileCount * count);

            Refactor();

            CallVisitor(typeof(RemoveEmptyBlocksTransformer), null);

            OptimizeUsings();

            GenerateCode();

            SaveFiles();
        }