Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 2 additions & 11 deletions Generator/JavaTypeWriters/JavaClassWriter.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,13 @@
using Generator.Extensions;
using MessagePack;
using Newtonsoft.Json;
using Relewise.Client.Responses;
using System;
using System.CodeDom.Compiler;
using System.Reflection;

namespace Generator.JavaTypeWriters;

public class JavaClassWriter : IJavaTypeWriter
public class JavaClassWriter(JavaWriter javaWriter) : IJavaTypeWriter
{
private readonly JavaWriter javaWriter;

public JavaClassWriter(JavaWriter javaWriter)
{
this.javaWriter = javaWriter;
}

public bool CanWrite(Type type) => IsClass(type) || IsAnyStruct(type);

private bool IsClass(Type type) => type.IsClass;
Expand Down Expand Up @@ -81,7 +72,7 @@ public void Write(IndentedTextWriter writer, Type type, string typeName)
baseTypeName = javaWriter.TypeName(baseType).RemoveNullable();
}

writer.WriteLine($"public {(type.IsAbstract ? "abstract " : "")}class {typeName}{(baseTypeName is not null ? $" extends {baseTypeName}" : "")}{(type.GetInterfaces() is { Length: > 0 } interfaces ? " implements " + string.Join(", ", interfaces.Select(i => javaWriter.TypeName(i))) : "")}");
writer.WriteLine($"public {(type.IsAbstract ? "abstract " : "")}class {typeName}{(baseTypeName is not null ? $" extends {baseTypeName}" : "")}{(type.GetInterfaces().Where(x => x.IsPublic).ToArray() is { Length: > 0 } interfaces ? " implements " + string.Join(", ", interfaces.Select(i => javaWriter.TypeName(i))) : "")}");
writer.WriteLine("{");
writer.Indent++;
if (type.IsMaybeBaseClassOfSomethingPolymorphic())
Expand Down
34 changes: 22 additions & 12 deletions Generator/JavaWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,35 @@ namespace Generator;

public class JavaWriter
{
private readonly List<IJavaTypeWriter> javaTypeWriters;
private readonly JavaTypeResolver javaTypeResolver;
private readonly List<IJavaTypeWriter> _javaTypeWriters;
private readonly JavaTypeResolver _javaTypeResolver;

public HashSet<Type> MissingTypeDefinitions { get; set; } = new();
public Assembly Assembly { get; }
public string BasePath { get; }
private string ModelsPath { get; }
public XmlDocumentation XmlDocumentation { get; }
public JavaCreatorMethodWriter CreatorMethodWriter { get; }
public JavaPropertyGetterMethodsWriter PropertyGetterMethodsWriter { get; }
public JavaPropertySetterMethodsWriter PropertySetterMethodsWriter { get; }
public JavaStaticReadonlyPropertiesWriter StaticReadonlyPropertiesWriter { get; }
public JavaFieldWriter SettablePropertiesWriter { get; }

public void ClearFolder()
{
if (Directory.Exists(ModelsPath))
new DirectoryInfo(ModelsPath).Delete(true);

Directory.CreateDirectory(ModelsPath);
}

public JavaWriter(Assembly assembly, string basePath, XmlDocumentation xmlDocumentation)
{
javaTypeWriters = new List<IJavaTypeWriter>() { new JavaKeyValuePairWriter(this), new JavaEnumWriter(this), new JavaInterfaceWriter(this), new JavaClassWriter(this) };
javaTypeResolver = new JavaTypeResolver(assembly);
_javaTypeWriters = new List<IJavaTypeWriter> { new JavaKeyValuePairWriter(this), new JavaEnumWriter(this), new JavaInterfaceWriter(this), new JavaClassWriter(this) };
_javaTypeResolver = new JavaTypeResolver(assembly);
Assembly = assembly;
BasePath = basePath;
ModelsPath = $"{BasePath}/{Constants.GenerationFolderPath}/";
XmlDocumentation = xmlDocumentation;
CreatorMethodWriter = new JavaCreatorMethodWriter(this);
PropertyGetterMethodsWriter = new JavaPropertyGetterMethodsWriter(this);
Expand All @@ -39,43 +49,43 @@ public void WriteTypes(IEnumerable<Type> types)
{
foreach (var type in types)
{
javaTypeResolver.TypesToGenerate.Enqueue(type);
_javaTypeResolver.TypesToGenerate.Enqueue(type);
}

while (javaTypeResolver.TypesToGenerate.Count > 0)
while (_javaTypeResolver.TypesToGenerate.Count > 0)
{
var type = javaTypeResolver.TypesToGenerate.Dequeue();
var type = _javaTypeResolver.TypesToGenerate.Dequeue();

if (type == typeof(object) || type == typeof(ValueType) || type == typeof(Enum))
continue;

var potentialNullableTypeName = TypeName(type);
string typeName = potentialNullableTypeName.RemoveNullable();

if (javaTypeResolver.IsWritten(typeName)) continue;
if (_javaTypeResolver.IsWritten(typeName)) continue;

if (type.IsGenericTypeDefinition || type.IsGenericTypeParameter || typeName.Contains("d__"))
{
continue;
}

using var streamWriter = File.CreateText($"{BasePath}/{Constants.GenerationFolderPath}/{typeName}.java");
using var streamWriter = File.CreateText($"{ModelsPath}{typeName}.java");
using var writer = new IndentedTextWriter(streamWriter);

var javaTypeWriter = javaTypeWriters.FirstOrDefault(writer => writer.CanWrite(type));
var javaTypeWriter = _javaTypeWriters.FirstOrDefault(w => w.CanWrite(type));
if (javaTypeWriter is null)
{
MissingTypeDefinitions.Add(type);
}
else
{
javaTypeWriter.Write(writer, type, typeName);
javaTypeResolver.HasWritten(typeName);
_javaTypeResolver.HasWritten(typeName);
}
}
}

public string TypeName(Type type) => javaTypeResolver.ResolveType(type);
public string TypeName(Type type) => _javaTypeResolver.ResolveType(type);

public string TypeName(PropertyInfo property)
{
Expand Down
2 changes: 2 additions & 0 deletions Generator/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@

var javaWriter = new JavaWriter(assembly, basePath, xmlDocumentation);

javaWriter.ClearFolder();

javaWriter.WriteTypes(assembly
.GetTypes()
.Where(type => type.IsSubclassOf(typeof(LicensedRequest))));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
@JsonSubTypes.Type(value = ProductPerformanceRequest.class, name = "Relewise.Client.Requests.Analyzers.ProductPerformanceRequest, Relewise.Client"),
})
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class AnalyzerRequest extends LicensedRequest implements IHaveCurrencyLanguage
public abstract class AnalyzerRequest extends LicensedRequest
{
public String $type = "";
public @Nullable Language language;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = BrandAdministrativeAction.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class BrandAdministrativeAction extends Trackable implements IHaveCurrencyLanguage
public class BrandAdministrativeAction extends Trackable
{
public String $type = "Relewise.Client.DataTypes.BrandAdministrativeAction, Relewise.Client";
public FilterCollection filters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = BrandDataFilter.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class BrandDataFilter extends DataFilter implements IHaveCurrencyLanguage, IBrandFilter
public class BrandDataFilter extends DataFilter implements IBrandFilter
{
public String $type = "Relewise.Client.Requests.Filters.BrandDataFilter, Relewise.Client";
public static BrandDataFilter create(String key, String... objectPath)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = BrandQuery.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class BrandQuery extends LicensedRequest implements IHaveCurrencyLanguage
public class BrandQuery extends LicensedRequest
{
public String $type = "Relewise.Client.Requests.Queries.BrandQuery, Relewise.Client";
public FilterCollection filters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
@JsonSubTypes.Type(value = PersonalBrandRecommendationRequest.class, name = "Relewise.Client.Requests.Recommendations.PersonalBrandRecommendationRequest, Relewise.Client"),
})
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class BrandRecommendationRequest extends RecommendationRequest implements IUserIdentifier, IHaveCurrencyLanguage
public abstract class BrandRecommendationRequest extends RecommendationRequest implements IUserIdentifier
{
public String $type = "";
public BrandRecommendationRequestSettings settings;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = CartDataFilter.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class CartDataFilter extends Filter implements IHaveCurrencyLanguage
public class CartDataFilter extends Filter
{
public String $type = "Relewise.Client.Requests.Filters.CartDataFilter, Relewise.Client";
public String key;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
@JsonSubTypes({
})
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class CategoryAdministrativeAction extends Trackable implements IHaveCurrencyLanguage
public abstract class CategoryAdministrativeAction extends Trackable
{
public String $type = "";
public FilterCollection filters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = CompanyAdministrativeAction.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class CompanyAdministrativeAction extends Trackable implements IHaveCurrencyLanguage
public class CompanyAdministrativeAction extends Trackable
{
public String $type = "Relewise.Client.DataTypes.CompanyAdministrativeAction, Relewise.Client";
public FilterCollection filters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = CompanyDataFilter.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class CompanyDataFilter extends DataFilter implements IHaveCurrencyLanguage, ICompanyFilter
public class CompanyDataFilter extends DataFilter implements ICompanyFilter
{
public String $type = "Relewise.Client.Requests.Filters.CompanyDataFilter, Relewise.Client";
public static CompanyDataFilter create(String key, String... objectPath)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentAdministrativeAction.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentAdministrativeAction extends Trackable implements IHaveCurrencyLanguage
public class ContentAdministrativeAction extends Trackable
{
public String $type = "Relewise.Client.DataTypes.ContentAdministrativeAction, Relewise.Client";
public FilterCollection filters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentCategoryAdministrativeAction.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentCategoryAdministrativeAction extends CategoryAdministrativeAction implements IHaveCurrencyLanguage
public class ContentCategoryAdministrativeAction extends CategoryAdministrativeAction
{
public String $type = "Relewise.Client.DataTypes.ContentCategoryAdministrativeAction, Relewise.Client";
public static ContentCategoryAdministrativeAction create(@Nullable Language language, @Nullable Currency currency, FilterCollection filters, CategoryAdministrativeActionUpdateKind kind)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentCategoryDataFilter.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentCategoryDataFilter extends DataFilter implements IHaveCurrencyLanguage, IContentCategoryFilter, ICategoryFilter
public class ContentCategoryDataFilter extends DataFilter implements IContentCategoryFilter, ICategoryFilter
{
public String $type = "Relewise.Client.Requests.Filters.ContentCategoryDataFilter, Relewise.Client";
public static ContentCategoryDataFilter create(String key, String... objectPath)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
@JsonSubTypes({
})
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class ContentCategoryIdFilterCategoryQuery extends LicensedRequest implements IHaveCurrencyLanguage
public abstract class ContentCategoryIdFilterCategoryQuery extends LicensedRequest
{
public String $type = "";
public FilterCollection filters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentCategoryQuery.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentCategoryQuery extends ContentCategoryIdFilterCategoryQuery implements IHaveCurrencyLanguage
public class ContentCategoryQuery extends ContentCategoryIdFilterCategoryQuery
{
public String $type = "Relewise.Client.Requests.Queries.ContentCategoryQuery, Relewise.Client";
public static ContentCategoryQuery create()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
@JsonSubTypes.Type(value = PersonalContentCategoryRecommendationRequest.class, name = "Relewise.Client.Requests.Recommendations.PersonalContentCategoryRecommendationRequest, Relewise.Client"),
})
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class ContentCategoryRecommendationRequest extends RecommendationRequest implements IUserIdentifier, IHaveCurrencyLanguage
public abstract class ContentCategoryRecommendationRequest extends RecommendationRequest implements IUserIdentifier
{
public String $type = "";
public ContentCategoryRecommendationRequestSettings settings;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentCategorySearchRequest.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentCategorySearchRequest extends PaginatedSearchRequest implements IUserIdentifier, IHaveCurrencyLanguage
public class ContentCategorySearchRequest extends PaginatedSearchRequest implements IUserIdentifier
{
public String $type = "Relewise.Client.Requests.Search.ContentCategorySearchRequest, Relewise.Client";
public String term;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentDataFilter.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentDataFilter extends DataFilter implements IHaveCurrencyLanguage, IContentFilter
public class ContentDataFilter extends DataFilter implements IContentFilter
{
public String $type = "Relewise.Client.Requests.Filters.ContentDataFilter, Relewise.Client";
public static ContentDataFilter create(String key, String... objectPath)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentQuery.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentQuery extends LicensedRequest implements IHaveCurrencyLanguage
public class ContentQuery extends LicensedRequest
{
public String $type = "Relewise.Client.Requests.Queries.ContentQuery, Relewise.Client";
public FilterCollection filters;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
@JsonSubTypes.Type(value = ContentsViewedAfterViewingMultipleContentsRequest.class, name = "Relewise.Client.Requests.Recommendations.ContentsViewedAfterViewingMultipleContentsRequest, Relewise.Client"),
})
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class ContentRecommendationRequest extends RecommendationRequest implements IUserIdentifier, IHaveCurrencyLanguage
public abstract class ContentRecommendationRequest extends RecommendationRequest implements IUserIdentifier
{
public String $type = "";
public ContentRecommendationRequestSettings settings;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentSearchRequest.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentSearchRequest extends PaginatedSearchRequest implements IUserIdentifier, IHaveCurrencyLanguage
public class ContentSearchRequest extends PaginatedSearchRequest implements IUserIdentifier
{
public String $type = "Relewise.Client.Requests.Search.ContentSearchRequest, Relewise.Client";
public @Nullable String term;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentsViewedAfterViewingContentRequest.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentsViewedAfterViewingContentRequest extends ContentRecommendationRequest implements IUserIdentifier, IHaveCurrencyLanguage
public class ContentsViewedAfterViewingContentRequest extends ContentRecommendationRequest implements IUserIdentifier
{
public String $type = "Relewise.Client.Requests.Recommendations.ContentsViewedAfterViewingContentRequest, Relewise.Client";
public String contentId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentsViewedAfterViewingMultipleContentsRequest.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentsViewedAfterViewingMultipleContentsRequest extends ContentRecommendationRequest implements IUserIdentifier, IHaveCurrencyLanguage
public class ContentsViewedAfterViewingMultipleContentsRequest extends ContentRecommendationRequest implements IUserIdentifier
{
public String $type = "Relewise.Client.Requests.Recommendations.ContentsViewedAfterViewingMultipleContentsRequest, Relewise.Client";
public String[] contentIds;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentsViewedAfterViewingMultipleProductsRequest.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentsViewedAfterViewingMultipleProductsRequest extends ContentRecommendationRequest implements IUserIdentifier, IHaveCurrencyLanguage
public class ContentsViewedAfterViewingMultipleProductsRequest extends ContentRecommendationRequest implements IUserIdentifier
{
public String $type = "Relewise.Client.Requests.Recommendations.ContentsViewedAfterViewingMultipleProductsRequest, Relewise.Client";
public ProductAndVariantId[] productAndVariantIds;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = ContentsViewedAfterViewingProductRequest.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ContentsViewedAfterViewingProductRequest extends ContentRecommendationRequest implements IUserIdentifier, IHaveCurrencyLanguage
public class ContentsViewedAfterViewingProductRequest extends ContentRecommendationRequest implements IUserIdentifier
{
public String $type = "Relewise.Client.Requests.Recommendations.ContentsViewedAfterViewingProductRequest, Relewise.Client";
public ProductAndVariantId productAndVariantId;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
property = "$type",
defaultImpl = CustomProductRecommendationRequest.class)
@JsonIgnoreProperties(ignoreUnknown = true)
public class CustomProductRecommendationRequest extends ProductRecommendationRequest implements IUserIdentifier, IHaveCurrencyLanguage
public class CustomProductRecommendationRequest extends ProductRecommendationRequest implements IUserIdentifier
{
public String $type = "Relewise.Client.Requests.Recommendations.CustomProductRecommendationRequest, Relewise.Client";
public String recommendationType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
@JsonSubTypes({
})
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class DataFilter extends Filter implements IHaveCurrencyLanguage
public abstract class DataFilter extends Filter
{
public String $type = "";
public String key;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
@JsonSubTypes({
})
@JsonIgnoreProperties(ignoreUnknown = true)
public abstract class PaginatedSearchRequest extends SearchRequest implements IUserIdentifier, IHaveCurrencyLanguage
public abstract class PaginatedSearchRequest extends SearchRequest implements IUserIdentifier
{
public String $type = "";
public Integer skip;
Expand Down
Loading