See More

using com.github.javaparser.ast; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; namespace JavaToCSharp; public static class UsingsHelper { public static IEnumerable GetUsings(ConversionContext context, IEnumerable imports, JavaConversionOptions? options, IEnumerable rootMembers, NamespaceDeclarationSyntax? namespaceSyntax) { var usings = new List(); foreach (var import in imports) { // The import directive in Java will import a specific class. string importName = import.getNameAsString(); var lastPartStartIndex = importName.LastIndexOf(".", StringComparison.Ordinal); var importNameWithoutClassName = lastPartStartIndex == -1 ? importName : importName[..lastPartStartIndex]; var nameSpace = TypeHelper.Capitalize(importNameWithoutClassName); var usingSyntax = SyntaxFactory.UsingDirective(SyntaxFactory.ParseName(nameSpace)); if (context.Options.IncludeComments) { usingSyntax = CommentsHelper.AddUsingComments(usingSyntax, import); } usings.Add(usingSyntax); } if (options?.IncludeUsings == true) { usings.AddRange(options.Usings .Where(x => !string.IsNullOrWhiteSpace(x)) .Select(ns => SyntaxFactory.UsingDirective(SyntaxFactory.ParseName(ns)))); } if (namespaceSyntax != null) { foreach (var staticUsing in options?.StaticUsingEnumNames ?? []) { var usingSyntax = SyntaxFactory .UsingDirective(SyntaxFactory.ParseName($"{namespaceSyntax.Name}.{staticUsing}")) .WithStaticKeyword(SyntaxFactory.Token(SyntaxKind.StaticKeyword)); usings.Add(usingSyntax); } } return usings.Distinct(new UsingDirectiveSyntaxComparer()).ToList(); } } public class UsingDirectiveSyntaxComparer : IEqualityComparer { public bool Equals(UsingDirectiveSyntax? x, UsingDirectiveSyntax? y) { if (ReferenceEquals(x, y)) return true; if (x is null) return false; if (y is null) return false; if (x.GetType() != y.GetType()) return false; return Equals(x.Alias?.ToString(), y.Alias?.ToString()) && Equals(x.Name?.ToString(), y.Name?.ToString()); } public int GetHashCode(UsingDirectiveSyntax obj) { return HashCode.Combine(obj.Alias?.ToString() ?? "", obj.Name?.ToString() ?? ""); } }