mirror of https://github.com/mono/CppSharp.git
3 changed files with 1447 additions and 0 deletions
@ -0,0 +1,772 @@
@@ -0,0 +1,772 @@
|
||||
// <auto-generated />
|
||||
//
|
||||
// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
|
||||
//
|
||||
// using QuickType;
|
||||
//
|
||||
// var cppSharpAstJava = CppSharpAstJava.FromJson(jsonString);
|
||||
|
||||
using Newtonsoft.Json.Linq; |
||||
|
||||
namespace JavaParser.AST |
||||
{ |
||||
using System; |
||||
using System.Collections.Generic; |
||||
|
||||
using System.Globalization; |
||||
using Newtonsoft.Json; |
||||
using Newtonsoft.Json.Converters; |
||||
|
||||
#region Base
|
||||
|
||||
public partial class Range |
||||
{ |
||||
[JsonProperty("beginLine")] |
||||
public long BeginLine { get; set; } |
||||
|
||||
[JsonProperty("beginColumn")] |
||||
public long BeginColumn { get; set; } |
||||
|
||||
[JsonProperty("endLine")] |
||||
public long EndLine { get; set; } |
||||
|
||||
[JsonProperty("endColumn")] |
||||
public long EndColumn { get; set; } |
||||
} |
||||
|
||||
public partial class TokenRange |
||||
{ |
||||
[JsonProperty("beginToken")] |
||||
public Token BeginToken { get; set; } |
||||
|
||||
[JsonProperty("endToken")] |
||||
public Token EndToken { get; set; } |
||||
} |
||||
|
||||
public partial class Token |
||||
{ |
||||
[JsonProperty("kind")] |
||||
public long Kind { get; set; } |
||||
|
||||
[JsonProperty("text")] |
||||
public string Text { get; set; } |
||||
} |
||||
|
||||
#endregion
|
||||
|
||||
#region Nodes
|
||||
|
||||
public partial class Node |
||||
{ |
||||
[JsonProperty("!")] |
||||
public string Kind { get; set; } |
||||
|
||||
[JsonProperty("range")] |
||||
public Range Range { get; set; } |
||||
|
||||
[JsonProperty("tokenRange")] |
||||
public TokenRange TokenRange { get; set; } |
||||
|
||||
[JsonProperty("comment")] |
||||
public Comment Comment { get; set; } |
||||
} |
||||
|
||||
public partial class ArrayCreationLevel : Node |
||||
{ |
||||
[JsonProperty("dimension")] |
||||
public Expression Dimension { get; set; } |
||||
|
||||
[JsonProperty("annotations")] |
||||
public AnnotationExpr[] Annotations { get; set; } |
||||
} |
||||
|
||||
public partial class CompilationUnit : Node |
||||
{ |
||||
public string FileName { get; set; } |
||||
|
||||
[JsonProperty("imports")] |
||||
public ImportDeclaration[] Imports { get; set; } |
||||
|
||||
[JsonProperty("packageDeclaration")] |
||||
public PackageDeclaration PackageDeclaration { get; set; } |
||||
|
||||
[JsonProperty("types")] |
||||
public TypeDeclaration[] Types { get; set; } |
||||
} |
||||
|
||||
public partial class ImportDeclaration : Node |
||||
{ |
||||
[JsonProperty("name")] |
||||
public Name Name; |
||||
|
||||
[JsonProperty("isStatic")] |
||||
public bool IsStatic; |
||||
|
||||
[JsonProperty("isAsterisk")] |
||||
public bool IsAsterisk; |
||||
} |
||||
|
||||
public partial class PackageDeclaration : Node |
||||
{ |
||||
[JsonProperty("annotations")] |
||||
public AnnotationExpr[] Annotations { get; set; } |
||||
|
||||
[JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)] |
||||
public Name Name { get; set; } |
||||
} |
||||
|
||||
public partial class Modifier : Node |
||||
{ |
||||
[JsonProperty("keyword")] |
||||
public string Keyword; |
||||
} |
||||
|
||||
#endregion
|
||||
|
||||
#region Body
|
||||
|
||||
public partial class BodyDeclaration : Node |
||||
{ |
||||
[JsonProperty("annotations")] |
||||
public AnnotationExpr[] Annotations { get; set; } |
||||
} |
||||
|
||||
public partial class AnnotationDeclaration : TypeDeclaration |
||||
{ |
||||
|
||||
} |
||||
|
||||
public partial class AnnotationMemberDeclaration : BodyDeclaration |
||||
{ |
||||
[JsonProperty("modifiers")] |
||||
public Modifier[] Modifiers; |
||||
|
||||
[JsonProperty("type")] |
||||
public Type Type; |
||||
|
||||
[JsonProperty("name")] |
||||
public SimpleName Name; |
||||
|
||||
[JsonProperty("defaultValue")] |
||||
public Expression DefaultValue; |
||||
} |
||||
|
||||
public partial class TypeDeclaration : BodyDeclaration |
||||
{ |
||||
[JsonProperty("name")] |
||||
public SimpleName Name { get; set; } |
||||
|
||||
[JsonProperty("modifiers")] |
||||
public Modifier[] Modifiers { get; set; } |
||||
|
||||
[JsonProperty("members")] |
||||
public BodyDeclaration[] Members { get; set; } |
||||
} |
||||
|
||||
public partial class ClassOrInterfaceDeclaration : TypeDeclaration |
||||
{ |
||||
[JsonProperty("isInterface")] |
||||
public bool IsInterface { get; set; } |
||||
|
||||
[JsonProperty("typeParameters")] |
||||
public TypeParameter[] TypeParameters { get; set; } |
||||
|
||||
[JsonProperty("implementedTypes")] |
||||
public ClassOrInterfaceType[] ImplementedTypes { get; set; } |
||||
|
||||
[JsonProperty("extendedTypes")] |
||||
public ClassOrInterfaceType[] ExtendedTypes { get; set; } |
||||
} |
||||
|
||||
public partial class ConstructorDeclaration : CallableDeclaration |
||||
{ |
||||
[JsonProperty("body")] |
||||
public BlockStmt Body; |
||||
} |
||||
|
||||
public partial class EnumDeclaration : TypeDeclaration |
||||
{ |
||||
[JsonProperty("entries")] |
||||
public EnumConstantDeclaration[] Entries { get; set; } |
||||
} |
||||
|
||||
public partial class EnumConstantDeclaration : BodyDeclaration |
||||
{ |
||||
[JsonProperty("name")] |
||||
public SimpleName Name { get; set; } |
||||
|
||||
[JsonProperty("arguments")] |
||||
public Expression[] Arguments { get; set; } |
||||
|
||||
[JsonProperty("classBody")] |
||||
public BodyDeclaration[] ClassBody { get; set; } |
||||
} |
||||
|
||||
public partial class FieldDeclaration : BodyDeclaration |
||||
{ |
||||
[JsonProperty("modifiers")] |
||||
public Modifier[] Modifiers; |
||||
|
||||
[JsonProperty("variables")] |
||||
public VariableDeclarator[] Variables; |
||||
} |
||||
|
||||
public partial class InitializerDeclaration : BodyDeclaration |
||||
{ |
||||
[JsonProperty("isStatic")] |
||||
public bool IsStatic; |
||||
|
||||
[JsonProperty("body")] |
||||
public BlockStmt Body; |
||||
} |
||||
|
||||
public partial class CallableDeclaration : BodyDeclaration |
||||
{ |
||||
[JsonProperty("modifiers")] |
||||
public Modifier[] Modifiers; |
||||
|
||||
[JsonProperty("typeParameters")] |
||||
public TypeParameter[] TypeParameters; |
||||
|
||||
[JsonProperty("name")] |
||||
public SimpleName Name; |
||||
|
||||
[JsonProperty("parameters")] |
||||
public Parameter[] Parameters; |
||||
|
||||
[JsonProperty("thrownExceptions")] |
||||
public ReferenceType[] ThrownExceptions; |
||||
|
||||
//public ReceiverParameter receiverParameter;
|
||||
} |
||||
|
||||
public partial class MethodDeclaration : CallableDeclaration |
||||
{ |
||||
[JsonProperty("type")] |
||||
public Type Type; |
||||
|
||||
[JsonProperty("body")] |
||||
public BlockStmt Body; |
||||
} |
||||
|
||||
public partial class Parameter : Node |
||||
{ |
||||
[JsonProperty("type")] |
||||
public Type Type; |
||||
|
||||
[JsonProperty("isVarArgs")] |
||||
public bool IsVarArgs; |
||||
|
||||
[JsonProperty("varArgsAnnotations")] |
||||
public AnnotationExpr[] VarArgsAnnotations; |
||||
|
||||
[JsonProperty("modifiers")] |
||||
public Modifier[] Modifiers; |
||||
|
||||
[JsonProperty("annotations")] |
||||
public AnnotationExpr[] Annotations; |
||||
|
||||
[JsonProperty("name")] |
||||
public SimpleName Name; |
||||
} |
||||
|
||||
public partial class VariableDeclarator : Node |
||||
{ |
||||
[JsonProperty("name")] |
||||
public SimpleName Name; |
||||
|
||||
[JsonProperty("initializer")] |
||||
public Expression Initializer; |
||||
|
||||
[JsonProperty("type")] |
||||
public Type Type; |
||||
} |
||||
|
||||
#endregion
|
||||
|
||||
#region Comments
|
||||
|
||||
public partial class BlockComment : Comment |
||||
{ |
||||
} |
||||
|
||||
public partial class Comment : Node |
||||
{ |
||||
[JsonProperty("content")] |
||||
public string Content { get; set; } |
||||
} |
||||
|
||||
public partial class JavadocComment : Comment |
||||
{ |
||||
} |
||||
|
||||
public partial class LineComment : Comment |
||||
{ |
||||
} |
||||
|
||||
#endregion
|
||||
|
||||
#region Types
|
||||
|
||||
public partial class Type |
||||
{ |
||||
[JsonProperty("annotations")] |
||||
public AnnotationExpr[] Annotations { get; set; } |
||||
} |
||||
|
||||
public partial class ArrayType : ReferenceType |
||||
{ |
||||
[JsonProperty("componentType")] |
||||
public Type ComponentType { get; set; } |
||||
} |
||||
|
||||
public partial class ClassOrInterfaceType : ReferenceType |
||||
{ |
||||
[JsonProperty("name")] |
||||
public SimpleName Name { get; set; } |
||||
|
||||
[JsonProperty("typeArguments")] |
||||
public Type[] TypeArguments { get; set; } |
||||
} |
||||
|
||||
public partial class PrimitiveType : Type |
||||
{ |
||||
[JsonProperty("type")] |
||||
public string Type { get; set; } |
||||
} |
||||
|
||||
public partial class ReferenceType : Type |
||||
{ |
||||
|
||||
} |
||||
|
||||
public partial class TypeParameter : ReferenceType |
||||
{ |
||||
[JsonProperty("name")] |
||||
public SimpleName Name { get; set; } |
||||
|
||||
[JsonProperty("typeBound")] |
||||
public ClassOrInterfaceType[] TypeBound { get; set; } |
||||
} |
||||
|
||||
public partial class UnknownType : Type |
||||
{ |
||||
|
||||
} |
||||
|
||||
public partial class VoidType : Type |
||||
{ |
||||
|
||||
} |
||||
|
||||
public partial class WildcardType : Type |
||||
{ |
||||
[JsonProperty("extendedType")] |
||||
public ReferenceType ExtendedType; |
||||
|
||||
[JsonProperty("superType")] |
||||
public ReferenceType SuperType; |
||||
} |
||||
|
||||
#endregion
|
||||
|
||||
#region Expressions
|
||||
|
||||
public partial class Expression : Node |
||||
{ |
||||
|
||||
} |
||||
|
||||
public partial class AnnotationExpr : Expression |
||||
{ |
||||
[JsonProperty("name")] |
||||
public Name Name; |
||||
} |
||||
|
||||
public partial class ArrayAccessExpr : Expression |
||||
{ |
||||
[JsonProperty("name")] |
||||
public Expression Name; |
||||
|
||||
[JsonProperty("index")] |
||||
public Expression Index; |
||||
} |
||||
|
||||
|
||||
public partial class ArrayCreationExpr : Expression |
||||
{ |
||||
[JsonProperty("levels")] |
||||
public ArrayCreationLevel[] Levels; |
||||
|
||||
[JsonProperty("elementType")] |
||||
public Type ElementType; |
||||
|
||||
[JsonProperty("initializer")] |
||||
public ArrayInitializerExpr Initializer; |
||||
} |
||||
|
||||
public partial class ArrayInitializerExpr : Expression |
||||
{ |
||||
[JsonProperty("values")] |
||||
public Expression[] Values; |
||||
} |
||||
|
||||
public partial class BinaryExpr : Expression |
||||
{ |
||||
} |
||||
|
||||
public partial class ClassExpr : Expression |
||||
{ |
||||
[JsonProperty("type")] |
||||
public Type Type; |
||||
} |
||||
|
||||
public partial class DoubleLiteralExpr : LiteralStringValueExpr |
||||
{ |
||||
} |
||||
|
||||
public partial class FieldAccessExpr : Expression |
||||
{ |
||||
[JsonProperty("scope")] |
||||
public Expression Scope; |
||||
|
||||
[JsonProperty("typeArguments")] |
||||
public Type[] TypeArguments; |
||||
|
||||
[JsonProperty("name")] |
||||
public SimpleName Name; |
||||
} |
||||
|
||||
public partial class IntegerLiteralExpr : LiteralStringValueExpr |
||||
{ |
||||
} |
||||
|
||||
public partial class LambdaExpr : Expression |
||||
{ |
||||
[JsonProperty("parameters")] |
||||
public Parameter[] Parameters; |
||||
|
||||
[JsonProperty("isEnclosingParameters")] |
||||
public bool IsEnclosingParameters; |
||||
|
||||
[JsonProperty("body")] |
||||
public Statement Body; |
||||
} |
||||
|
||||
public partial class LiteralExpr : Expression |
||||
{ |
||||
} |
||||
|
||||
public partial class LiteralStringValueExpr : LiteralExpr |
||||
{ |
||||
[JsonProperty("value")] |
||||
public string Value; |
||||
} |
||||
|
||||
public partial class MarkerAnnotationExpr : AnnotationExpr |
||||
{ |
||||
|
||||
} |
||||
|
||||
public partial class MemberValuePair : Node |
||||
{ |
||||
[JsonProperty("name")] |
||||
public SimpleName Name; |
||||
|
||||
[JsonProperty("value")] |
||||
public Expression Value; |
||||
} |
||||
|
||||
public partial class MethodCallExpr : Expression |
||||
{ |
||||
[JsonProperty("scope")] |
||||
public Expression Scope; |
||||
|
||||
[JsonProperty("typeArguments")] |
||||
public Type[] TypeArguments; |
||||
|
||||
[JsonProperty("name")] |
||||
public SimpleName Name; |
||||
|
||||
[JsonProperty("arguments")] |
||||
public Expression[] Arguments; |
||||
} |
||||
|
||||
public partial class NameExpr : Expression |
||||
{ |
||||
[JsonProperty("name")] |
||||
public SimpleName Name; |
||||
} |
||||
|
||||
public partial class NormalAnnotationExpr : AnnotationExpr |
||||
{ |
||||
[JsonProperty("pairs")] |
||||
public MemberValuePair[] Pairs; |
||||
} |
||||
|
||||
public partial class NullLiteralExpr : LiteralExpr |
||||
{ |
||||
} |
||||
|
||||
public partial class ObjectCreationExpr : Expression |
||||
{ |
||||
[JsonProperty("scope")] |
||||
public Expression Scope; |
||||
|
||||
[JsonProperty("type")] |
||||
public ClassOrInterfaceType Type; |
||||
|
||||
[JsonProperty("typeArguments")] |
||||
public Type[] TypeArguments; |
||||
|
||||
[JsonProperty("arguments")] |
||||
public Expression[] Arguments; |
||||
|
||||
[JsonProperty("anonymousClassBody")] |
||||
public BodyDeclaration[] AnonymousClassBody; |
||||
} |
||||
|
||||
public partial class StringLiteralExpr : LiteralStringValueExpr |
||||
{ |
||||
} |
||||
|
||||
public partial class SimpleName : Node |
||||
{ |
||||
[JsonProperty("identifier")] |
||||
public string Identifier { get; set; } |
||||
} |
||||
|
||||
public partial class SingleMemberAnnotationExpr : AnnotationExpr |
||||
{ |
||||
[JsonProperty("memberValue")] |
||||
public Expression MemberValue; |
||||
} |
||||
|
||||
public partial class UnaryExpr : Expression |
||||
{ |
||||
} |
||||
|
||||
public partial class Name : Node |
||||
{ |
||||
[JsonProperty("identifier")] |
||||
public string Identifier { get; set; } |
||||
|
||||
[JsonProperty("qualifier")] |
||||
public Name Qualifier; |
||||
} |
||||
|
||||
#endregion
|
||||
|
||||
#region Statements
|
||||
|
||||
public class Statement |
||||
{ |
||||
|
||||
} |
||||
|
||||
public class BlockStmt : Statement |
||||
{ |
||||
[JsonProperty("statements")] |
||||
public Statement[] Statements; |
||||
} |
||||
|
||||
#endregion
|
||||
|
||||
public partial class CompilationUnit |
||||
{ |
||||
public static CompilationUnit FromJson(string json) => |
||||
JsonConvert.DeserializeObject<CompilationUnit>(json, Converter.Settings); |
||||
} |
||||
|
||||
public static class Serialize |
||||
{ |
||||
public static string ToJson(this CompilationUnit self) => |
||||
JsonConvert.SerializeObject(self, Converter.Settings); |
||||
} |
||||
|
||||
internal static class Converter |
||||
{ |
||||
public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings |
||||
{ |
||||
MetadataPropertyHandling = MetadataPropertyHandling.Ignore, |
||||
DateParseHandling = DateParseHandling.None, |
||||
Converters = |
||||
{ |
||||
new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }, |
||||
new NodeConverter(), |
||||
new TypeConverter() |
||||
}, |
||||
}; |
||||
} |
||||
|
||||
internal class NodeConverter : JsonCreationConverter<Node> |
||||
{ |
||||
protected override Node Create(System.Type objectType, JObject jObject) |
||||
{ |
||||
switch (jObject["!"].ToString()) |
||||
{ |
||||
case "com.github.javaparser.ast.ArrayCreationLevel": |
||||
return new ArrayCreationLevel(); |
||||
case "com.github.javaparser.ast.CompilationUnit": |
||||
return new CompilationUnit(); |
||||
case "com.github.javaparser.ast.ImportDeclaration": |
||||
return new ImportDeclaration(); |
||||
case "com.github.javaparser.ast.Modifier": |
||||
return new Modifier(); |
||||
case "com.github.javaparser.ast.PackageDeclaration": |
||||
return new PackageDeclaration(); |
||||
|
||||
case "com.github.javaparser.ast.body.AnnotationDeclaration": |
||||
return new AnnotationDeclaration(); |
||||
case "com.github.javaparser.ast.body.AnnotationMemberDeclaration": |
||||
return new AnnotationMemberDeclaration(); |
||||
case "com.github.javaparser.ast.body.ClassOrInterfaceDeclaration": |
||||
return new ClassOrInterfaceDeclaration(); |
||||
case "com.github.javaparser.ast.body.ConstructorDeclaration": |
||||
return new ConstructorDeclaration(); |
||||
case "com.github.javaparser.ast.body.FieldDeclaration": |
||||
return new FieldDeclaration(); |
||||
case "com.github.javaparser.ast.body.InitializerDeclaration": |
||||
return new InitializerDeclaration(); |
||||
case "com.github.javaparser.ast.body.EnumConstantDeclaration": |
||||
return new EnumConstantDeclaration(); |
||||
case "com.github.javaparser.ast.body.EnumDeclaration": |
||||
return new EnumDeclaration(); |
||||
case "com.github.javaparser.ast.body.MethodDeclaration": |
||||
return new MethodDeclaration(); |
||||
case "com.github.javaparser.ast.body.Parameter": |
||||
return new Parameter(); |
||||
case "com.github.javaparser.ast.body.VariableDeclarator": |
||||
return new VariableDeclarator(); |
||||
|
||||
case "com.github.javaparser.ast.comments.BlockComment": |
||||
return new BlockComment(); |
||||
case "com.github.javaparser.ast.comments.Comment": |
||||
return new Comment(); |
||||
case "com.github.javaparser.ast.comments.JavadocComment": |
||||
return new JavadocComment(); |
||||
case "com.github.javaparser.ast.comments.LineComment": |
||||
return new LineComment(); |
||||
|
||||
case "com.github.javaparser.ast.expr.AnnotationExpr": |
||||
return new AnnotationExpr(); |
||||
case "com.github.javaparser.ast.expr.ArrayAccessExpr": |
||||
return new ArrayAccessExpr(); |
||||
case "com.github.javaparser.ast.expr.ArrayCreationExpr": |
||||
return new ArrayCreationExpr(); |
||||
case "com.github.javaparser.ast.expr.ArrayInitializerExpr": |
||||
return new ArrayInitializerExpr(); |
||||
case "com.github.javaparser.ast.expr.BinaryExpr": |
||||
return new BinaryExpr(); |
||||
case "com.github.javaparser.ast.expr.ClassExpr": |
||||
return new ClassExpr(); |
||||
case "com.github.javaparser.ast.expr.DoubleLiteralExpr": |
||||
return new DoubleLiteralExpr(); |
||||
case "com.github.javaparser.ast.expr.FieldAccessExpr": |
||||
return new FieldAccessExpr(); |
||||
case "com.github.javaparser.ast.expr.IntegerLiteralExpr": |
||||
return new IntegerLiteralExpr(); |
||||
case "com.github.javaparser.ast.expr.LambdaExpr": |
||||
return new LambdaExpr(); |
||||
case "com.github.javaparser.ast.expr.LiteralExpr": |
||||
return new LiteralExpr(); |
||||
case "com.github.javaparser.ast.expr.LiteralStringValueExpr": |
||||
return new LiteralStringValueExpr(); |
||||
case "com.github.javaparser.ast.expr.MarkerAnnotationExpr": |
||||
return new MarkerAnnotationExpr(); |
||||
case "com.github.javaparser.ast.expr.MemberValuePair": |
||||
return new MemberValuePair(); |
||||
case "com.github.javaparser.ast.expr.MethodCallExpr": |
||||
return new MethodCallExpr(); |
||||
case "com.github.javaparser.ast.expr.NameExpr": |
||||
return new NameExpr(); |
||||
case "com.github.javaparser.ast.expr.NormalAnnotationExpr": |
||||
return new NormalAnnotationExpr(); |
||||
case "com.github.javaparser.ast.expr.NullLiteralExpr": |
||||
return new NullLiteralExpr(); |
||||
case "com.github.javaparser.ast.expr.Name": |
||||
return new Name(); |
||||
case "com.github.javaparser.ast.expr.ObjectCreationExpr": |
||||
return new ObjectCreationExpr(); |
||||
case "com.github.javaparser.ast.expr.SimpleName": |
||||
return new SimpleName(); |
||||
case "com.github.javaparser.ast.expr.SingleMemberAnnotationExpr": |
||||
return new SingleMemberAnnotationExpr(); |
||||
case "com.github.javaparser.ast.expr.StringLiteralExpr": |
||||
return new StringLiteralExpr(); |
||||
case "com.github.javaparser.ast.expr.UnaryExpr": |
||||
return new UnaryExpr(); |
||||
default: |
||||
throw new NotImplementedException($"Missing handler for: {jObject["!"]}"); |
||||
} |
||||
} |
||||
} |
||||
|
||||
internal class TypeConverter : JsonCreationConverter<Type> |
||||
{ |
||||
protected override Type Create(System.Type objectType, JObject jObject) |
||||
{ |
||||
switch (jObject["!"].ToString()) |
||||
{ |
||||
case "com.github.javaparser.ast.type.ArrayType": |
||||
return new ArrayType(); |
||||
case "com.github.javaparser.ast.type.ClassOrInterfaceType": |
||||
return new ClassOrInterfaceType(); |
||||
case "com.github.javaparser.ast.type.PrimitiveType": |
||||
return new PrimitiveType(); |
||||
case "com.github.javaparser.ast.type.TypeParameter": |
||||
return new TypeParameter(); |
||||
case "com.github.javaparser.ast.type.UnknownType": |
||||
return new UnknownType(); |
||||
case "com.github.javaparser.ast.type.VoidType": |
||||
return new VoidType(); |
||||
case "com.github.javaparser.ast.type.WildcardType": |
||||
return new WildcardType(); |
||||
default: |
||||
throw new NotImplementedException($"Missing handler for: {jObject["!"]}"); |
||||
} |
||||
} |
||||
} |
||||
|
||||
internal abstract class JsonCreationConverter<T> : JsonConverter |
||||
{ |
||||
/// <summary>
|
||||
/// Create an instance of objectType, based properties in the JSON object
|
||||
/// </summary>
|
||||
/// <param name="objectType">type of object expected</param>
|
||||
/// <param name="jObject">
|
||||
/// contents of JSON object that will be deserialized
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
protected abstract T Create(System.Type objectType, JObject jObject); |
||||
|
||||
public override bool CanConvert(System.Type objectType) |
||||
{ |
||||
return typeof(T).IsAssignableFrom(objectType); |
||||
} |
||||
|
||||
public override bool CanWrite => false; |
||||
|
||||
public override object ReadJson(JsonReader reader, |
||||
System.Type objectType, |
||||
object existingValue, |
||||
JsonSerializer serializer) |
||||
{ |
||||
// Load JObject from stream
|
||||
JObject jObject = JObject.Load(reader); |
||||
|
||||
// Create target object based on JObject
|
||||
T target = Create(objectType, jObject); |
||||
|
||||
// Populate the object properties
|
||||
serializer.Populate(jObject.CreateReader(), target); |
||||
|
||||
return target; |
||||
} |
||||
|
||||
public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer) |
||||
{ |
||||
throw new NotImplementedException(); |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
||||
<PropertyGroup> |
||||
<OutputType>Exe</OutputType> |
||||
<TargetFramework>netcoreapp3.1</TargetFramework> |
||||
</PropertyGroup> |
||||
|
||||
<ItemGroup> |
||||
<Reference Include="IKVM.OpenJDK.Core, Version=8.5.0.3, Culture=neutral, PublicKeyToken=null"> |
||||
<HintPath>..\..\..\deps\ikvm\bin\Debug\netcoreapp3.1\IKVM.OpenJDK.Core.dll</HintPath> |
||||
</Reference> |
||||
<Reference Include="IKVM.Runtime, Version=8.5.0.3, Culture=neutral, PublicKeyToken=null"> |
||||
<HintPath>..\..\..\deps\ikvm\bin\Debug\netcoreapp3.1\IKVM.Runtime.dll</HintPath> |
||||
</Reference> |
||||
</ItemGroup> |
||||
|
||||
<ItemGroup> |
||||
<ProjectReference Include="..\..\..\src\AST\CppSharp.AST.csproj" /> |
||||
<ProjectReference Include="..\..\..\src\Generator\CppSharp.Generator.csproj" /> |
||||
</ItemGroup> |
||||
|
||||
<ItemGroup> |
||||
<PackageReference Include="Newtonsoft.Json" PrivateAssets="All" /> |
||||
</ItemGroup> |
||||
</Project> |
@ -0,0 +1,650 @@
@@ -0,0 +1,650 @@
|
||||
using System; |
||||
using System.Collections.Generic; |
||||
using System.IO; |
||||
using System.Linq; |
||||
using System.Threading.Tasks; |
||||
using CppSharp; |
||||
using CppSharp.AST; |
||||
using CppSharp.Generators; |
||||
using CppSharp.Parser; |
||||
using IKVM.Internal; |
||||
using ArrayType = CppSharp.AST.ArrayType; |
||||
using Parameter = CppSharp.AST.Parameter; |
||||
using PrimitiveType = CppSharp.AST.PrimitiveType; |
||||
using Type = CppSharp.AST.Type; |
||||
|
||||
namespace JavaParser.AST |
||||
{ |
||||
public class Options : DriverOptions |
||||
{ |
||||
/// <summary>
|
||||
/// The name of the library to be bound.
|
||||
/// </summary>
|
||||
public Module Module; |
||||
} |
||||
|
||||
public class JavaJarASTGenerator |
||||
{ |
||||
public static Dictionary<TranslationUnit, ClassFile> JavaClassFiles |
||||
= new Dictionary<TranslationUnit, ClassFile>(); |
||||
|
||||
ASTContext ASTContext { get; set; } |
||||
Options Options { get; set; } |
||||
|
||||
public JavaJarASTGenerator(ASTContext context, Options options) |
||||
{ |
||||
ASTContext = context; |
||||
Options = options; |
||||
} |
||||
|
||||
public TranslationUnit VisitClassFile(ClassFile classFile) |
||||
{ |
||||
var unit = GetTranslationUnit(classFile); |
||||
|
||||
var components = classFile.Name.Split(".").ToArray(); |
||||
var namespaces = components.SkipLast(1).ToArray(); |
||||
|
||||
Namespace currentNamespace = unit; |
||||
bool flattenNamespaces = true; |
||||
if (!flattenNamespaces) |
||||
{ |
||||
foreach (var @namespace in namespaces) |
||||
currentNamespace = currentNamespace.FindCreateNamespace(@namespace); |
||||
} |
||||
|
||||
DeclarationContext decl = classFile.IsEnum ? (DeclarationContext)VisitEnum(classFile) : |
||||
(DeclarationContext)VisitClass(classFile); |
||||
|
||||
decl.Namespace = currentNamespace; |
||||
currentNamespace.Declarations.Add(decl); |
||||
|
||||
return unit; |
||||
} |
||||
|
||||
public Enumeration VisitEnum(ClassFile classFile) |
||||
{ |
||||
var components = classFile.Name.Split(".").ToArray(); |
||||
|
||||
var @class = new Enumeration |
||||
{ |
||||
Name = components.Last(), |
||||
}; |
||||
|
||||
return @class; |
||||
} |
||||
|
||||
public static AccessSpecifier ConvertMethodAccess(ClassFile.Method method) |
||||
{ |
||||
if (method.IsInternal) |
||||
return AccessSpecifier.Internal; |
||||
if (method.IsPrivate) |
||||
return AccessSpecifier.Private; |
||||
if (method.IsProtected) |
||||
return AccessSpecifier.Protected; |
||||
if (method.IsPublic) |
||||
return AccessSpecifier.Public; |
||||
|
||||
return AccessSpecifier.Public; |
||||
} |
||||
|
||||
public Class VisitClass(ClassFile classFile) |
||||
{ |
||||
var components = classFile.Name.Split(".").ToArray(); |
||||
|
||||
var @class = new Class |
||||
{ |
||||
Name = components.Last(), |
||||
Type = classFile.IsInterface ? ClassType.Interface : ClassType.RefType |
||||
}; |
||||
|
||||
foreach (var javaMethod in classFile.Methods) |
||||
{ |
||||
var method = new Method |
||||
{ |
||||
Name = javaMethod.Name, |
||||
Access = ConvertMethodAccess(javaMethod) |
||||
}; |
||||
|
||||
var (retType, paramTypes) = GetTypeFromMethodSig(javaMethod.Signature); |
||||
|
||||
method.ReturnType = new QualifiedType(retType); |
||||
|
||||
var paramIndex = 0; |
||||
foreach (var paramType in paramTypes) |
||||
{ |
||||
var param = new CppSharp.AST.Parameter |
||||
{ |
||||
Namespace = method, |
||||
QualifiedType = new QualifiedType(paramType) |
||||
}; |
||||
|
||||
if (javaMethod.MethodParameters != null) |
||||
if (paramIndex < javaMethod.MethodParameters.Length) |
||||
param.Name = javaMethod.MethodParameters[paramIndex].name; |
||||
|
||||
method.Parameters.Add(param); |
||||
paramIndex++; |
||||
} |
||||
|
||||
@class.Methods.Add(method); |
||||
} |
||||
|
||||
return @class; |
||||
} |
||||
|
||||
public static CppSharp.AST.PrimitiveType GetPrimitiveTypeFromJavaSig(char sig) |
||||
{ |
||||
switch (sig) |
||||
{ |
||||
case 'B': |
||||
return CppSharp.AST.PrimitiveType.Char; |
||||
case 'C': |
||||
return CppSharp.AST.PrimitiveType.WideChar; |
||||
case 'D': |
||||
return CppSharp.AST.PrimitiveType.Double; |
||||
case 'F': |
||||
return CppSharp.AST.PrimitiveType.Float; |
||||
case 'I': |
||||
return CppSharp.AST.PrimitiveType.Int; |
||||
case 'J': |
||||
return CppSharp.AST.PrimitiveType.Long; |
||||
case 'S': |
||||
return CppSharp.AST.PrimitiveType.Short; |
||||
case 'Z': |
||||
return CppSharp.AST.PrimitiveType.Bool; |
||||
case 'V': |
||||
return CppSharp.AST.PrimitiveType.Void; |
||||
default: |
||||
throw new NotImplementedException(); |
||||
} |
||||
} |
||||
|
||||
public static (CppSharp.AST.Type, List<CppSharp.AST.Type>) GetTypeFromMethodSig(string sig) |
||||
{ |
||||
var types = new List<CppSharp.AST.Type>(); |
||||
|
||||
int i = 1; |
||||
while(sig[i] != ')') |
||||
types.Add(GetTypeFromSig(sig, ref i)); |
||||
i++; |
||||
|
||||
var retType = GetTypeFromSig(sig, ref i); |
||||
|
||||
return (retType, types); |
||||
} |
||||
|
||||
public static CppSharp.AST.TagType GetTagTypeFromSig(string sig, ref int index) |
||||
{ |
||||
int pos = index; |
||||
index = sig.IndexOf(';', index) + 1; |
||||
var className = sig.Substring(pos, index - pos - 1); |
||||
var @class = new TagType(); |
||||
return @class; |
||||
} |
||||
|
||||
public static CppSharp.AST.Type GetTypeFromSig(string sig, ref int index) |
||||
{ |
||||
var @char = sig[index++]; |
||||
switch(@char) |
||||
{ |
||||
case 'B': |
||||
case 'C': |
||||
case 'D': |
||||
case 'F': |
||||
case 'I': |
||||
case 'J': |
||||
case 'S': |
||||
case 'Z': |
||||
case 'V': |
||||
return new BuiltinType(GetPrimitiveTypeFromJavaSig(@char)); |
||||
case 'L': |
||||
{ |
||||
int pos = index; |
||||
index = sig.IndexOf(';', index) + 1; |
||||
var className = sig.Substring(pos, index - pos - 1); |
||||
var @class = new TagType(); |
||||
return @class; |
||||
} |
||||
case '[': |
||||
{ |
||||
var rootArrayType = new CppSharp.AST.ArrayType |
||||
{ |
||||
SizeType = CppSharp.AST.ArrayType.ArraySize.Variable |
||||
}; |
||||
var arrayType = rootArrayType; |
||||
|
||||
while(sig[index] == '[') |
||||
{ |
||||
index++; |
||||
var newArrayType = new CppSharp.AST.ArrayType |
||||
{ |
||||
SizeType = CppSharp.AST.ArrayType.ArraySize.Variable |
||||
}; |
||||
arrayType.QualifiedType = new QualifiedType(newArrayType); |
||||
arrayType = newArrayType; |
||||
} |
||||
|
||||
var innerType = GetTypeFromSig(sig, ref index); |
||||
arrayType.QualifiedType = new QualifiedType(innerType); |
||||
|
||||
return rootArrayType; |
||||
} |
||||
default: |
||||
throw new InvalidOperationException(sig.Substring(index)); |
||||
} |
||||
} |
||||
|
||||
TranslationUnit GetTranslationUnit(ClassFile classFile) |
||||
{ |
||||
var unitName = Options.Module.LibraryName ?? Path.GetFileName (classFile.Name); |
||||
|
||||
var unit = ASTContext.TranslationUnits.Find(m => m.FileName.Equals(unitName)); |
||||
if (unit != null) |
||||
return unit; |
||||
|
||||
unit = ASTContext.FindOrCreateTranslationUnit(unitName); |
||||
unit.FilePath = unitName; |
||||
|
||||
JavaClassFiles[unit] = classFile; |
||||
|
||||
return unit; |
||||
} |
||||
} |
||||
|
||||
public class JavaJsonASTGenerator |
||||
{ |
||||
ASTContext ASTContext { get; set; } |
||||
Options Options { get; set; } |
||||
|
||||
public JavaJsonASTGenerator(ASTContext context, Options options) |
||||
{ |
||||
ASTContext = context; |
||||
Options = options; |
||||
} |
||||
|
||||
public TranslationUnit CurrentUnit; |
||||
|
||||
public void VisitCompilationUnits(List<CompilationUnit> compilationUnits) |
||||
{ |
||||
foreach (var unit in compilationUnits) |
||||
{ |
||||
CurrentUnit = GetTranslationUnit(unit); |
||||
CurrentUnit.Module = Options.Module; |
||||
|
||||
foreach (var type in unit.Types) |
||||
{ |
||||
var decl = VisitTypeDeclaration(type); |
||||
if (decl == null) |
||||
continue; |
||||
|
||||
decl.Namespace = CurrentUnit; |
||||
if (CurrentUnit.Declarations.All(d => d.Name != decl.Name)) |
||||
CurrentUnit.Declarations.Add(decl); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public TranslationUnit GetTranslationUnit(CompilationUnit compilationUnit) |
||||
{ |
||||
var unitName = Options.Module.LibraryName ?? Path.GetFileName (compilationUnit.FileName); |
||||
|
||||
var unit = ASTContext.TranslationUnits.Find(m => m.FileName.Equals(unitName)); |
||||
if (unit != null) |
||||
return unit; |
||||
|
||||
unit = ASTContext.FindOrCreateTranslationUnit(unitName); |
||||
unit.FilePath = unitName; |
||||
|
||||
return unit; |
||||
} |
||||
|
||||
public Declaration VisitTypeDeclaration(TypeDeclaration type) |
||||
{ |
||||
switch (type) |
||||
{ |
||||
case AnnotationDeclaration annotationDeclaration: |
||||
return null; |
||||
case ClassOrInterfaceDeclaration classOrInterfaceDeclaration: |
||||
return VisitClassOrInterfaceDeclaration(classOrInterfaceDeclaration); |
||||
case EnumDeclaration enumDeclaration: |
||||
return VisitEnumDeclaration(enumDeclaration); |
||||
default: |
||||
throw new NotImplementedException(); |
||||
} |
||||
} |
||||
|
||||
public Declaration VisitEnumDeclaration(EnumDeclaration enumDeclaration) |
||||
{ |
||||
var @class = HandleTypeDeclaration(enumDeclaration); |
||||
if (!@class.IsIncomplete) |
||||
return @class; |
||||
|
||||
foreach (var entry in enumDeclaration.Entries) |
||||
{ |
||||
|
||||
} |
||||
|
||||
@class.IsIncomplete = false; |
||||
|
||||
return @class; |
||||
} |
||||
|
||||
public Class VisitClassOrInterfaceDeclaration(ClassOrInterfaceDeclaration classOrInterfaceDeclaration) |
||||
{ |
||||
var @class = HandleTypeDeclaration(classOrInterfaceDeclaration); |
||||
if (!@class.IsIncomplete) |
||||
return @class; |
||||
|
||||
@class.Type = classOrInterfaceDeclaration.IsInterface ? ClassType.Interface : ClassType.RefType; |
||||
@class.IsIncomplete = false; |
||||
|
||||
if (classOrInterfaceDeclaration.TypeParameters.Length > 0) |
||||
{ |
||||
@class.IsDependent = true; |
||||
|
||||
foreach (var typeParam in classOrInterfaceDeclaration.TypeParameters) |
||||
{ |
||||
var templateParam = new TypeTemplateParameter { Name = typeParam.Name.Identifier }; |
||||
if (typeParam.TypeBound.Length > 0) |
||||
templateParam.Constraint = ConvertType(typeParam.TypeBound.First()).ToString(); |
||||
|
||||
@class.TemplateParameters.Add(templateParam); |
||||
} |
||||
} |
||||
|
||||
foreach (var extendedType in classOrInterfaceDeclaration.ExtendedTypes) |
||||
{ |
||||
var extendedClassType = ConvertType(extendedType); |
||||
@class.Bases.Add(new BaseClassSpecifier |
||||
{ |
||||
Access = AccessSpecifier.Public, |
||||
IsVirtual = false, |
||||
Type = extendedClassType |
||||
}); |
||||
} |
||||
/* |
||||
foreach (var implementedType in classOrInterfaceDeclaration.ImplementedTypes) |
||||
{ |
||||
var implementedClassType = ConvertType(implementedType); |
||||
@class.Bases.Add(new BaseClassSpecifier |
||||
{ |
||||
Access = AccessSpecifier.Public, |
||||
IsVirtual = false, |
||||
Type = implementedClassType |
||||
}); |
||||
} |
||||
*/ |
||||
return @class; |
||||
} |
||||
|
||||
public Class HandleTypeDeclaration(TypeDeclaration typeDeclaration) |
||||
{ |
||||
var @class = ASTContext.FindClass(typeDeclaration.Name.Identifier).FirstOrDefault(); |
||||
if (@class == null) |
||||
{ |
||||
@class = new Class {Name = typeDeclaration.Name.Identifier, IsIncomplete = true}; |
||||
CurrentUnit.Declarations.Add(@class); |
||||
} |
||||
|
||||
if (!@class.IsIncomplete) |
||||
return @class; |
||||
|
||||
foreach (var member in typeDeclaration.Members) |
||||
{ |
||||
var decl = VisitBodyDeclaration(member); |
||||
if (decl == null) |
||||
continue; |
||||
|
||||
decl.Namespace = @class; |
||||
|
||||
switch (decl) |
||||
{ |
||||
case Method method: |
||||
@class.Methods.Add(method); |
||||
break; |
||||
case Field field: |
||||
@class.Fields.Add(field); |
||||
break; |
||||
default: |
||||
@class.Declarations.Add(decl); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
return @class; |
||||
} |
||||
|
||||
public Declaration VisitBodyDeclaration(BodyDeclaration body) |
||||
{ |
||||
switch (body) |
||||
{ |
||||
case ClassOrInterfaceDeclaration classOrInterfaceDeclaration: |
||||
return VisitClassOrInterfaceDeclaration(classOrInterfaceDeclaration); |
||||
case ConstructorDeclaration constructorDeclaration: |
||||
return VisitCallableDeclaration(constructorDeclaration); |
||||
case EnumDeclaration enumDeclaration: |
||||
return VisitEnumDeclaration(enumDeclaration); |
||||
case InitializerDeclaration initializerDeclaration: |
||||
return VisitInitializerDeclaration(initializerDeclaration); |
||||
case FieldDeclaration fieldDeclaration: |
||||
return VisitFieldDeclaration(fieldDeclaration); |
||||
case MethodDeclaration methodDeclaration: |
||||
return VisitCallableDeclaration(methodDeclaration); |
||||
default: |
||||
throw new NotImplementedException(); |
||||
} |
||||
} |
||||
|
||||
private Declaration VisitInitializerDeclaration(InitializerDeclaration initializerDeclaration) |
||||
{ |
||||
return null; |
||||
} |
||||
|
||||
public Declaration VisitFieldDeclaration(FieldDeclaration fieldDeclaration) |
||||
{ |
||||
return null; |
||||
} |
||||
|
||||
public Method VisitCallableDeclaration(CallableDeclaration callableDeclaration) |
||||
{ |
||||
var method = new Method |
||||
{ |
||||
Name = callableDeclaration.Name.Identifier, |
||||
Access = AccessSpecifier.Internal |
||||
}; |
||||
|
||||
if (callableDeclaration is ConstructorDeclaration) |
||||
method.Kind = CXXMethodKind.Constructor; |
||||
|
||||
if (callableDeclaration.Modifiers.Length > 0) |
||||
method.Access = ConvertModifier(callableDeclaration.Modifiers); |
||||
|
||||
if (callableDeclaration is MethodDeclaration methodDecl) |
||||
method.ReturnType = new QualifiedType(ConvertType(methodDecl.Type)); |
||||
|
||||
foreach (var parameter in callableDeclaration.Parameters) |
||||
{ |
||||
var paramType = ConvertType(parameter.Type); |
||||
var param = new CppSharp.AST.Parameter |
||||
{ |
||||
Name = parameter.Name.Identifier, |
||||
Namespace = method, |
||||
QualifiedType = new QualifiedType(paramType) |
||||
}; |
||||
|
||||
method.Parameters.Add(@param); |
||||
} |
||||
|
||||
return method; |
||||
} |
||||
|
||||
public static CppSharp.AST.PrimitiveType ConvertToPrimitiveType(string type) |
||||
{ |
||||
return type switch |
||||
{ |
||||
"BOOLEAN" => CppSharp.AST.PrimitiveType.Bool, |
||||
"CHAR" => CppSharp.AST.PrimitiveType.Char, |
||||
"BYTE" => CppSharp.AST.PrimitiveType.UChar, |
||||
"SHORT" => CppSharp.AST.PrimitiveType.Short, |
||||
"INT" => CppSharp.AST.PrimitiveType.Int, |
||||
"LONG" => CppSharp.AST.PrimitiveType.Long, |
||||
"FLOAT" => CppSharp.AST.PrimitiveType.Float, |
||||
"DOUBLE" => CppSharp.AST.PrimitiveType.Double, |
||||
_ => throw new NotImplementedException() |
||||
}; |
||||
} |
||||
|
||||
public CppSharp.AST.Type ConvertType(Type type) |
||||
{ |
||||
switch (type) |
||||
{ |
||||
case ArrayType arrayType: |
||||
return new CppSharp.AST.ArrayType(new QualifiedType(ConvertType(arrayType.ComponentType))) |
||||
{ |
||||
SizeType = CppSharp.AST.ArrayType.ArraySize.Variable |
||||
}; |
||||
case PrimitiveType primitiveType: |
||||
return new BuiltinType(ConvertToPrimitiveType(primitiveType.Type)); |
||||
case ClassOrInterfaceType classOrInterfaceType: |
||||
{ |
||||
var @class = ASTContext.FindClass(classOrInterfaceType.Name.Identifier).FirstOrDefault(); |
||||
if (@class == null) |
||||
{ |
||||
@class = new Class |
||||
{ |
||||
Name = classOrInterfaceType.Name.Identifier, |
||||
Namespace = CurrentUnit, |
||||
IsIncomplete = true |
||||
}; |
||||
CurrentUnit.Declarations.Add(@class); |
||||
} |
||||
|
||||
if (classOrInterfaceType.TypeArguments == null || classOrInterfaceType.TypeArguments.Length == 0) |
||||
return new TagType(@class); |
||||
|
||||
return new TemplateSpecializationType |
||||
{ |
||||
Arguments = classOrInterfaceType.TypeArguments.Select(ConvertType).Select(t => |
||||
new TemplateArgument |
||||
{ |
||||
Kind = TemplateArgument.ArgumentKind.Type, |
||||
Type = new QualifiedType(t), |
||||
}).ToList(), |
||||
Desugared = new QualifiedType(new TagType(@class)), |
||||
Template = new ClassTemplate(@class) |
||||
}; |
||||
} |
||||
case VoidType voidType: |
||||
return new BuiltinType(CppSharp.AST.PrimitiveType.Void); |
||||
case WildcardType wildcardType: |
||||
{ |
||||
return new TemplateSpecializationType(); |
||||
} |
||||
default: |
||||
throw new NotImplementedException(); |
||||
} |
||||
} |
||||
|
||||
public static AccessSpecifier ConvertModifier(Modifier[] modifiers) |
||||
{ |
||||
foreach (var modifier in modifiers) |
||||
{ |
||||
switch (modifier.Keyword) |
||||
{ |
||||
case "PUBLIC": |
||||
return AccessSpecifier.Public; |
||||
case "PROTECTED": |
||||
return AccessSpecifier.Protected; |
||||
case "PRIVATE": |
||||
return AccessSpecifier.Private; |
||||
case "DEFAULT": |
||||
return AccessSpecifier.Internal; |
||||
} |
||||
} |
||||
|
||||
throw new NotImplementedException(); |
||||
} |
||||
} |
||||
|
||||
class Program |
||||
{ |
||||
static void Main(string[] args) |
||||
{ |
||||
var options = new Options |
||||
{ |
||||
GeneratorKind = GeneratorKind.TypeScript, |
||||
OutputDir = "ts" |
||||
}; |
||||
|
||||
var module = new Module("runelite-api"); |
||||
options.Module = module; |
||||
options.Modules.Add(module); |
||||
|
||||
var driver = new Driver(options); |
||||
driver.Setup(); |
||||
driver.SetupTypeMaps(); |
||||
|
||||
driver.Context.ASTContext = new ASTContext(); |
||||
var astContext = driver.Context.ASTContext; |
||||
|
||||
//var jarAstGenerator = new JavaJarASTGenerator(astContext, options);
|
||||
//var jarFile = "runelite-api-3.5.4.jar";
|
||||
//ReadJar(jarFile, astGenerator);
|
||||
|
||||
var compilationUnits = ReadJSON(); |
||||
var jsonAstGenerator = new JavaJsonASTGenerator(astContext, options); |
||||
jsonAstGenerator.VisitCompilationUnits(compilationUnits); |
||||
|
||||
// Sort declarations alphabetically
|
||||
var translationUnit = astContext.TranslationUnits.First(); |
||||
var decls = new List<Declaration>(translationUnit.Declarations); |
||||
decls = decls.OrderBy(d => d.Name).ToList(); |
||||
translationUnit.Declarations.Clear(); |
||||
translationUnit.Declarations.AddRange(decls); |
||||
|
||||
driver.ProcessCode(); |
||||
var outputs = driver.GenerateCode(); |
||||
driver.SaveCode(outputs); |
||||
} |
||||
|
||||
private static List<CompilationUnit> ReadJSON() |
||||
{ |
||||
var compilationUnits = new List<CompilationUnit>(); |
||||
|
||||
var jsonDir = "/home/joao/dev/rs/flower/javaparser-gradle-sample/out"; |
||||
var jsonFiles = Directory.EnumerateFiles(jsonDir, "*.json", |
||||
SearchOption.AllDirectories); |
||||
|
||||
Parallel.ForEach(jsonFiles, (file) => |
||||
{ |
||||
if (Path.GetFileNameWithoutExtension(file).StartsWith("class")) |
||||
return; |
||||
|
||||
var jsonText = File.ReadAllText(file); |
||||
var compilationUnit = CompilationUnit.FromJson(jsonText); |
||||
compilationUnit.FileName = Path.GetFileNameWithoutExtension(file); |
||||
compilationUnits.Add(compilationUnit); |
||||
}); |
||||
|
||||
return compilationUnits; |
||||
} |
||||
|
||||
private static void ReadJar(string jarFile, JavaJarASTGenerator jarAstGenerator) |
||||
{ |
||||
// TODO: Read from jar file directly.
|
||||
var classDir = @"/home/joao/dev/CppSharp/tests2/jar"; |
||||
foreach (var file in Directory.EnumerateFiles(classDir, "*.class", |
||||
SearchOption.AllDirectories)) |
||||
{ |
||||
if (Path.GetFileNameWithoutExtension(file).StartsWith("class")) |
||||
continue; |
||||
|
||||
var data = File.ReadAllBytes(file); |
||||
var parseOptions = ClassFileParseOptions.RemoveAssertions; |
||||
var classFile = new ClassFile(data, 0, data.Length, file, parseOptions, null); |
||||
|
||||
jarAstGenerator.VisitClassFile(classFile); |
||||
} |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue