Esempio n. 1
0
        public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
        {
            var typeDeclaration = methodDeclaration.GetParent<TypeDeclaration>();
            var writer = this.m_TypeWriters[typeDeclaration];

            var modifiers = this.GetJavaModifiersAsList(methodDeclaration.Modifiers);
            var javaModifiers = this.ConvertModifierListToJavaModifiers(modifiers);
            writer.WriteLine(".method " + javaModifiers + " " +
                             JavaSignature.CreateMethodSignature(methodDeclaration, this.m_Resolver.TypeResolveContext, false));

            methodDeclaration.AcceptVisitor(new JavaMethodVisitor(this.m_Resolver, writer));

            writer.WriteLine(".end method");
        }
Esempio n. 2
0
        public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
        {
            var typeDeclaration = methodDeclaration.GetParent <TypeDeclaration>();
            var writer          = this.m_TypeWriters[typeDeclaration];

            var modifiers     = this.GetJavaModifiersAsList(methodDeclaration.Modifiers);
            var javaModifiers = this.ConvertModifierListToJavaModifiers(modifiers);

            writer.WriteLine(".method " + javaModifiers + " " +
                             JavaSignature.CreateMethodSignature(methodDeclaration, this.m_Resolver.TypeResolveContext, false));

            methodDeclaration.AcceptVisitor(new JavaMethodVisitor(this.m_Resolver, writer));

            writer.WriteLine(".end method");
        }
            public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
            {
                if (!IsDisposeMethod(methodDeclaration))
                {
                    return;
                }

                var type = methodDeclaration.GetParent <TypeDeclaration>();

                if (type == null)
                {
                    return;
                }

                AddIssue(methodDeclaration,
                         ctx.TranslateString("Type does not implement IDisposable despite having a Dispose method"),
                         script => Fix(script, methodDeclaration, type));
            }
Esempio n. 4
0
 public static string CreateMethodSignature(MethodDeclaration method, ITypeResolveContext resolver, bool fullyQualified = true)
 {
     var builder = new StringBuilder();
     if (fullyQualified)
     {
         builder.Append(CreateTypeSignature(method.GetParent<TypeDeclaration>()));
         builder.Append("/");
     }
     builder.Append(method.Name);
     builder.Append("(");
     foreach (var parameter in method.Parameters)
     {
         builder.Append(CreateTypeSignature(parameter.Type.ToTypeReference().Resolve(resolver)));
     }
     builder.Append(")");
     builder.Append(CreateTypeSignature(method.ReturnType.ToTypeReference().Resolve(resolver)));
     return builder.ToString();
 }
Esempio n. 5
0
        public static string CreateMethodSignature(MethodDeclaration method, ITypeResolveContext resolver, bool fullyQualified = true)
        {
            var builder = new StringBuilder();

            if (fullyQualified)
            {
                builder.Append(CreateTypeSignature(method.GetParent <TypeDeclaration>()));
                builder.Append("/");
            }
            builder.Append(method.Name);
            builder.Append("(");
            foreach (var parameter in method.Parameters)
            {
                builder.Append(CreateTypeSignature(parameter.Type.ToTypeReference().Resolve(resolver)));
            }
            builder.Append(")");
            builder.Append(CreateTypeSignature(method.ReturnType.ToTypeReference().Resolve(resolver)));
            return(builder.ToString());
        }
Esempio n. 6
0
        public override void VisitMethodDeclaration(MethodDeclaration methodDeclaration)
        {
            if (!methodDeclaration.Body.IsNull)
            {
                base.VisitMethodDeclaration(methodDeclaration);
                return;
            }

            if (methodDeclaration.Name == "ToString" && methodDeclaration.Parameters.Count == 0)
            {
                methodDeclaration.Modifiers |= Modifiers.Override;
            }

            methodDeclaration.Modifiers |= Modifiers.Public;
            methodDeclaration.Body       = new BlockStatement {
                BindMethodBody(methodDeclaration)
            };

            base.VisitMethodDeclaration(methodDeclaration);

            if (IsIgnored(methodDeclaration))
            {
                methodDeclaration.Remove();
            }

            RemoveAttributes(methodDeclaration.Attributes);

            var typeDeclaration = methodDeclaration.GetParent <TypeDeclaration> ();

            if (typeDeclaration == null ||
                !CurrentTypeData.IsReadOnlyList ||
                methodDeclaration.Name != "Item")
            {
                return;
            }

            var indexerDeclaration = new IndexerDeclaration {
                Modifiers  = Modifiers.Public,
                ReturnType = methodDeclaration.ReturnType.Clone(),
                Getter     = new Accessor {
                    Body = (BlockStatement)methodDeclaration.Body.Clone()
                }
            };

            foreach (var param in methodDeclaration.Parameters)
            {
                indexerDeclaration.Parameters.Add(param.Clone());
            }

            methodDeclaration.ReplaceWith(indexerDeclaration);

            typeDeclaration.BaseTypes.Add(
                new SimpleType("IReadOnlyList", methodDeclaration.ReturnType.Clone())
                );

            var forStatement = new ForStatement {
                Initializers =
                {
                    new VariableDeclarationStatement(
                        indexerDeclaration.Parameters.First().Type.Clone(),
                        "i",
                        new PrimitiveExpression(0)
                        ),
                    new ExpressionStatement(
                        new AssignmentExpression(
                            new IdentifierExpression("n"),
                            new IdentifierExpression("Count")
                            )
                        )
                },
                Condition = new BinaryOperatorExpression(
                    new IdentifierExpression("i"),
                    BinaryOperatorType.LessThan,
                    new IdentifierExpression("n")
                    ),
                Iterators =
                {
                    new ExpressionStatement(
                        new UnaryOperatorExpression(
                            UnaryOperatorType.PostIncrement,
                            new IdentifierExpression("i")
                            )
                        )
                },
                EmbeddedStatement = new YieldReturnStatement {
                    Expression = new IndexerExpression(
                        new ThisReferenceExpression(),
                        new IdentifierExpression("i")
                        )
                },
            };

            typeDeclaration.Members.Add(new MethodDeclaration {
                Modifiers  = Modifiers.Public,
                Name       = "GetEnumerator",
                ReturnType = new SimpleType("IEnumerator", methodDeclaration.ReturnType.Clone()),
                Body       = new BlockStatement {
                    forStatement
                }
            });

            typeDeclaration.Members.Add(new MethodDeclaration {
                Name       = "IEnumerable.GetEnumerator",
                ReturnType = AstType.Create("IEnumerator"),
                Body       = new BlockStatement {
                    new ReturnStatement(
                        new IdentifierExpression("GetEnumerator").Invoke()
                        )
                }
            });
        }
Esempio n. 7
0
			public override void VisitMethodDeclaration (MethodDeclaration methodDeclaration)
			{
				base.VisitMethodDeclaration (methodDeclaration);

				//
				// Try to force the method into a form we can handle
				//
				var m = methodDeclaration;

				var gotos = m.Body.Descendants.OfType<GotoStatement> ().ToList ();
				if (gotos.Count == 0)
					return;

				if (HasBadLabels (m)) {
					foreach (var ts in transforms) {
						m = (MethodDeclaration)methodDeclaration.Clone ();

						m.AcceptVisitor (new LabelLoops ());
						m.AcceptVisitor (new SwitchSectionBlocksToStatements ());
						foreach (var t in ts) {
							m.AcceptVisitor (t);
							m.AcceptVisitor (new RemoveRedundantGotos ());
							m.AcceptVisitor (new RemoveUnreachableStatements ());
						}
						m.AcceptVisitor (new RemoveLabelsWithoutGotos ());

						if (!HasBadLabels (m)) {
							break;
						}
					}

					if (HasBadLabels (m)) {
						App.Warning ("! GOTO labels at different levels in {0}.{1}(). This is not supported.", 
							methodDeclaration.GetParent<TypeDeclaration> ().Name, 
							methodDeclaration.Name);
						return;
					} else {
						methodDeclaration.ReplaceWith (m);
					}
				}

				//
				// Handle it
				//
				m.AcceptVisitor (new CreateGotoLoop ());
				m.AcceptVisitor (new RewriteGotos ());
			}
Esempio n. 8
0
			public override void VisitMethodDeclaration (MethodDeclaration methodDeclaration)
			{
				base.VisitMethodDeclaration (methodDeclaration);

				if (methodDeclaration.Body.IsNull && methodDeclaration.GetParent<TypeDeclaration> ().ClassType != ClassType.Interface ) {
					var block = new BlockStatement ();
					block.Add (new ThrowStatement (new ObjectCreateExpression (new SimpleType ("NotSupportedException"))));
					methodDeclaration.Body = block;

				}
			}