See More

using System.Diagnostics.CodeAnalysis; using java.util; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp.Syntax; using JavaAst = com.github.javaparser.ast; namespace JavaToCSharp; public static class Extensions { /// The java Iterable to be enumerated. extension(java.lang.Iterable iterable) { ///

/// Converts a Java Iterable to a .NET IEnumerable<T> and filters the elements of type T. /// /// Type of items to be returned. /// A filtered enumeration of items of type T public IEnumerable OfType() { var iterator = iterable.iterator(); while (iterator.hasNext()) { if (iterator.next() is T item) { yield return item; } } } } extension(java.util.List? list) { public List? ToList() { if (list is null) { return null; } var newList = new List(); for (int i = 0; i < list.size(); i++) { newList.Add((T)list.get(i)); } return newList; } } extension(java.util.EnumSet values) { public bool HasFlag(T flag) => values.contains(flag); } extension(CompilationUnitSyntax syntax) { public CompilationUnitSyntax WithPackageFileComments(ConversionContext context, JavaAst.CompilationUnit compilationUnit, JavaAst.PackageDeclaration? packageDeclaration) => context.Options.IncludeComments ? CommentsHelper.AddPackageComments(syntax, compilationUnit, packageDeclaration) : syntax; } extension(Optional optional) { public T? FromOptional() where T : class => optional.isPresent() ? optional.get() as T ?? throw new InvalidOperationException($"Optional did not convert to {typeof(T)}") : null; public T FromRequiredOptional() where T : class => optional.isPresent() ? optional.get() as T ?? throw new InvalidOperationException($"Optional did not convert to {typeof(T)}") : throw new InvalidOperationException("Required optional did not have a value"); } extension(JavaAst.NodeList nodeList) { public ISet ToModifierKeywordSet() => nodeList.ToList()?.Select(i => i.getKeyword()).ToHashSet() ?? []; } extension(TSyntax syntax) where TSyntax : SyntaxNode { public TSyntax WithLeadingNewLines(int count = 1) => syntax.WithLeadingTrivia(Enumerable.Repeat(Whitespace.NewLine, count)); public TSyntax WithTrailingNewLines(int count = 1) => syntax.WithTrailingTrivia(Enumerable.Repeat(Whitespace.NewLine, count)); } extension(TSyntax? syntax) where TSyntax : SyntaxNode { [return: NotNullIfNotNull(nameof(node))] public TSyntax? WithJavaComments(ConversionContext context, JavaAst.Node? node) => context.Options.IncludeComments ? CommentsHelper.AddCommentsTrivias(syntax, node) : syntax; } }