コード例 #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);
        }
コード例 #6
0
        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
        private void ParseAndPreVisit()
        {
            foreach (Source entry in Sources.Values)
            {
                if (!entry.CodeFile)
                {
                    continue;
                }
                progress.Increment("Parsing");

                string       convetedCode = ConvertFile(entry.Code);
                StringReader reader       = new StringReader(convetedCode);

                IParser parser = ParserFactory.CreateParser(GetLanguage(), reader);
                parser.ParseMethodBodies = true;
                parser.Parse();
                CompilationUnit compilationUnit = parser.CompilationUnit;
                compilationUnit.Parent = new TypeReference(entry.File);

                parentVisitor.VisitCompilationUnit(compilationUnit, null);
                typesVisitor.VisitCompilationUnit(compilationUnit, null);
                projectTypeReferenceCorrector.VisitCompilationUnit(compilationUnit, null);
                if (Stubs.Contains(entry.File))
                {
                    StubTransformer st = new StubTransformer();

                    st.Members = (string)Stubs[entry.File];
                    st.VisitCompilationUnit(compilationUnit, null);
                }
                if (MembersExcludes.Contains(entry.File))
                {
                    string members = MembersExcludes[entry.File].ToString();
                    MemberExcludeTransformer met = new MemberExcludeTransformer(members);
                    met.VisitCompilationUnit(compilationUnit, null);
                    if (met.ExcludedType != null && met.ExcludedMembers != null)
                    {
                        baseTypeToExcludeMethod[met.ExcludedType] = met.ExcludedMembers;
                    }
                }
                entry.CompilationUnit = compilationUnit;
                entry.Parser          = parser;
            }
        }
コード例 #8
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));
        }
コード例 #9
0
        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 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);
        }
コード例 #11
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));
        }
コード例 #12
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));
        }
コード例 #13
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);
        }
コード例 #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);
        }
コード例 #15
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));
        }
コード例 #16
0
        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));
        }
コード例 #17
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));
        }
コード例 #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);
        }
コード例 #21
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);
 }