public void GetterSetterOnly_IsIncluded()
        {
            var sut = new GetterSetter() { I = 1 };
            var printer = CreatePrinter();

            Assert.AreEqual(@"new GetterSetter()
            {
            I = 1
            }", printer.PrintObject(sut, ""));
        }
Exemple #2
0
        public void GetterSetterOnly_IsIncluded()
        {
            var sut = new GetterSetter()
            {
                I = 1
            };
            var printer = CreatePrinter();

            Assert.AreEqual(@"new GetterSetter()
{
    I = 1
}", printer.PrintObject(sut, ""));
        }
Exemple #3
0
 public void Visit(GetterSetter node)
 {
     Debug.Fail("shouldn't get here");
 }
 public virtual void Visit(GetterSetter node)
 {
     // no children
 }
Exemple #5
0
 public void Visit(GetterSetter node)
 {
     // starts with a 'get' or a 'set', so we don't care
 }
Exemple #6
0
        public override void VisitCXXMethodDecl(CXXMethodDecl decl, VisitKind visitKind)
        {
            if (visitKind != VisitKind.Enter)
            {
                return;
            }

            var isConstructor = decl is CXXConstructorDecl;

            if (decl is CXXDestructorDecl || isConstructor)
            {
                return;
            }

            if (decl.IsCopyAssignmentOperator || decl.IsMoveAssignmentOperator)
            {
                return;
            }

            if (decl.Parent == null)
            {
                return;
            }
            if (!decl.Parent.QualifiedName.StartsWith("Urho3D::"))
            {
                return;
            }

            // Only get methods prefixed with Get with no parameters
            // and Set methods that return void and take a single parameter
            var name = decl.Name;

            // Handle Get methods that are not really getters
            // This is a get method that does not get anything

            QualType type;

            if (name.StartsWith("Get") || name.StartsWith("Is"))
            {
                if (decl.Parameters.Count() != 0)
                {
                    return;
                }
                if (decl.ReturnQualType.ToString() == "void")
                {
                    return;
                }
                if (name == "IsElementEventSender" ||
                    name == "IsOpen" ||
                    name == "IsPressed")
                {
                    return;
                }

                type = decl.ReturnQualType;
            }
            else if (name.StartsWith("Set"))
            {
                if (decl.Parameters.Count() != 1)
                {
                    return;
                }
                if (!(decl.ReturnQualType.Bind() is Sharpie.Bind.Types.VoidType))
                {
                    return;
                }
                if ((name == "SetTypeName" || name == "SetType") && decl.Parent.Name == "UnknownComponent")
                {
                    return;
                }
                if (decl.Access != AccessSpecifier.Public)
                {
                    return;
                }
                type = decl.Parameters.FirstOrDefault().QualType;
            }
            else
            {
                return;
            }

            Dictionary <string, Dictionary <QualType, GetterSetter> > typeProperties;

            if (!allProperties.TryGetValue(decl.Parent.Name, out typeProperties))
            {
                typeProperties = new Dictionary <string, Dictionary <QualType, GetterSetter> >();
                allProperties[decl.Parent.Name] = typeProperties;
            }

            var propName = name.Substring(name.StartsWith("Is") ? 2 : 3);

            Dictionary <QualType, GetterSetter> property;

            if (!typeProperties.TryGetValue(propName, out property))
            {
                property = new Dictionary <QualType, GetterSetter>();
                typeProperties[propName] = property;
            }
            GetterSetter gs;

            if (!property.TryGetValue(type, out gs))
            {
                gs = new GetterSetter()
                {
                    Name = propName
                };
            }

            if (name.StartsWith("Get") || name.StartsWith("Is"))
            {
                Console.WriteLine($"Getter exists for {name}");
                if (propName != decl.Parent.Name || propName == "Text")
                {
                    // do not generate Getter if propertyName equals to typename (Text type already has a workaround for this case)
                    gs.Getter = decl;
                }
            }
            else
            {
                if (gs.Setter != null)
                {
                    Console.WriteLine($"Setter exists for {name}");
                }
                gs.Setter = decl;
            }
            property[type] = gs;
        }
Exemple #7
0
 public void Visit(GetterSetter node)
 {
     ReportError(node);
 }
Exemple #8
0
 public virtual bool Walk(GetterSetter node)
 {
     return(true);
 }
Exemple #9
0
 public virtual void Visit(GetterSetter node)
 {
     if (node != null)
     {
          AcceptChildren(node);
     }
 }
 public void Visit(GetterSetter node)
 {
     // invalid! ignore
     IsValid = false;
 }
Exemple #11
0
 public virtual void PostWalk(GetterSetter node) { }
Exemple #12
0
 public virtual bool Walk(GetterSetter node) { return true; }
Exemple #13
0
		public override void VisitCXXMethodDecl(CXXMethodDecl decl, VisitKind visitKind)
		{
			if (visitKind != VisitKind.Enter)
				return;

			var isConstructor = decl is CXXConstructorDecl;
			if (decl is CXXDestructorDecl || isConstructor)
				return;

			if (decl.IsCopyAssignmentOperator || decl.IsMoveAssignmentOperator)
				return;

			if (decl.Parent == null)
				return;
			if (!decl.Parent.QualifiedName.StartsWith("Urho3D::"))
				return;

			// Only get methods prefixed with Get with no parameters
			// and Set methods that return void and take a single parameter
			var name = decl.Name;

			// Handle Get methods that are not really getters
			// This is a get method that does not get anything

			QualType type;
			if (name.StartsWith("Get") || name.StartsWith("Is")) {
				if (decl.Parameters.Count() != 0)
					return;
				if (decl.ReturnQualType.ToString() == "void")
					return;
				if (name == "IsElementEventSender" ||
					name == "IsOpen" ||
					name == "IsPressed")
					return;

				type = decl.ReturnQualType;
			} else if (name.StartsWith("Set")) {
				if (decl.Parameters.Count() != 1)
					return;
				if (!(decl.ReturnQualType.Bind() is Sharpie.Bind.Types.VoidType))
					return;
				if ((name == "SetTypeName" || name == "SetType") && decl.Parent.Name == "UnknownComponent")
					return;
				if (decl.Access != AccessSpecifier.Public)
					return;
				type = decl.Parameters.FirstOrDefault().QualType;
			} else
				return;

			Dictionary<string, Dictionary<QualType, GetterSetter>> typeProperties;
			if (!allProperties.TryGetValue(decl.Parent.Name, out typeProperties)) {
				typeProperties = new Dictionary<string, Dictionary<QualType, GetterSetter>>();
				allProperties[decl.Parent.Name] = typeProperties;
			}

			var propName = name.Substring(name.StartsWith("Is") ? 2 : 3);

			Dictionary<QualType, GetterSetter> property;

			if (!typeProperties.TryGetValue(propName, out property)) {
				property = new Dictionary<QualType, GetterSetter>();
				typeProperties[propName] = property;
			}
			GetterSetter gs;
			if (!property.TryGetValue(type, out gs)) {
				gs = new GetterSetter() { Name = propName };
			}

			if (name.StartsWith("Get") || name.StartsWith("Is")) {
				Console.WriteLine($"Getter exists for {name}");
				gs.Getter = decl;
			} else {
				if (gs.Setter != null) {
					Console.WriteLine($"Setter exists for {name}");
				}
				gs.Setter = decl;
			}
			property[type] = gs;
		}
Exemple #14
0
 public virtual void PostWalk(GetterSetter node)
 {
 }
 public override bool Walk(GetterSetter node)
 {
     AddNode(node); return(true);
 }
 public void Visit(GetterSetter node)
 {
     // not applicable; terminate
 }
 public virtual void Visit(GetterSetter node)
 {
     // no children
 }