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