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