public void Test()
        {
            string projectType = TestUtil.PackageMemberParse("public interface Calendar { void getTime(); }");
            string program = TestUtil.PackageMemberParse(@"import java.util.Calendar;
                                                            public class MyCalendar
                                                            {
                                                                public Calendar getCalendar()
                                                                {
                                                                    return Calendar.getInstance();
                                                                }
                                                            }");
            string expected = TestUtil.NamespaceMemberParse(@"public class MyCalendar
                                                                {
                                                                    public java.util.Calendar getCalendar()
                                                                    {
                                                                        return java.util.Calendar.getInstance();
                                                                    }
                                                                }");

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

            VisitCompilationUnit(cu2, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu2));
        }
        public void Test()
        {
            string projectType = TestUtil.PackageMemberParse("public interface Calendar { void getTime(); }");
            string program     = TestUtil.PackageMemberParse(@"import java.util.Calendar; 
															public class MyCalendar 
															{ 
																public Calendar getCalendar()
																{
																	return Calendar.getInstance();
																}
															}"                                                            );
            string expected    = TestUtil.NamespaceMemberParse(@"public class MyCalendar 
																{ 
																	public java.util.Calendar getCalendar()
																	{
																		return java.util.Calendar.getInstance();
																	}
																}"                                                                );

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

            VisitCompilationUnit(cu2, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu2));
        }
        public override IList <SqlRuleProblem> Analyze(SqlRuleExecutionContext ruleExecutionContext)
        {
            var problems = new List <SqlRuleProblem>();
            var sqlObj   = ruleExecutionContext.ModelElement;

            if (sqlObj == null || sqlObj.IsWhiteListed())
            {
                return(problems);
            }

            var fragment = ruleExecutionContext.ScriptFragment.GetFragment(typeof(CreateProcedureStatement));

            var typesVisitor = new TypesVisitor(
                typeof(SelectStatement),
                typeof(UpdateStatement),
                typeof(DeleteStatement),
                typeof(InsertStatement),
                typeof(CreateTableStatement)
                );

            fragment.Accept(typesVisitor);

            if (typesVisitor.Count == 0)
            {
                return(problems);
            }

            var offenders = typesVisitor.Statements
                            .SkipWhile(t => t.GetType() == typeof(CreateTableStatement))
                            .Where(t1 => t1.GetType() == typeof(CreateTableStatement));

            problems.AddRange(offenders.Select(t => new SqlRuleProblem(Message, sqlObj, t)));

            return(problems);
        }
        public void CallingInheritedInterfaceFromInterfaceFields()
        {
            string program = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            string program2 = @"
                    package Atom;
                    public interface IMaterial
                    {
                    }
                    public class IMaterial_Fields
                    {
                        public static int Atomic_Number;
                    }
                    public interface ISolid extends IMaterial
                    {
                    }";
            CompilationUnit cv = TestUtil.ParseProgram(program2);

            CompilationUnit cu = TestUtil.ParseProgram(program);

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

            ImportTransformer im = new ImportTransformer();
            im.VisitCompilationUnit(cu, null);

            CodeBase.References.Add("Atom.IMaterial", "Atom.IMaterial_Fields");

            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
        public void InnerClassConstructors()
        {
            string program = TestUtil.GetInput();
            CompilationUnit cu = TestUtil.ParseProgram(program);

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

            VisitCompilationUnit(cu, null);
            Assert.AreEqual(1, CodeBase.References.Count);
            Assert.IsTrue(CodeBase.References.Contains("Cons:Test.A$B"));
        }
Beispiel #6
0
        public void InnerClassConstructors()
        {
            string          program = TestUtil.GetInput();
            CompilationUnit cu      = TestUtil.ParseProgram(program);

            TypesVisitor typesVisitor = new TypesVisitor();

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

            VisitCompilationUnit(cu, null);
            Assert.AreEqual(1, CodeBase.References.Count);
            Assert.IsTrue(CodeBase.References.Contains("Cons:Test.A$B"));
        }
        public void Polymorphism()
        {
            string program = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit cu = TestUtil.ParseProgram(program);

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

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

            CompilationUnit cu = TestUtil.ParseProgram(program);

            TypesVisitor typesVisitor = new TypesVisitor();

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

            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Beispiel #9
0
        public void InnerClassUsesEnclosingInheritedInterfaceField()
        {
            string program  = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit cu = TestUtil.ParseProgram(program);

            TypesVisitor typesVisitor = new TypesVisitor();

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

            CodeBase.References.Add("Test.IDocument", "Test.IDocument_Fields");
            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Beispiel #10
0
        public void InheritedFromMultiInterfaceWithFields()
        {
            string program  = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit cu = TestUtil.ParseProgram(program);

            TypesVisitor typesVisitor = new TypesVisitor();

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

            CodeBase.References.Add("Test.IName", "Test.IName_Fields");
            CodeBase.References.Add("Test.IFamily", "Test.IFamily_Fields");
            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Beispiel #11
0
        public void InterfaceFieldsUseParentInterfaceFields()
        {
            string program  = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit cu = TestUtil.ParseProgram(program);

            TypesVisitor typesVisitor = new TypesVisitor();

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

            CodeBase.References.Add("Test.Constants", "Test.Constants_Fields");
            CodeBase.References.Add("Test.SystemConstants", "Test.SystemConstants_Fields");
            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
        public void PublicMethodInheritedProtected()
        {
            string program = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

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

            CodeBase.Inheritors.Add("Test.Shape", "Test.SimpleShape");
            CodeBase.Inheritors.Add("Test.Shape", "Test.PolygonShape");
            CodeBase.Inheritors.Add("Test.SimpleShape", "Test.Rectangle");
            CodeBase.Inheritors.Add("Test.PolygonShape", "Test.ComplexShape");

            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Beispiel #13
0
        /// <summary>
        /// Searches the entire fragment, for specific types
        /// </summary>
        /// <param name="baseFragment"></param>
        /// <param name="typesToLookFor"></param>
        /// <returns></returns>
        public static TSqlFragment GetFragment(this TSqlFragment baseFragment, params Type[] typesToLookFor)
        {
            //for some odd reason, sometimes the fragments do not pass in properly to the rules....
            //this function can reparse that frsagment into its true fragment, and not a sql script...
            if (!(baseFragment is TSqlScript))
            {
                return(baseFragment);
            }

            var stmt = ((TSqlScript)baseFragment)?.Batches.FirstOrDefault()?.Statements.FirstOrDefault();

            if (stmt == null)
            {
                return(baseFragment);
            }
            //we dont need to parse the fragment unless it is of type TSqlStatement or TSqlStatementSnippet.... just return the type it found
            if (!(stmt.GetType() == typeof(TSqlStatement) || stmt.GetType() == typeof(TSqlStatementSnippet)))
            {
                return(stmt);
            }

            var          tsqlParser = new TSql140Parser(true);
            TSqlFragment fragment   = null;

            using (StringReader stringReader = new StringReader(((TSqlStatementSnippet)stmt).Script))
            {
                IList <ParseError> parseErrors = new List <ParseError>();
                fragment = tsqlParser.Parse(stringReader, out parseErrors);
                if (parseErrors.Any())
                {
                    return(baseFragment);
                }

                TypesVisitor visitor = new TypesVisitor(typesToLookFor);
                fragment.Accept(visitor);

                if (visitor.Statements.Any())
                {
                    return(visitor.Statements.First());
                }
            }
            //if we got here, the object was tsqlscript, but was not parseable.... so we bail out
            return(baseFragment);
        }
Beispiel #14
0
        public void PublicMethodInheritedProtected()
        {
            string program  = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

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

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

            CodeBase.Inheritors.Add("Test.Shape", "Test.SimpleShape");
            CodeBase.Inheritors.Add("Test.Shape", "Test.PolygonShape");
            CodeBase.Inheritors.Add("Test.SimpleShape", "Test.Rectangle");
            CodeBase.Inheritors.Add("Test.PolygonShape", "Test.ComplexShape");

            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
        public void InternalConstructor()
        {
            string programBase = TestUtil.TypeMemberParse("protected Test(String name, int index) {}");
            string usageProgram = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

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

            CompilationUnit cu1 = TestUtil.ParseProgram(programBase);
            NamespaceDeclaration ns = (NamespaceDeclaration) cu1.Children[0];
            TypeDeclaration ty = (TypeDeclaration) ns.Children[0];
            CompilationUnit cu2 = TestUtil.ParseProgram(usageProgram, SupportedLanguage.CSharp);

            CodeBase.Types.Add("Test.Test", ty);
            typesVisitor.VisitCompilationUnit(cu2, null);

            VisitCompilationUnit(cu2, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu2));
        }
Beispiel #16
0
        public void InternalConstructor()
        {
            string programBase  = TestUtil.TypeMemberParse("protected Test(String name, int index) {}");
            string usageProgram = TestUtil.GetInput();
            string expected     = TestUtil.GetExpected();

            TypesVisitor typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = CodeBase;

            CompilationUnit      cu1 = TestUtil.ParseProgram(programBase);
            NamespaceDeclaration ns  = (NamespaceDeclaration)cu1.Children[0];
            TypeDeclaration      ty  = (TypeDeclaration)ns.Children[0];
            CompilationUnit      cu2 = TestUtil.ParseProgram(usageProgram, SupportedLanguage.CSharp);

            CodeBase.Types.Add("Test.Test", ty);
            typesVisitor.VisitCompilationUnit(cu2, null);

            VisitCompilationUnit(cu2, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu2));
        }
Beispiel #17
0
        public void ProjectAndLibraryTypeWithSameName()
        {
            string program  = TestUtil.PackageMemberParse(@"
								import java.util.Calendar; 
								public class A { int h = Calendar.HOUR; } 
								public class Calendar_Fields {public static int Month = 0;}"                                );
            string expected = TestUtil.NamespaceMemberParse(@"
								using java.util.Calendar; 
								public class A { int h = Calendar.HOUR; } 
								public class Calendar_Fields {public static int Month = 0;}"                                );

            CompilationUnit cu = TestUtil.ParseProgram(program);

            CodeBase.References.Add("Test.Calendar", "Test.Calendar_Fields");

            TypesVisitor typesVisitor = new TypesVisitor();

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

            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Beispiel #18
0
        public void CallingInheritedInterfaceFromInterfaceFields()
        {
            string program  = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            string          program2 = @"
					package Atom;
					public interface IMaterial
					{
					}
					public class IMaterial_Fields
					{
						public static int Atomic_Number;
					}
					public interface ISolid extends IMaterial
					{
					}"                    ;
            CompilationUnit cv       = TestUtil.ParseProgram(program2);

            CompilationUnit cu = TestUtil.ParseProgram(program);

            TypesVisitor typesVisitor = new TypesVisitor();

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

            ImportTransformer im = new ImportTransformer();

            im.VisitCompilationUnit(cu, null);

            CodeBase.References.Add("Atom.IMaterial", "Atom.IMaterial_Fields");

            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
Beispiel #19
0
        public void NestedAnonymousClass()
        {
            string          program      = TestUtil.PackageMemberParse(@"
								public class NestedAnon
								{
									public void exec(){}
									public void firstLevel()
									{
										String arg = null;
										Weight w = new Weight()
										{
											public void secondLevel()
											{
												exec();
												Score s = new Score(arg)
												{
													public void thirdLevel()
													{
													}
												};
											}
										};
									}
								}
								public class Score
								{
									public Score(String arg){}
								}"                                );
            string          expected     = TestUtil.NamespaceMemberParse(@"
								public class NestedAnon
								{
									public void exec(){}
									public void firstLevel()
									{
										String arg = null;
										Weight w = new AnonymousClassWeight1(this, arg);
									}
									private class AnonymousClassWeight1 : Weight
									{
										public AnonymousClassWeight1(NestedAnon enclosingInstance, String arg)
										{
											this.enclosingInstance = enclosingInstance;
											this.arg = arg;
										}
										public void secondLevel()
										{
											enclosingInstance.exec();
											Score s = new AnonymousClassScore2(arg, this);
										}
										private NestedAnon enclosingInstance;
										private String arg;
										public NestedAnon Enclosing_Instance {
											get { return enclosingInstance; }
										}

										private class AnonymousClassScore2 : Score
										{
											public AnonymousClassScore2(String arg, AnonymousClassWeight1 enclosingInstance) : base(arg)
											{
												this.enclosingInstance = enclosingInstance;
											}
											public void thirdLevel()
											{
											}
											private AnonymousClassWeight1 enclosingInstance;
											public AnonymousClassWeight1 Enclosing_Instance {
												get { return enclosingInstance; }
											}
										}
									}
								}
								public class Score
								{
									public Score(String arg){}
								}"                                );
            CompilationUnit cu           = TestUtil.ParseProgram(program);
            TypesVisitor    typesVisitor = new TypesVisitor();

            typesVisitor.CodeBase = this.CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);
            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
        public void InheritedFromMultiInterfaceWithFields()
        {
            string program = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit cu = TestUtil.ParseProgram(program);

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

            CodeBase.References.Add("Test.IName", "Test.IName_Fields");
            CodeBase.References.Add("Test.IFamily", "Test.IFamily_Fields");
            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
        public void ProjectAndLibraryTypeWithSameName()
        {
            string program = TestUtil.PackageMemberParse(@"
                                import java.util.Calendar;
                                public class A { int h = Calendar.HOUR; }
                                public class Calendar_Fields {public static int Month = 0;}");
            string expected = TestUtil.NamespaceMemberParse(@"
                                using java.util.Calendar;
                                public class A { int h = Calendar.HOUR; }
                                public class Calendar_Fields {public static int Month = 0;}");

            CompilationUnit cu = TestUtil.ParseProgram(program);
            CodeBase.References.Add("Test.Calendar", "Test.Calendar_Fields");

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

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

            CompilationUnit cu = TestUtil.ParseProgram(program);

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

            CodeBase.References.Add("Test.Constants", "Test.Constants_Fields");
            CodeBase.References.Add("Test.SystemConstants", "Test.SystemConstants_Fields");
            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
        public void NestedAnonymousClass()
        {
            string program = TestUtil.PackageMemberParse(@"
                                public class NestedAnon
                                {
                                    public void exec(){}
                                    public void firstLevel()
                                    {
                                        String arg = null;
                                        Weight w = new Weight()
                                        {
                                            public void secondLevel()
                                            {
                                                exec();
                                                Score s = new Score(arg)
                                                {
                                                    public void thirdLevel()
                                                    {
                                                    }
                                                };
                                            }
                                        };
                                    }
                                }
                                public class Score
                                {
                                    public Score(String arg){}
                                }");
            string expected = TestUtil.NamespaceMemberParse(@"
                                public class NestedAnon
                                {
                                    public void exec(){}
                                    public void firstLevel()
                                    {
                                        String arg = null;
                                        Weight w = new AnonymousClassWeight1(this, arg);
                                    }
                                    private class AnonymousClassWeight1 : Weight
                                    {
                                        public AnonymousClassWeight1(NestedAnon enclosingInstance, String arg)
                                        {
                                            this.enclosingInstance = enclosingInstance;
                                            this.arg = arg;
                                        }
                                        public void secondLevel()
                                        {
                                            enclosingInstance.exec();
                                            Score s = new AnonymousClassScore2(arg, this);
                                        }
                                        private NestedAnon enclosingInstance;
                                        private String arg;
                                        public NestedAnon Enclosing_Instance {
                                            get { return enclosingInstance; }
                                        }

                                        private class AnonymousClassScore2 : Score
                                        {
                                            public AnonymousClassScore2(String arg, AnonymousClassWeight1 enclosingInstance) : base(arg)
                                            {
                                                this.enclosingInstance = enclosingInstance;
                                            }
                                            public void thirdLevel()
                                            {
                                            }
                                            private AnonymousClassWeight1 enclosingInstance;
                                            public AnonymousClassWeight1 Enclosing_Instance {
                                                get { return enclosingInstance; }
                                            }
                                        }
                                    }
                                }
                                public class Score
                                {
                                    public Score(String arg){}
                                }");
            CompilationUnit cu = TestUtil.ParseProgram(program);
            TypesVisitor typesVisitor = new TypesVisitor();
            typesVisitor.CodeBase = this.CodeBase;
            typesVisitor.VisitCompilationUnit(cu, null);
            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }
        public void InnerClassUsesEnclosingInheritedInterfaceField()
        {
            string program = TestUtil.GetInput();
            string expected = TestUtil.GetExpected();

            CompilationUnit cu = TestUtil.ParseProgram(program);

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

            CodeBase.References.Add("Test.IDocument", "Test.IDocument_Fields");
            VisitCompilationUnit(cu, null);
            TestUtil.CodeEqual(expected, TestUtil.GenerateCode(cu));
        }