Skip to content
Open
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: 13 additions & 0 deletions .idea/.idea.ServerParsing/.idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/.idea.ServerParsing/.idea/encodings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/.idea.ServerParsing/.idea/indexLayout.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/.idea.ServerParsing/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

39 changes: 39 additions & 0 deletions Parser/Dictionaries/Dictionaries.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;

namespace Parser.Dictionaries;

public class Dictionaries
{
public static Dictionary<string, SyntaxTokenList> Mods { get; } = new()
{
{"public", SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword))},
{"private", SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PrivateKeyword))},
{"protected", SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.ProtectedKeyword))},
{"private static readonly", SyntaxFactory.TokenList(
SyntaxFactory.Token(SyntaxKind.PrivateKeyword),
SyntaxFactory.Token(SyntaxKind.StaticKeyword),
SyntaxFactory.Token(SyntaxKind.ReadOnlyKeyword))},
{"public static async", SyntaxFactory.TokenList(
SyntaxFactory.Token(SyntaxKind.PublicKeyword),
SyntaxFactory.Token(SyntaxKind.StaticKeyword),
SyntaxFactory.Token(SyntaxKind.AsyncKeyword))}
};

public static Dictionary<string, TypeSyntax> Types { get; } = new()
{
{"int", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.IntKeyword))},
{"Integer", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.IntKeyword))},
{"string", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.StringKeyword))},
{"String", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.StringKeyword))},
{"char", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.CharKeyword))},
{"Character", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.CharKeyword))},
{"float", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.FloatKeyword))},
{"Float", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.FloatKeyword))},
{"boolean", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.BoolKeyword))},
{"Boolean", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.BoolKeyword))},
{"double", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.DoubleKeyword))},
{"Double", SyntaxFactory.PredefinedType(SyntaxFactory.Token(SyntaxKind.DoubleKeyword))}
};
}
143 changes: 143 additions & 0 deletions Parser/MainParser/MainParser.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Parser.Parsers;
using Parser.Parsers.MethodParsers;

namespace Parser.MainParser;

public class MainParser
{
private Dictionary<string, ClassDeclarationSyntax> _trees;

public MainParser()
{
_trees = new Dictionary<string, ClassDeclarationSyntax>();
}

public void Distribute(string dirToPath, string path)
{
foreach (var file in Directory.GetFiles(path))
{
var fileName = file.Substring(file.LastIndexOf('\\') + 1,
file.LastIndexOf('.') - file.LastIndexOf('\\') - 1);

if (fileName.Contains("Controller"))
fileName = fileName.Replace("Controller", "") + "Client";

using (var sr = new StreamReader(file, System.Text.Encoding.Default))
{
string line;
var classFlag = false;
var fieldFlag = true;
while ((line = sr.ReadLine()) != null)
{
if (line == string.Empty || line.Equals("}"))
continue;

if (line.Contains("class"))
{
var classDeclaration = ClassParser.ClassDeclaration(line);
_trees.Add(fileName, classDeclaration);
classFlag = true;
if (fileName.Contains("Client"))
{
var type = "HttpClient";
var name = "_client";
var mod = "private static readonly";
_trees[fileName] = _trees[fileName]
.AddMembers(
FieldParser.HttpClientField(type, name, mod));
}

continue;
}

if (line.Contains('('))
fieldFlag = false;

if (fieldFlag && !fileName.Contains("Client") && classFlag && line.Contains('=') | !line.Contains(')'))
{
var fieldDeclaration = FieldParser.GetField(line);
_trees[fileName] = _trees[fileName]
.AddMembers(fieldDeclaration);
continue;
}

if (classFlag && line.Contains('@') && line.Contains('"'))
{
var methodLine = sr.ReadLine();
var methodDeclaration = MethodDistributer.Distribute(methodLine, line);
_trees[fileName] = _trees[fileName]
.AddMembers(methodDeclaration);
}
}
}

if (fileName.Contains("Client"))
ParseControllers(dirToPath, fileName);
else
{
ParseDtos(dirToPath, fileName);
}
}
}

private void toFile(CompilationUnitSyntax comp, string path)
{
if (File.Exists(path))
File.Delete(path);
FileStream file = File.Create(path);
file.Close();
File.WriteAllText(path, comp.NormalizeWhitespace().ToString());
}

private void ParseControllers(string dirToPath, string fileName)
{
toFile(SyntaxFactory.CompilationUnit()
.AddUsings(
SyntaxFactory.UsingDirective(
SyntaxFactory.QualifiedName(
SyntaxFactory.QualifiedName(
SyntaxFactory.QualifiedName(
SyntaxFactory.IdentifierName("System"),
SyntaxFactory.IdentifierName("Net")),
SyntaxFactory.IdentifierName("Http")),
SyntaxFactory.IdentifierName("Json"))))
.AddUsings(
SyntaxFactory.UsingDirective(
SyntaxFactory.QualifiedName(
SyntaxFactory.QualifiedName(
SyntaxFactory.IdentifierName("System"),
SyntaxFactory.IdentifierName("Text")),
SyntaxFactory.IdentifierName("Json"))))
.AddUsings(
SyntaxFactory.UsingDirective(
SyntaxFactory.QualifiedName(
SyntaxFactory.QualifiedName(
SyntaxFactory.IdentifierName("Parser"),
SyntaxFactory.IdentifierName("ParserResults")),
SyntaxFactory.IdentifierName("Entities"))))
.AddMembers(
SyntaxFactory.NamespaceDeclaration(
SyntaxFactory.QualifiedName(
SyntaxFactory.QualifiedName(
SyntaxFactory.IdentifierName("Parser"),
SyntaxFactory.IdentifierName("ParserResults")),
SyntaxFactory.IdentifierName("ClientGens")))
.AddMembers(_trees[fileName])), Path.Combine(dirToPath, fileName + ".cs"));
}

private void ParseDtos(string dirToPath, string fileName)
{
toFile(SyntaxFactory.CompilationUnit()
.AddMembers(
SyntaxFactory.NamespaceDeclaration(
SyntaxFactory.QualifiedName(
SyntaxFactory.QualifiedName(
SyntaxFactory.IdentifierName("Parser"),
SyntaxFactory.IdentifierName("ParserResults")),
SyntaxFactory.IdentifierName("Entities")))
.AddMembers(_trees[fileName])), Path.Combine(dirToPath, fileName + ".cs"));
}
}
20 changes: 20 additions & 0 deletions Parser/Parser.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<RootNamespace>Program</RootNamespace>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.2.0-2.final" />
</ItemGroup>

<ItemGroup>
<Folder Include="ParserResults\ClientGens" />
<Folder Include="ParserResults\Entities" />
</ItemGroup>

</Project>
74 changes: 74 additions & 0 deletions Parser/ParserResults/ClientGens/CatClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
using System.Net.Http.Json;
using System.Text.Json;
using Parser.ParserResults.Entities;

namespace Parser.ParserResults.ClientGens
{
public class CatClient
{
private static readonly HttpClient _client = new HttpClient();
public static async Task<LinkedList<Cat>> getAll()
{
var jsonContent = JsonContent.Create("");
var response = await _client.GetAsync($"http://localhost:8080/getAll" + $"");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<LinkedList<Cat>>(responseContent);
}

public static async Task<Cat> createCat(string name, string date, string breed, string color)
{
var jsonContent = JsonContent.Create("");
var response = await _client.PostAsync($"http://localhost:8080/createCat" + $"?name={name}&date={date}&breed={breed}&color={color}", jsonContent);
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<Cat>(responseContent);
}

public static async Task<Cat> findByName(string name)
{
var jsonContent = JsonContent.Create("");
var response = await _client.GetAsync($"http://localhost:8080/findByName" + $"?name={name}");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<Cat>(responseContent);
}

public static async Task<LinkedList<Cat>> getFriends(Cat cat)
{
var jsonContent = JsonContent.Create(cat);
var response = await _client.GetAsync($"http://localhost:8080/getFriends" + $"");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<LinkedList<Cat>>(responseContent);
}

public static async Task<LinkedList<Cat>> findByColor(string color)
{
var jsonContent = JsonContent.Create("");
var response = await _client.GetAsync($"http://localhost:8080/findByColor" + $"?color={color}");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<LinkedList<Cat>>(responseContent);
}

public static async Task<LinkedList<Cat>> findByDate(string date)
{
var jsonContent = JsonContent.Create("");
var response = await _client.GetAsync($"http://localhost:8080/findByDate" + $"?date={date}");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<LinkedList<Cat>>(responseContent);
}

public static async Task<LinkedList<Cat>> findByBreed(string breed)
{
var jsonContent = JsonContent.Create("");
var response = await _client.GetAsync($"http://localhost:8080/findByBreed" + $"?breed={breed}");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<LinkedList<Cat>>(responseContent);
}

public static async Task<Cat> deleteCat(Cat cat)
{
var jsonContent = JsonContent.Create(cat);
var response = await _client.DeleteAsync($"http://localhost:8080/deleteCat" + $"");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<Cat>(responseContent);
}
}
}
50 changes: 50 additions & 0 deletions Parser/ParserResults/ClientGens/OwnerClient.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using System.Net.Http.Json;
using System.Text.Json;
using Parser.ParserResults.Entities;

namespace Parser.ParserResults.ClientGens
{
public class OwnerClient
{
private static readonly HttpClient _client = new HttpClient();
public static async Task<LinkedList<Owner>> getAll()
{
var jsonContent = JsonContent.Create("");
var response = await _client.GetAsync($"http://localhost:8080/getAll" + $"");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<LinkedList<Owner>>(responseContent);
}

public static async Task<Owner> createOwner(string name, string date)
{
var jsonContent = JsonContent.Create("");
var response = await _client.PostAsync($"http://localhost:8080/createOwner" + $"?name={name}&date={date}", jsonContent);
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<Owner>(responseContent);
}

public static async Task<Owner> findByName(string name)
{
var jsonContent = JsonContent.Create("");
var response = await _client.GetAsync($"http://localhost:8080/findByName" + $"?name={name}");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<Owner>(responseContent);
}

public static async Task<LinkedList<Owner>> findByDate(string date)
{
var jsonContent = JsonContent.Create("");
var response = await _client.GetAsync($"http://localhost:8080/findByDate" + $"?date={date}");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<LinkedList<Owner>>(responseContent);
}

public static async Task<Owner> deleteOwner(Owner owner)
{
var jsonContent = JsonContent.Create(owner);
var response = await _client.DeleteAsync($"http://localhost:8080/deleteCat" + $"");
var responseContent = await response.Content.ReadAsStringAsync();
return JsonSerializer.Deserialize<Owner>(responseContent);
}
}
}
17 changes: 17 additions & 0 deletions Parser/ParserResults/Entities/Cat.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
namespace Parser.ParserResults.Entities
{
public class Cat
{
public string Name { get; set; }

public string Date { get; set; }

public string Breed { get; set; }

public Owner Owner { get; set; }

public string Color { get; set; }

public LinkedList<Cat> Friends { get; set; }
}
}
Loading