}
+// */
+// public static void main(String[] args) throws IOException {
+// args = new String[]{"./output/IR.json", "./output/Delta.json", "./config.json"};
+// String[] finalArgs = args;
+//
+// Config config = ConfigUtil.readConfig(args[0]);
+//
+// MergeService mergeService = new MergeService(args[0], args[1], args[2], args[3]);
+//
+// //mergeService.generateMergeIR();
+// }
+//}
diff --git a/src/main/java/edu/university/ecs/lab/common/config/Config.java b/src/main/java/edu/university/ecs/lab/common/config/Config.java
deleted file mode 100644
index 96ba210c..00000000
--- a/src/main/java/edu/university/ecs/lab/common/config/Config.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package edu.university.ecs.lab.common.config;
-
-import edu.university.ecs.lab.common.error.Error;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.Objects;
-import java.util.Optional;
-
-import static edu.university.ecs.lab.common.error.Error.NULL_ERROR;
-
-/**
- * Model to represent the JSON configuration file
- * Some additional notes, this object is p
- */
-@Getter
-@Setter
-public class Config {
- private static final String GIT_SCHEME_DOMAIN = "https://github.com/";
- private static final String GIT_PATH_EXTENSION = ".git";
-
- /**
- * The name of the system analyzed
- */
- private final String systemName;
-
- /**
- * The path to write cloned repository files to
- */
- private final String repositoryURL;
-
- /**
- * Initial starting commit for repository
- */
- private final String branch;
-
-
- public Config(String systemName, String repositoryURL, String branch) throws Exception {
- validateConfig(systemName, repositoryURL, branch);
-
- this.systemName = systemName;
- this.repositoryURL = repositoryURL;
- this.branch = branch;
- }
-
- /**
- * Check that config file is valid and has all required fields
- */
-
- private void validateConfig(String systemName, String repositoryURL, String branch) {
- try {
- Objects.requireNonNull(systemName);
- Objects.requireNonNull(repositoryURL);
- Objects.requireNonNull(branch);
- validateConfig(systemName, repositoryURL, branch);
-
- assert !systemName.isBlank() && !repositoryURL.isBlank() && !branch.isBlank();
- } catch (Exception e) {
- Error.reportAndExit(Error.INVALID_CONFIG, Optional.of(e));
- }
- Objects.requireNonNull(systemName, NULL_ERROR.getMessage());
- Objects.requireNonNull(repositoryURL, NULL_ERROR.getMessage());
- Objects.requireNonNull(branch, NULL_ERROR.getMessage());
- validateRepositoryURL(repositoryURL);
- }
-
- /**
- * The list of repository objects as indicated by config
- */
-
- private void validateRepositoryURL(String repositoryURL) {
- if (!(repositoryURL.isBlank() || repositoryURL.startsWith(GIT_SCHEME_DOMAIN) || repositoryURL.endsWith(GIT_PATH_EXTENSION))) {
- Error.reportAndExit(Error.INVALID_REPOSITORY_URL, Optional.empty());
- }
- }
-
- /**
- * This method gets the repository name parsed from the repositoryURL
- *
- * @return the plain string repository name with no path related characters
- */
- public String getRepoName() {
- int lastSlashIndex = repositoryURL.lastIndexOf("/");
- int lastDotIndex = repositoryURL.lastIndexOf('.');
- return repositoryURL.substring(lastSlashIndex + 1, lastDotIndex);
- }
-
-}
diff --git a/src/main/java/edu/university/ecs/lab/common/config/ConfigUtil.java b/src/main/java/edu/university/ecs/lab/common/config/ConfigUtil.java
deleted file mode 100644
index 49da39ef..00000000
--- a/src/main/java/edu/university/ecs/lab/common/config/ConfigUtil.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package edu.university.ecs.lab.common.config;
-
-import edu.university.ecs.lab.common.utils.JsonReadWriteUtils;
-
-/**
- * Utility class for reading and validating the input config file
- */
-public class ConfigUtil {
-
- /**
- * Prevent instantiation
- */
- private ConfigUtil() {
- }
-
- /**
- * This method read's the input config and return Config object
- *
- * @param configPath path to the input config file
- * @return Config object
- */
- public static Config readConfig(String configPath) {
- return JsonReadWriteUtils.readFromJSON(configPath, Config.class);
- }
-
-
-}
diff --git a/src/main/java/edu/university/ecs/lab/common/config/package-info.java b/src/main/java/edu/university/ecs/lab/common/config/package-info.java
deleted file mode 100644
index f72cb654..00000000
--- a/src/main/java/edu/university/ecs/lab/common/config/package-info.java
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Provides classes and utilities for handling configuration files related to microservice systems.
- *
- * This package includes:
- * - {@link edu.university.ecs.lab.common.config.Config}: Represents a configuration model for managing
- * JSON configuration files, including system name, repository URL, base commit and branch, and paths
- * to microservices within the repository.
- * - {@link edu.university.ecs.lab.common.config.ConfigUtil}: Utility class for reading and validating
- * JSON configuration files, converting them into {@code Config} objects.
- */
-package edu.university.ecs.lab.common.config;
diff --git a/src/main/java/edu/university/ecs/lab/common/error/Error.java b/src/main/java/edu/university/ecs/lab/common/error/Error.java
deleted file mode 100644
index 3daa7e9c..00000000
--- a/src/main/java/edu/university/ecs/lab/common/error/Error.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package edu.university.ecs.lab.common.error;
-
-import edu.university.ecs.lab.common.services.LoggerManager;
-import lombok.Getter;
-
-import java.util.Optional;
-
-/**
- * Enum representing different error types with corresponding error codes and messages.
- */
-@Getter
-public enum Error {
- UNKNOWN_ERROR(1, "Unknown error has occured!"),
- NULL_ERROR(1, "Input cannot be null!"),
- INVALID_REPOSITORY_URL(2, "Invalid repository URL!"),
- INVALID_REPO_PATHS(3, "Invalid relative repository paths!"),
- INVALID_REPO_PATH(4, "Invalid repository relative path after update! Skipping!"),
- INVALID_CONFIG_PATH(5, "Invalid configuration file path!"),
- REPO_DONT_EXIST(6, "The specified repository does not exist!"),
- GIT_FAILED(7, "The requested git action failed for an unknown reason!"),
- INVALID_ARGS(8, "Invalid arguments!"),
- INVALID_JSON_READ(9, "Unable to read JSON from file!"),
- INVALID_JSON_WRITE(10, "Unable to write JSON to file!"),
- JPARSE_FAILED(10, "Failed to parse Java Code!"),
- INVALID_CONFIG(10, "Invalid configuration file!"),
- MISSING_CONFIG(10, "Missing configuration file!");
-
- /**
- * The unique error code identifying the error type.
- */
- private final int code;
- /**
- * The detailed message describing the error.
- */
- private final String message;
-
- /**
- * Constructor for Error enum.
- *
- * @param code The error code.
- * @param message The error message.
- */
- Error(int code, String message) {
- this.code = code;
- this.message = message;
- }
-
- /**
- * Prints the error message to standard error and exits the program with the error code.
- *
- * @param error The error enum value to report and exit with.
- */
- public static void reportAndExit(Error error, Optional exception) {
- LoggerManager.error(error::getMessage, exception);
- System.exit(error.code);
- }
-
- /**
- * Returns a string representation of the error.
- *
- * @return The formatted string representation of the error.
- */
- @Override
- public String toString() {
- return "Error " + code + ": " + message;
- }
-}
diff --git a/src/main/java/edu/university/ecs/lab/common/error/package-info.java b/src/main/java/edu/university/ecs/lab/common/error/package-info.java
deleted file mode 100644
index 89f7d9e7..00000000
--- a/src/main/java/edu/university/ecs/lab/common/error/package-info.java
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Provides an enumeration for handling errors within the tool for the creation of the end product.
- *
- * This package contains an enumeration representing various error types that can occur during
- * the operation of the tool. Each error type includes an error code and a descriptive message
- * to identify and communicate errors effectively.
- */
-package edu.university.ecs.lab.common.error;
diff --git a/src/main/java/edu/university/ecs/lab/common/models/enums/ClassRole.java b/src/main/java/edu/university/ecs/lab/common/models/enums/ClassRole.java
deleted file mode 100644
index 1848f469..00000000
--- a/src/main/java/edu/university/ecs/lab/common/models/enums/ClassRole.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package edu.university.ecs.lab.common.models.enums;
-
-import edu.university.ecs.lab.common.models.ir.JClass;
-import lombok.Getter;
-
-/**
- * Enum to represent the role of a class in a system
- */
-public enum ClassRole {
- CONTROLLER(JClass.class),
- SERVICE(JClass.class),
- REPOSITORY(JClass.class),
- ENTITY(JClass.class),
- REP_REST_RSC(JClass.class),
- FEIGN_CLIENT(JClass.class),
- UNKNOWN(null);
-
- /**
- * Get the associated class type for a role
- */
- @Getter
- private final Class extends JClass> classType;
-
- /**
- * Private constructor to link enum to class type
- *
- * @param classType the class type to associate with the role
- */
- ClassRole(Class extends JClass> classType) {
- this.classType = classType;
- }
-
- /**
- * Get the class role from the class type
- *
- * @param roleName the name of the class role
- * @return associated class type if it exists, else null (unknown or not found)
- */
- public static Class extends JClass> classFromRoleName(String roleName) {
- // Iterate over type names
- for (ClassRole role : ClassRole.values()) {
- if (role.name().equalsIgnoreCase(roleName)) {
- return role.classType;
- }
- }
- return null;
- }
-
-}
diff --git a/src/main/java/edu/university/ecs/lab/common/models/enums/EndpointTemplate.java b/src/main/java/edu/university/ecs/lab/common/models/enums/EndpointTemplate.java
deleted file mode 100644
index fa90fcf4..00000000
--- a/src/main/java/edu/university/ecs/lab/common/models/enums/EndpointTemplate.java
+++ /dev/null
@@ -1,163 +0,0 @@
-package edu.university.ecs.lab.common.models.enums;
-
-import com.github.javaparser.ast.body.MethodDeclaration;
-import com.github.javaparser.ast.expr.*;
-import edu.university.ecs.lab.intermediate.utils.StringParserUtils;
-import lombok.Getter;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Factory class for generating an endpoint template from annotations
- */
-@Getter
-public class EndpointTemplate {
- public static final List ENDPOINT_ANNOTATIONS = Arrays.asList("RequestMapping", "GetMapping", "PutMapping", "PostMapping", "DeleteMapping", "PatchMapping");
- private final HttpMethod httpMethod;
- private final String name;
- private final String url;
-
-
-
- public EndpointTemplate(AnnotationExpr requestMapping, AnnotationExpr endpointMapping) {
- HttpMethod finalHttpMethod = HttpMethod.ALL;
-
- String preUrl = "";
- if(requestMapping != null) {
- if (requestMapping instanceof NormalAnnotationExpr) {
- NormalAnnotationExpr nae = (NormalAnnotationExpr) requestMapping;
- for (MemberValuePair pair : nae.getPairs()) {
- if (pair.getNameAsString().equals("value")) {
- preUrl = pair.getValue().toString().replaceAll("\"", "");
- }
- }
- } else if (requestMapping instanceof SingleMemberAnnotationExpr) {
- preUrl = requestMapping.asSingleMemberAnnotationExpr().getMemberValue().toString().replaceAll("\"", "");
- }
- }
-
- String url = "";
- if (endpointMapping instanceof NormalAnnotationExpr) {
- NormalAnnotationExpr nae = (NormalAnnotationExpr) endpointMapping;
- for (MemberValuePair pair : nae.getPairs()) {
- if (pair.getNameAsString().equals("method")) {
- String methodValue = pair.getValue().toString();
- finalHttpMethod = httpFromMapping(methodValue);
- } else if(pair.getNameAsString().equals("path") || pair.getNameAsString().equals("value")) {
- url = pair.getValue().toString().replaceAll("\"", "");
- }
- }
- } else if (endpointMapping instanceof SingleMemberAnnotationExpr) {
- url = endpointMapping.asSingleMemberAnnotationExpr().getMemberValue().toString().replaceAll("\"", "");
- } else if(endpointMapping instanceof MarkerAnnotationExpr) {
- if(preUrl.isEmpty()) {
- url = "/";
- }
- }
-
- if(finalHttpMethod == HttpMethod.ALL) {
- finalHttpMethod = httpFromMapping(endpointMapping.getNameAsString());
- }
-
- String finalURL = "";
- // Ensure preUrl starts with a slash if it exists
- if((!preUrl.isEmpty() && !preUrl.startsWith("/"))) {
- preUrl = "/" + preUrl;
- // Ensure Url starts with a slash if it exists
- } else if ((!url.isEmpty() && !url.startsWith("/"))) {
- url = "/" + url;
- }
-
-
- if(preUrl.isEmpty() && url.isEmpty()) {
- finalURL = "/";
- } else {
- finalURL = preUrl + url;
- }
-
- // Replace any double slashes
- finalURL = finalURL.replaceAll("//", "/");
- // If it ends with a slash remove it
- finalURL = finalURL.endsWith("/") && !finalURL.equals("/") ? finalURL.substring(0, finalURL.length() - 1) : finalURL;
-
-
- // Get query Parameters
-
- this.httpMethod = finalHttpMethod;
- this.name = endpointMapping.getNameAsString();
- this.url = simplifyEndpointURL(finalURL);
- }
-
-
- /**
- * Method to get http method from mapping
- *
- * @param mapping mapping string for a given method
- * @return HttpMethod object of same method type
- */
- private static HttpMethod httpFromMapping(String mapping) {
- switch (mapping) {
- case "GetMapping":
- case "RequestMethod.GET":
- return HttpMethod.GET;
- case "PostMapping":
- case "RequestMethod.POST":
- return HttpMethod.POST;
- case "DeleteMapping":
- case "RequestMethod.DELETE":
- return HttpMethod.DELETE;
- case "PutMapping":
- case "RequestMethod.PUT":
- return HttpMethod.PUT;
- case "PatchMapping":
- case "RequestMethod.PATCH":
- return HttpMethod.PATCH;
- default:
- return HttpMethod.ALL;
- }
-
- }
-
- /**
- * Method to get endpoint path from annotations
- *
- * @param ae annotation expression from method
- * @param url string formatted as a url
- * @return endpoint path/url from annotation expression
- */
- public static String getPathFromAnnotation(AnnotationExpr ae, String url) {
- // Annotations of type @Mapping("/endpoint")
- if (ae.isSingleMemberAnnotationExpr()) {
- url = url + StringParserUtils.simplifyEndpointURL(
- StringParserUtils.removeOuterQuotations(
- ae.asSingleMemberAnnotationExpr().getMemberValue().toString()));
- }
-
- // Annotations of type @Mapping(path="/endpoint")
- else if (ae.isNormalAnnotationExpr() && !ae.asNormalAnnotationExpr().getPairs().isEmpty()) {
- for (MemberValuePair mvp : ae.asNormalAnnotationExpr().getPairs()) {
- if (mvp.getName().toString().equals("path") || mvp.getName().toString().equals("value")) {
- url = url + StringParserUtils.simplifyEndpointURL(
- StringParserUtils.removeOuterQuotations(mvp.getValue().toString()));
- break;
- }
- }
- }
- return url;
- }
-
- /**
- * Simplifies all path arguments to {?}.
- *
- * @param url the endpoint URL
- * @return the simplified endpoint URL
- */
- public static String simplifyEndpointURL(String url) {
- return url.replaceAll("\\{[^{}]*\\}", "{?}");
- }
-
-
-}
diff --git a/src/main/java/edu/university/ecs/lab/common/models/enums/FileType.java b/src/main/java/edu/university/ecs/lab/common/models/enums/FileType.java
deleted file mode 100644
index 5b3d69e2..00000000
--- a/src/main/java/edu/university/ecs/lab/common/models/enums/FileType.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package edu.university.ecs.lab.common.models.enums;
-
-/**
- * File types enum
- */
-public enum FileType {
- JCLASS,
- CONFIG,
- POM
-}
diff --git a/src/main/java/edu/university/ecs/lab/common/models/enums/HttpMethod.java b/src/main/java/edu/university/ecs/lab/common/models/enums/HttpMethod.java
deleted file mode 100644
index 9f99a8a8..00000000
--- a/src/main/java/edu/university/ecs/lab/common/models/enums/HttpMethod.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package edu.university.ecs.lab.common.models.enums;
-
-/**
- * Enum to represent the HTTP methods
- */
-public enum HttpMethod {
- GET,
- PUT,
- POST,
- DELETE,
- OPTIONS,
- HEAD,
- PATCH,
- ALL,
- NONE
-}
diff --git a/src/main/java/edu/university/ecs/lab/common/models/enums/RestCallTemplate.java b/src/main/java/edu/university/ecs/lab/common/models/enums/RestCallTemplate.java
deleted file mode 100644
index ecab9dc1..00000000
--- a/src/main/java/edu/university/ecs/lab/common/models/enums/RestCallTemplate.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package edu.university.ecs.lab.common.models.enums;
-
-import com.github.javaparser.ast.CompilationUnit;
-import com.github.javaparser.ast.Node;
-import com.github.javaparser.ast.body.FieldDeclaration;
-import com.github.javaparser.ast.body.VariableDeclarator;
-import com.github.javaparser.ast.expr.*;
-import edu.university.ecs.lab.common.models.ir.MethodCall;
-import edu.university.ecs.lab.intermediate.utils.StringParserUtils;
-import javassist.expr.Expr;
-import lombok.Getter;
-
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-/**
- * Enum to represent Spring methodName and HttpMethod combinations and determine HttpMethod from
- * methodName.
- */
-@Getter
-public class RestCallTemplate {
- public static final Set REST_OBJECTS = Set.of("RestTemplate", "OAuth2RestOperations", "OAuth2RestTemplate", "WebClient");
- public static final Set REST_METHODS = Set.of("getForObject", "postForObject", "patchForObject", "put", "delete", "exchange", "get", "post", "options", "patch");
- private static final String UNKNOWN_VALUE = "{?}";
-
- private final String url;
- private final HttpMethod httpMethod;
- private final CompilationUnit cu;
- private final MethodCallExpr mce;
-
- public RestCallTemplate(MethodCallExpr mce, MethodCall mc, CompilationUnit cu) {
- this.cu = cu;
- this.mce = mce;
- this.url = simplifyEndpointURL(preParseURL(mce, mc));
- this.httpMethod = getHttpFromName(mce);
- }
-
- /**
- * Find the RestTemplate by the method name.
- *
- * @param mce the method call
- * @return the RestTemplate found (null if not found)
- */
- public HttpMethod getHttpFromName(MethodCallExpr mce) {
- String methodName = mce.getNameAsString();
- switch (methodName) {
- case "getForObject":
- case "get":
- return HttpMethod.GET;
- case "postForObject":
- case "post":
- return HttpMethod.POST;
- case "patchForObject":
- case "patch":
- return HttpMethod.PATCH;
- case "put":
- return HttpMethod.PUT;
- case "delete":
- return HttpMethod.DELETE;
- case "exchange":
- return getHttpMethodForExchange(mce.getArguments().stream().map(Node::toString).collect(Collectors.joining()));
- }
-
- return HttpMethod.NONE;
- }
-
- /**
- * Get the HTTP method for the JSF exchange() method call.
- *
- * @param arguments the arguments of the exchange() method
- * @return the HTTP method extracted
- */
- public HttpMethod getHttpMethodForExchange(String arguments) {
- if (arguments.contains("HttpMethod.POST")) {
- return HttpMethod.POST;
- } else if (arguments.contains("HttpMethod.PUT")) {
- return HttpMethod.PUT;
- } else if (arguments.contains("HttpMethod.DELETE")) {
- return HttpMethod.DELETE;
- } else if (arguments.contains("HttpMethod.PATCH")) {
- return HttpMethod.PATCH;
- } else {
- return HttpMethod.GET; // default
- }
- }
-
- /**
- * Find the URL from the given expression.
- *
- * @param exp the expression to extract url from
- * @return the URL found
- */
- private String parseURL(Expression exp) {
- if (exp.isStringLiteralExpr()) {
- return exp.asStringLiteralExpr().asString();
- } else if (exp.isFieldAccessExpr()) {
- return parseFieldValue(exp.asFieldAccessExpr().getNameAsString());
- } else if (exp.isBinaryExpr()) {
- String left = parseURL(exp.asBinaryExpr().getLeft());
- String right = parseURL(exp.asBinaryExpr().getRight());
- return left + right;
- } else if(exp.isEnclosedExpr()) {
- return parseURL(exp.asEnclosedExpr());
- // Base case, if we are a method call or a u
- } else if(exp.isMethodCallExpr()) {
- // Here we may try to find a modified url in a method call expr
- return backupParseURL(exp).isEmpty() ? UNKNOWN_VALUE : backupParseURL(exp);
- } else if(exp.isNameExpr()) {
- // Special case
- if(exp.asNameExpr().getNameAsString().contains("uri") || exp.asNameExpr().getNameAsString().contains("url")) {
- return "";
- }
- return UNKNOWN_VALUE;
- }
-
- // If all fails, try to find some viable url
- return backupParseURL(exp);
- }
-
- /**
- * Find the URL from the given expression.
- *
- * @param exp the expression to extract url from
- * @return the URL found
- */
- private String backupParseURL(Expression exp) {
- // Regular expression to match the first instance of "/.*"
- String regex = "\".*(/.+?)\"";
-
- // Compile the pattern
- Pattern pattern = Pattern.compile(regex);
-
- // Create a matcher for the input string
- Matcher matcher = pattern.matcher(exp.toString());
-
- // Find the first match
- if (matcher.find()) {
- // Extract the first instance of "/.*"
- String extracted = matcher.group(0).replace("\"", ""); // Group 1 corresponds to the part in parentheses (captured group)
-
- // Replace string formatters if they are present
- extracted = extracted.replaceAll("%[sdif]", UNKNOWN_VALUE);
-
- return cleanURL(extracted);
- }
-
- return "";
-
- }
-
- /**
- * Shorten URLs to only endpoint query
- *
- * @param str full url
- * @return url query
- */
- private static String cleanURL(String str) {
- str = str.replace("http://", "");
- str = str.replace("https://", "");
-
- // Remove everything before the first /
- int backslashNdx = str.indexOf("/");
- if (backslashNdx > 0) {
- str = str.substring(backslashNdx);
- }
-
- // Remove any trailing quotes
- if (str.endsWith("\"")) {
- str = str.substring(0, str.length() - 1);
- }
-
- // Remove trailing / (does not affect functionality, trailing /'s are ignored in Spring)
- if (str.endsWith("/")) {
- str = str.substring(0, str.length() - 1);
- }
-
- return str;
- }
-
- private String parseFieldValue(String fieldName) {
- for (FieldDeclaration fd : cu.findAll(FieldDeclaration.class)) {
- if (fd.getVariables().toString().contains(fieldName)) {
- Expression init = fd.getVariable(0).getInitializer().orElse(null);
- if (init != null) {
- return StringParserUtils.removeOuterQuotations(init.toString());
- }
- }
- }
-
- return "";
- }
-
-
- private String preParseURL(MethodCallExpr mce, MethodCall mc) {
-
- // Nuance for webclient with method appender pattern
- if(mc.getObjectType().equals("WebClient")) {
- if(mce.getParentNode().isPresent()) {
- if(mce.getParentNode().get() instanceof MethodCallExpr pmce) {
- return pmce.getArguments().get(0).toString().isEmpty() ? "" : cleanURL(parseURL(pmce.getArguments().get(0)));
- }
- }
- } else {
- return mce.getArguments().get(0).toString().isEmpty() ? "" : cleanURL(parseURL(mce.getArguments().get(0)));
- }
-
- return "";
- }
-
- /**
- * Simplifies all path arguments to {?}.
- *
- * @param url the endpoint URL
- * @return the simplified endpoint URL
- */
- public static String simplifyEndpointURL(String url) {
- return url.replaceAll("\\{[^{}]*\\}", "{?}");
- }
-}
diff --git a/src/main/java/edu/university/ecs/lab/common/models/ir/Annotation.java b/src/main/java/edu/university/ecs/lab/common/models/ir/Annotation.java
deleted file mode 100644
index 171b9f27..00000000
--- a/src/main/java/edu/university/ecs/lab/common/models/ir/Annotation.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package edu.university.ecs.lab.common.models.ir;
-
-import com.github.javaparser.ast.expr.*;
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
-import com.google.gson.JsonObject;
-import com.google.gson.reflect.TypeToken;
-import edu.university.ecs.lab.common.models.serialization.JsonSerializable;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-/**
- * Represents an annotation in Java
- */
-@Data
-@EqualsAndHashCode
-public class Annotation extends Node {
-
- private Map attributes;
-
- public Annotation(AnnotationExpr annotationExpr, String packageAndClassName) {
- this.name = annotationExpr.getNameAsString();
- this.packageAndClassName = packageAndClassName;
- this.attributes = parseAttributes(annotationExpr);
- }
-
- public Annotation(String name, String packageAndClassName, HashMap attributes) {
- this.name = name;
- this.packageAndClassName = packageAndClassName;
- this.attributes = attributes;
- }
-
- /**
- * Get contents of annotation object
- *
- * @return comma-delimmited list of annotation content key-value pairs
- */
- public String getContents() {
- return getAttributes().entrySet().stream().map(entry -> entry.getKey() + "=" + entry.getValue()).collect(Collectors.joining(","));
- }
-
- /**
- * see {@link JsonSerializable#toJsonObject()}
- */
- @Override
- public JsonObject toJsonObject() {
- JsonObject jsonObject = new JsonObject();
- Gson gson = new Gson();
-
- jsonObject.addProperty("name", getName());
- jsonObject.addProperty("packageAndClassName", getPackageAndClassName());
- JsonElement attributesJson = gson.toJsonTree(attributes, new TypeToken