Пример #1
0
        private void ProcessClassMethod(XmlElement parent, ClassMethod method)
        {
            XmlElement savedElement = currentElement;
            XmlElement tmpElement   = document.CreateElement("ClassMethod");

            tmpElement.SetAttribute("Name", method.Name);
            tmpElement.SetAttribute("Scope", method.Scope.ToString());

            if (method.Modifier != Modifier.Default)
            {
                tmpElement.SetAttribute("Modifier", method.Modifier.ToString());
            }

            currentElement = document.CreateElement("Parameters");
            ProcessParameters(currentElement, method.Function.Parameters);
            tmpElement.AppendChild(currentElement);

            if (method.Function.Body != null)
            {
                currentElement = document.CreateElement("Body");
                method.Function.Body.AcceptCompiler(this);
                tmpElement.AppendChild(currentElement);
            }

            parent.AppendChild(tmpElement);
            currentElement = savedElement;
        }
Пример #2
0
        private void DumpMethod(ClassMethod method)
        {
            textWriter.Write(method.Scope.ToString().ToLower());
            if (method.Modifier != Modifier.Default)
            {
                textWriter.Write(" {0}", method.Modifier.ToString().ToLower());
            }

            if (ClassMethod.GetUnaryOperator(method.Name) != UnaryOperator.None)
            {
                var _operator = ClassMethod.GetUnaryOperator(method.Name);
                textWriter.Write(" operator {0}", UnaryOperatorToString(_operator));
            }
            else if (ClassMethod.GetBinaryOperator(method.Name) != BinaryOperator.None)
            {
                var _operator = ClassMethod.GetBinaryOperator(method.Name);
                textWriter.Write(" operator {0}", BinaryOperatorToString(_operator));
            }
            else
            {
                textWriter.Write(" function {0}", SafeName(method.Name));
            }

            if (method.Modifier == Modifier.Abstract)
            {
                DumpParametersList(method.Function.Parameters);
                textWriter.WriteLine(";");
            }
            else
            {
                DumpFunction(method.Function);
            }

            textWriter.WriteLine();
        }
        public SemanticAtom Visit(MainClass n)
        {
            var method = new ClassMethod("main", null, n.MainMethodBody.Location);

            CurrentMethod  = method;
            _localPosition = 0;

            var argsType = new UtilizedType(Primitive.StringArray.Name, n.Location);
            var argsArg  = new MethodArgument(n.ArgsName, argsType, method.DeclarationLocation);

            AddToGlobalUtilization(argsType, s => { argsArg.RealizedType = s; });
            method.Arguments.Add(argsArg.Name, argsArg);

            method.RealizedReturnType = Primitive.Void;
            method.AstReturnType      = null;

            BlockStack        = new Stack <ClassMethodBlock>();
            method.MethodBody = n.MainMethodBody.Accept(this) as ClassMethodBlock;

            var c = new Class(n.Name, null, n.Location)
            {
                IsMainClass = true
            };

            c.Methods.Add("main", method);

            AddToTypeTable(c);

            return(c);
        }
Пример #4
0
        public Class(ClassViewModel model)
        {
            Assignments      = new List <Assignment.Assignment>();
            StudentsEnrolled = new List <StudentClass>();

            this.Name         = model.Name;
            this.ClassKey     = ClassMethod.GenerateUniqueKey();
            this.InstructorId = model.InstructorId;
        }
 public static ClassMethodViewModel FromModel(ClassMethod model)
 {
     return(new ClassMethodViewModel
     {
         Name = model.Name,
         Visibility = model.Visibility,
         ReturnType = model.ReturnType,
         ClassMethodParameters = model.ClassMethodParameters.Select(ParameterViewModel.FromModel)
     });
 }
Пример #6
0
        public void GetMember_ClassMethod()
        {
            var val = new ClassMethod <string>();

            val.SetValue("Test text");
            var member = ExpressionHelper.GetMember <ClassMethod <string>, string>(x => x.GetValue());

            Assert.NotNull(member);
            Assert.IsInstanceOf <MethodInfo>(member);
            Assert.AreEqual("Test text", (member as MethodInfo).Invoke(val, new object[0]));
        }
Пример #7
0
        public ReadOnlyClassMethod(ClassMethod method)
        {
            this.method = method;
            if (method.Body.Count != 0)
            {
                body = new ReadOnlyMethodBody(method.Body);
            }

            genericParameters = ReadOnlyGenericParameterDeclaration.Create(method.GenericParameters);
            parameters        = method.Parameters.ToArray(parameter => new ReadOnlyMethodParameter(parameter));
            returnType        = new ReadOnlyTypeReference(method.ReturnType);
        }
Пример #8
0
        public void AddingClassMethodWithIncorrectRelationship()
        {
            Class someClass = new Class("SomeClass");
            Class anotherClass = new Class("AnotherClass");

            ClassMethod method = new ClassMethod(anotherClass, "DoSomething");

            TestDelegate test = delegate()
            {
                someClass.AddClassMethod(method);
            };
            Assert.Throws<ArgumentException>(test);
        }
Пример #9
0
 /// <summary>
 /// Initializes a new instance of ClassDefinition
 /// </summary>
 /// <param name="className">The name of the class to be created</param>
 /// <param name="superClassName">The name of an eventual super class</param>
 /// <param name="modifier">Determines how the class supports inheritance and member access</param>
 /// <param name="constructor">The constructor of the new class</param>
 /// <param name="fields">The fields of the new class</param>
 /// <param name="properties">The properties of the new class</param>
 /// <param name="methods">The methods of the new class</param>
 /// <param name="events">The events of the new class</param>
 public ClassDefinition(string className, string superClassName, Modifier modifier,
                        ClassMethod constructor, ClassField[] fields,
                        ClassProperty[] properties, ClassMethod[] methods,
                        ClassEvent[] events)
 {
     ClassName      = className;
     SuperClassName = superClassName;
     Modifier       = modifier;
     Constructor    = constructor;
     Fields         = fields;
     Properties     = properties;
     Methods        = methods;
     Events         = events;
 }
Пример #10
0
        public void Map_MethodToProperty()
        {
            var typeMap = new ClassMethodClassPropertyMap();

            this.safeMapService.Configuration.SetTypeMapping(typeMap.GetTypeMapping());

            var input = new ClassMethod <int>();

            input.SetValue(1337);

            var result = this.safeMapService.Convert <ClassMethod <int>, ClassProperty <string> >(input);

            Assert.AreEqual("1337", result.Value);
        }
 private MethodItem FromModel(ClassMethod model)
 {
     return(new MethodItem
     {
         ClassMethodParameters = model.ClassMethodParameters.Select(p => new ParameterItem
         {
             Name = p.Name,
             Type = p.Type
         }),
         Name = model.Name,
         ReturnType = model.ReturnType,
         Visibility = model.Visibility
     });
 }
Пример #12
0
        public void MethodOverriding()
        {
            Class entity = new Class("Entity");
            Class actor = new Class("Actor", entity);
            Class scriptActor = new Class("ScriptActor", actor);

            ClassMethod entityMethod = new ClassMethod(entity, "DoSomething");
            ClassMethod actorMethod = new ClassMethod(actor, "DoSomething");
            ClassMethod scriptActorMethod = new ClassMethod(scriptActor, "DoSomething");

            Assert.IsNull(entityMethod.Overrides);
            Assert.AreEqual(entityMethod, actorMethod.Overrides);
            Assert.AreEqual(entityMethod, scriptActorMethod.Overrides);
        }
Пример #13
0
        private void DumpConstructor(ClassMethod constructor)
        {
            textWriter.Write(constructor.Scope.ToString().ToLower());
            textWriter.Write(" constructor");

            Function function = constructor.Function;

            DumpParametersList(function.Parameters);
            if (function.Body.Statements.Length > 0 &&
                function.Body.Statements[0] is ParentConstructorCall)
            {
                function.Body.Statements[0].AcceptCompiler(this);
            }

            textWriter.WriteLine();
            DumpFunctionBody(function.Body);
            textWriter.WriteLine();
        }
        public SemanticAtom Visit(Method n)
        {
            ClassMethod method;

            if (n.ReturnAstType != null)
            {
                var returnUtilizedType = n.ReturnAstType.Accept(this) as UtilizedType;
                method = new ClassMethod(n.Name, returnUtilizedType, n.Location);
                AddToGlobalUtilization(returnUtilizedType, s => { method.RealizedReturnType = s; });
            }
            else
            {
                method = new ClassMethod(n.Name, null, n.Location)
                {
                    RealizedReturnType = Primitive.Void
                }
            };

            method.AstReturnType = n.ReturnAstType;

            foreach (var a in n.ArgumentList)
            {
                var arg = (MethodArgument)a.Accept(this);

                if (method.Arguments.ContainsKey(arg.Name))
                {
                    Globals.Errors.Add($"[{arg.DeclarationLocation.StartLine}, {arg.DeclarationLocation.StartColumn}] Argument ({arg.Name}) is already defined in {method.Name}.");
                }
                else
                {
                    method.Arguments.Add(arg.Name, arg);
                }
            }

            CurrentMethod     = method;
            _localPosition    = 0;
            BlockStack        = new Stack <ClassMethodBlock>();
            method.MethodBody = n.Statement.Accept(this) as ClassMethodBlock;

            return(method);
        }
Пример #15
0
        private void PersistMethod(Class classEntity, MethodItem methodData)
        {
            var method = new ClassMethod();

            method.Id         = Guid.NewGuid();
            method.Name       = methodData.Name;
            method.Visibility = methodData.Visibility.Value;
            method.ReturnType = methodData.ReturnType;

            foreach (var parameterData in methodData.ClassMethodParameters)
            {
                var parameter = new ClassMethodParameter();
                parameter.Id   = Guid.NewGuid();
                parameter.Name = parameterData.Name;
                parameter.Type = parameterData.Type;

                method.ClassMethodParameters.Add(parameter);
                _classMethodParameterRepository.Add(parameter);
            }

            classEntity.ClassMethods.Add(method);
            _classMethodRepository.Add(method);
        }
Пример #16
0
 public void DisposingAClassMethodRemovesItFromTheClassMethods()
 {
     ClassMethod method = new ClassMethod(luaClass, "DoSomething");
     method.Dispose();
     Assert.IsEmpty(luaClass.GetClassMethods());
 }
Пример #17
0
            public override ZingMethod Clone(Z.StateImpl myState, Z.Process myProcess, bool shallowCopy)
            {
                ClassMethod clone = new ClassMethod((Application) myState);

                clone.locals = new LocalVars(clone);
                clone.locals.CopyContents(locals);

                clone.inputs = new InputVars(clone);
                clone.inputs.CopyContents(inputs);

                clone.outputs = new OutputVars(clone);
                clone.outputs.CopyContents(outputs);

                clone.nextBlock = this.nextBlock;
                clone.handlerBlock = this.handlerBlock;
                // clone.application = (Application) myState;
                clone.SavedAtomicityLevel = this.SavedAtomicityLevel;
                clone.privThis = this.privThis;

                if (this.Caller != null)
                {
					if(shallowCopy)
					{
						clone.Caller = null;
					}
					else
					{
						// Recursively clone the next frame in the stack
						clone.Caller = this.Caller.Clone(myState, myProcess, false);
					}
                }
                else
                {
                    // When we reach the entry point, patch our process appropriately
                    if (myProcess != null)
                        myProcess.EntryPoint = this;
                }

                return clone;
            }
Пример #18
0
        public void CppFilesParsingTest()
        {
            string folder = "tmp";
            Dictionary <string, string> files = new Dictionary <string, string>
            {
                ["class1.cpp"] =
                    "#include \"class1.h\";\n"
                    + "/// <summary>\n/// Constructor of Class1</summary>"
                    + "/// <param name=\"name\">The object's name</param>\n"
                    + "Class1::Class1(string name){m_name= name;}\n"
                    + "/// <summary>\n/// Description of the method Foo()</summary>"
                    + "/// <param name=\"input\">Input argument</param>"
                    + "/// <returns>Return code</returns>\n"
                    + "void Class1::Foo(int input){return 1;}}\n}",
                ["class2.cpp"] =
                    "#include <stdlib>;\n#include <stdio.h>\n"
                    + "/// <summary>\n/// Method Class2.Foo(int)\n/// </summary>\n"
                    + "/// <param name=\"input\">Just a number</param>"
                    + "/// <returns>Return code</returns>\n"
                    + "int Class2::Foo(int input){return 2;}\n"
                    + "/// <summary>\n/// Method Class2.Foo2(int)\n/// </summary>\n"
                    + "/// <param name=\"input2\">Just a number</param>\n"
                    + "void Class2::Foo2(int input2){ // Do nothing, return nothing}\n"
                    + "}\n}"
            };

            CppSourceParser parser = new CppSourceParser();

            CreateFileStructure(folder, files);

            parser.ParseSourceFilesInDir(folder);

            List <ObjectClass> parsedClasses = parser.GetObjectClasses();

            Assert.Equal(2, parsedClasses.Count);

            ObjectClass objClass = parsedClasses[0];

            Assert.Single(objClass.Methods);
            ClassMethod method = objClass.Methods[0];

            Assert.Equal("Class1", objClass.Name);
            Assert.Equal("Foo", method.Name);
            Assert.Equal("Description of the method Foo()", method.MethodSummary);
            Assert.Equal("void", method.ReturnType);
            Assert.Equal("int input", method.Arguments);
            Assert.Equal("Input argument", method.ArgumentDescriptions["input"]);
            Assert.Equal("Return code", method.ReturnValueDescription);

            Assert.Single(objClass.Constructors);
            method = objClass.Constructors[0];
            Assert.Equal("Class1", objClass.Name);
            Assert.Equal(objClass.Name, method.Name);
            Assert.Equal("Constructor of Class1", method.MethodSummary);
            Assert.Null(method.ReturnType);
            Assert.Equal("string name", method.Arguments);
            Assert.Equal("The object's name", method.ArgumentDescriptions["name"]);
            Assert.Null(method.ReturnValueDescription);

            objClass = parsedClasses[1];
            method   = objClass.Methods[0];
            Assert.Equal("Class2", objClass.Name);
            Assert.Equal(2, objClass.Methods.Count);

            Assert.Equal("Foo", method.Name);
            Assert.Equal("Method Class2.Foo(int)", method.MethodSummary);
            Assert.Equal("int", method.ReturnType);
            Assert.Equal("int input", method.Arguments);
            Assert.Equal("Just a number", method.ArgumentDescriptions["input"]);
            Assert.Equal("Return code", method.ReturnValueDescription);

            method = objClass.Methods[1];
            Assert.Equal("Foo2", method.Name);
            Assert.Equal("Method Class2.Foo2(int)", method.MethodSummary);
            Assert.Equal("void", method.ReturnType);
            Assert.Equal("int input2", method.Arguments);
            Assert.Equal("Just a number", method.ArgumentDescriptions["input2"]);
            Assert.Null(method.ReturnValueDescription);

            DeleteFileStructure(folder);
        }
Пример #19
0
        public void TestQualifiedName()
        {
            ClassMethod method = new ClassMethod(luaClass, "DoSomething");

            Assert.AreEqual("Actor.DoSomething", method.QualifiedName);
        }
Пример #20
0
        public void CSharpFilesParsingTest()
        {
            string folder = "tmp";
            Dictionary <string, string> files = new Dictionary <string, string>
            {
                ["Class1File.cs"] =
                    "using System.IO;\nnamespace MyProject\n{\npublic class Class1\n{\r\n"
                    + "/// <summary>\n/// Constructor of Class1</summary>\n"
                    + "/// <param name=\"name\">The object's name</param>\n"
                    + "public Class1(string \n"
                    + "name){m_name= name;}\n"
                    + "/// <summary>\n/// Description of the method Foo()</summary>\n"
                    + "/// <param name=\"input\">Input argument</param>\n"
                    + "/// <returns>Return code</returns>\n"
                    + "public static void Foo(int input){return 1;}}\n}",
                ["Class2File.cs"] =
                    "using System.IO;\nnamespace MyProject\n{\npublic class Class2\n{\npublic Class2(){}\n\r"
                    + "/// <summary>\n/// Method Class2.Foo(int)\n/// </summary>\n"
                    + "/// <param name=\"input\">Just a number</param>\n"
                    + "/// <returns>Return code</returns>\n"
                    + "public int Foo(int input){return 2;}\n"
                    + "/// <summary>\n/// Method Class2.Foo2(int)\n/// </summary>\n"
                    + "/// <param name=\"input2\">Just a number</param>\n"
                    + "public async static void Foo2(int input2){ // Do nothing, return nothing}\n"
                    + "}\n}"
            };

            CSharpSourceParser parser = new CSharpSourceParser();

            CreateFileStructure(folder, files);

            parser.ParseSourceFilesInDir(folder);

            List <ObjectClass> parsedClasses = parser.GetObjectClasses();

            Assert.Equal(2, parsedClasses.Count);

            ObjectClass objClass = parsedClasses[0];

            Assert.Single(objClass.Methods);
            ClassMethod method = objClass.Methods[0];

            Assert.Equal("Class1", objClass.Name);
            Assert.Equal("Foo", method.Name);
            Assert.Equal("Description of the method Foo()", method.MethodSummary);
            Assert.Equal("void", method.ReturnType);
            Assert.Equal("int input", method.Arguments);
            Assert.Equal("Input argument", method.ArgumentDescriptions["input"]);
            Assert.Equal("Return code", method.ReturnValueDescription);

            Assert.Single(objClass.Constructors);
            method = objClass.Constructors[0];
            Assert.Equal("Class1", objClass.Name);
            Assert.Equal(objClass.Name, method.Name);
            Assert.Equal("Constructor of Class1", method.MethodSummary);
            Assert.Null(method.ReturnType);
            Assert.Equal("string name", method.Arguments);
            Assert.Equal("The object's name", method.ArgumentDescriptions["name"]);
            Assert.Null(method.ReturnValueDescription);

            objClass = parsedClasses[1];
            method   = objClass.Methods[0];
            Assert.Equal("Class2", objClass.Name);
            Assert.Equal(2, objClass.Methods.Count);

            Assert.Equal("Foo", method.Name);
            Assert.Equal("Method Class2.Foo(int)", method.MethodSummary);
            Assert.Equal("int", method.ReturnType);
            Assert.Equal("int input", method.Arguments);
            Assert.Equal("Just a number", method.ArgumentDescriptions["input"]);
            Assert.Equal("Return code", method.ReturnValueDescription);

            method = objClass.Methods[1];
            Assert.Equal("Foo2", method.Name);
            Assert.Equal("Method Class2.Foo2(int)", method.MethodSummary);
            Assert.Equal("void", method.ReturnType);
            Assert.Equal("int input2", method.Arguments);
            Assert.Equal("Just a number", method.ArgumentDescriptions["input2"]);
            Assert.Null(method.ReturnValueDescription);

            DeleteFileStructure(folder);
        }
Пример #21
0
 public void AutomaticallyBuildsBiDirectionalRelationshipWithClass()
 {
     ClassMethod method = new ClassMethod(luaClass, "DoSomething");
     Assert.IsNotEmpty(luaClass.GetClassMethods());
 }