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); }
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); }
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); }
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 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")); }
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; } }
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)); }
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")); }
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 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)); }
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 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 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)); }
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)); }
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)); }
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); }
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); }
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); }