diff --git a/client/src/types/diagnostics.ts b/client/src/types/diagnostics.ts index 4d51819..02314e3 100644 --- a/client/src/types/diagnostics.ts +++ b/client/src/types/diagnostics.ts @@ -25,6 +25,7 @@ export type LJWarning = CustomWarning | ExternalClassNotFoundWarning | ExternalM type BaseDiagnostic = { title: string; message: string; + details: string; file: string; position: SourcePosition | null; } diff --git a/server/src/main/java/dtos/diagnostics/LJDiagnosticDTO.java b/server/src/main/java/dtos/diagnostics/LJDiagnosticDTO.java index 7ae1de3..83d8d88 100644 --- a/server/src/main/java/dtos/diagnostics/LJDiagnosticDTO.java +++ b/server/src/main/java/dtos/diagnostics/LJDiagnosticDTO.java @@ -5,10 +5,33 @@ /** * DTO for serializing LJDiagnostic instances to JSON */ -public record LJDiagnosticDTO(String title, String message, String details, String file, SourcePositionDTO position) { +public class LJDiagnosticDTO { - public static LJDiagnosticDTO from(LJDiagnostic diagnostic) { - return new LJDiagnosticDTO(diagnostic.getTitle(), diagnostic.getMessage(), diagnostic.getDetails(), + public final String category; + public final String type; + public final String title; + public final String message; + public final String details; + public final String file; + public final SourcePositionDTO position; + + public LJDiagnosticDTO(String category, String type, LJDiagnostic diagnostic) { + this(category, type, diagnostic.getTitle(), diagnostic.getMessage(), diagnostic.getDetails(), diagnostic.getFile(), SourcePositionDTO.from(diagnostic.getPosition())); } + + public LJDiagnosticDTO(String category, String type, String title, String message, String details, String file, + SourcePositionDTO position) { + this.category = category; + this.type = type; + this.title = title; + this.message = message; + this.details = details; + this.file = file; + this.position = position; + } + + public static LJDiagnosticDTO from(LJDiagnostic diagnostic) { + return new LJDiagnosticDTO(null, null, diagnostic); + } } diff --git a/server/src/main/java/dtos/errors/ArgumentMismatchErrorDTO.java b/server/src/main/java/dtos/errors/ArgumentMismatchErrorDTO.java index 710520c..6f700b0 100644 --- a/server/src/main/java/dtos/errors/ArgumentMismatchErrorDTO.java +++ b/server/src/main/java/dtos/errors/ArgumentMismatchErrorDTO.java @@ -1,16 +1,17 @@ package dtos.errors; -import dtos.diagnostics.SourcePositionDTO; import liquidjava.diagnostics.errors.ArgumentMismatchError; /** * DTO for serializing ArgumentMismatchErrorDTO instances to JSON */ -public record ArgumentMismatchErrorDTO(String category, String type, String title, String message, String file, - SourcePositionDTO position) { +public class ArgumentMismatchErrorDTO extends LJErrorDTO { + + public ArgumentMismatchErrorDTO(ArgumentMismatchError error) { + super("argument-mismatch-error", error); + } public static ArgumentMismatchErrorDTO from(ArgumentMismatchError error) { - return new ArgumentMismatchErrorDTO("error", "argument-mismatch-error", error.getTitle(), error.getMessage(), error.getFile(), - SourcePositionDTO.from(error.getPosition())); + return new ArgumentMismatchErrorDTO(error); } } diff --git a/server/src/main/java/dtos/errors/CustomErrorDTO.java b/server/src/main/java/dtos/errors/CustomErrorDTO.java index 38b4e04..e8c48d2 100644 --- a/server/src/main/java/dtos/errors/CustomErrorDTO.java +++ b/server/src/main/java/dtos/errors/CustomErrorDTO.java @@ -1,15 +1,17 @@ package dtos.errors; -import dtos.diagnostics.SourcePositionDTO; import liquidjava.diagnostics.errors.CustomError; /** * DTO for serializing CustomError instances to JSON */ -public record CustomErrorDTO(String category, String type, String title, String message, String file, SourcePositionDTO position) { +public class CustomErrorDTO extends LJErrorDTO { + + public CustomErrorDTO(CustomError error) { + super("custom-error", error); + } public static CustomErrorDTO from(CustomError error) { - return new CustomErrorDTO("error", "custom-error", error.getTitle(), error.getMessage(), error.getFile(), - SourcePositionDTO.from(error.getPosition())); + return new CustomErrorDTO(error); } } diff --git a/server/src/main/java/dtos/errors/IllegalConstructorTransitionErrorDTO.java b/server/src/main/java/dtos/errors/IllegalConstructorTransitionErrorDTO.java index d2695f6..08af982 100644 --- a/server/src/main/java/dtos/errors/IllegalConstructorTransitionErrorDTO.java +++ b/server/src/main/java/dtos/errors/IllegalConstructorTransitionErrorDTO.java @@ -1,16 +1,17 @@ package dtos.errors; -import dtos.diagnostics.SourcePositionDTO; import liquidjava.diagnostics.errors.IllegalConstructorTransitionError; /** * DTO for serializing IllegalConstructorTransitionError instances to JSON */ -public record IllegalConstructorTransitionErrorDTO(String category, String type, String title, String message, String file, - SourcePositionDTO position) { +public class IllegalConstructorTransitionErrorDTO extends LJErrorDTO { + + public IllegalConstructorTransitionErrorDTO(IllegalConstructorTransitionError error) { + super("illegal-constructor-transition-error", error); + } public static IllegalConstructorTransitionErrorDTO from(IllegalConstructorTransitionError error) { - return new IllegalConstructorTransitionErrorDTO("error", "illegal-constructor-transition-error", error.getTitle(), error.getMessage(), error.getFile(), - SourcePositionDTO.from(error.getPosition())); + return new IllegalConstructorTransitionErrorDTO(error); } } diff --git a/server/src/main/java/dtos/errors/InvalidRefinementErrorDTO.java b/server/src/main/java/dtos/errors/InvalidRefinementErrorDTO.java index a669da4..7e745d4 100644 --- a/server/src/main/java/dtos/errors/InvalidRefinementErrorDTO.java +++ b/server/src/main/java/dtos/errors/InvalidRefinementErrorDTO.java @@ -1,16 +1,20 @@ package dtos.errors; -import dtos.diagnostics.SourcePositionDTO; import liquidjava.diagnostics.errors.InvalidRefinementError; /** * DTO for serializing InvalidRefinementError instances to JSON */ -public record InvalidRefinementErrorDTO(String category, String type, String title, String message, String file, - SourcePositionDTO position, String refinement) { +public class InvalidRefinementErrorDTO extends LJErrorDTO { + + public final String refinement; + + public InvalidRefinementErrorDTO(InvalidRefinementError error) { + super("invalid-refinement-error", error); + this.refinement = error.getRefinement(); + } public static InvalidRefinementErrorDTO from(InvalidRefinementError error) { - return new InvalidRefinementErrorDTO("error", "invalid-refinement-error", error.getTitle(), error.getMessage(), error.getFile(), - SourcePositionDTO.from(error.getPosition()), error.getRefinement()); + return new InvalidRefinementErrorDTO(error); } } diff --git a/server/src/main/java/dtos/errors/LJErrorDTO.java b/server/src/main/java/dtos/errors/LJErrorDTO.java index 67c0865..82efc11 100644 --- a/server/src/main/java/dtos/errors/LJErrorDTO.java +++ b/server/src/main/java/dtos/errors/LJErrorDTO.java @@ -1,5 +1,6 @@ package dtos.errors; +import dtos.diagnostics.LJDiagnosticDTO; import dtos.diagnostics.SourcePositionDTO; import dtos.diagnostics.TranslationTableDTO; import liquidjava.diagnostics.errors.LJError; @@ -7,11 +8,27 @@ /** * DTO for serializing LJError instances to JSON */ -public record LJErrorDTO(String title, String message, String file, SourcePositionDTO position, - TranslationTableDTO translationTable) { +public class LJErrorDTO extends LJDiagnosticDTO { + + public final TranslationTableDTO translationTable; + + public LJErrorDTO(String type, LJError error) { + super("error", type, error); + this.translationTable = TranslationTableDTO.from(error.getTranslationTable()); + } + + protected LJErrorDTO(String category, String type, LJError error) { + super(category, type, error); + this.translationTable = TranslationTableDTO.from(error.getTranslationTable()); + } + + public LJErrorDTO(String category, String type, String title, String message, String details, String file, + SourcePositionDTO position, TranslationTableDTO translationTable) { + super(category, type, title, message, details, file, position); + this.translationTable = translationTable; + } public static LJErrorDTO from(LJError error) { - return new LJErrorDTO(error.getTitle(), error.getMessage(), error.getFile(), - SourcePositionDTO.from(error.getPosition()), TranslationTableDTO.from(error.getTranslationTable())); + return new LJErrorDTO(null, error); } } diff --git a/server/src/main/java/dtos/errors/NotFoundErrorDTO.java b/server/src/main/java/dtos/errors/NotFoundErrorDTO.java index bc8ae7a..72f0cf9 100644 --- a/server/src/main/java/dtos/errors/NotFoundErrorDTO.java +++ b/server/src/main/java/dtos/errors/NotFoundErrorDTO.java @@ -1,17 +1,22 @@ package dtos.errors; -import dtos.diagnostics.SourcePositionDTO; -import dtos.diagnostics.TranslationTableDTO; import liquidjava.diagnostics.errors.NotFoundError; /** * DTO for serializing NotFoundError instances to JSON */ -public record NotFoundErrorDTO(String category, String type, String title, String message, String file, SourcePositionDTO position, - TranslationTableDTO translationTable, String name, String kind) { +public class NotFoundErrorDTO extends LJErrorDTO { + + public final String name; + public final String kind; + + public NotFoundErrorDTO(NotFoundError error) { + super("not-found-error", error); + this.name = error.getName(); + this.kind = error.getKind(); + } public static NotFoundErrorDTO from(NotFoundError error) { - return new NotFoundErrorDTO("error", "not-found-error", error.getTitle(), error.getMessage(), error.getFile(), - SourcePositionDTO.from(error.getPosition()), TranslationTableDTO.from(error.getTranslationTable()), error.getName(), error.getKind()); + return new NotFoundErrorDTO(error); } } diff --git a/server/src/main/java/dtos/errors/RefinementErrorDTO.java b/server/src/main/java/dtos/errors/RefinementErrorDTO.java index 18f1d7a..196befa 100644 --- a/server/src/main/java/dtos/errors/RefinementErrorDTO.java +++ b/server/src/main/java/dtos/errors/RefinementErrorDTO.java @@ -1,18 +1,27 @@ package dtos.errors; -import dtos.diagnostics.SourcePositionDTO; -import dtos.diagnostics.TranslationTableDTO; import liquidjava.diagnostics.errors.RefinementError; import liquidjava.rj_language.opt.derivation_node.ValDerivationNode; /** * DTO for serializing RefinementError instances to JSON */ -public record RefinementErrorDTO(String category, String type, String title, String message, String file, SourcePositionDTO position, - TranslationTableDTO translationTable, ValDerivationNode expected, ValDerivationNode found, String customMessage, String counterexample) { +public class RefinementErrorDTO extends LJErrorDTO { + + public final ValDerivationNode expected; + public final ValDerivationNode found; + public final String customMessage; + public final String counterexample; + + public RefinementErrorDTO(RefinementError error) { + super("refinement-error", error); + this.expected = error.getExpected(); + this.found = error.getFound(); + this.customMessage = error.getCustomMessage(); + this.counterexample = error.getCounterExampleString(); + } public static RefinementErrorDTO from(RefinementError error) { - return new RefinementErrorDTO("error", "refinement-error", error.getTitle(), error.getMessage(), error.getFile(), - SourcePositionDTO.from(error.getPosition()), TranslationTableDTO.from(error.getTranslationTable()), error.getExpected(), error.getFound(), error.getCustomMessage(), error.getCounterExampleString()); + return new RefinementErrorDTO(error); } } diff --git a/server/src/main/java/dtos/errors/StateConflictErrorDTO.java b/server/src/main/java/dtos/errors/StateConflictErrorDTO.java index 402e1bd..db58642 100644 --- a/server/src/main/java/dtos/errors/StateConflictErrorDTO.java +++ b/server/src/main/java/dtos/errors/StateConflictErrorDTO.java @@ -1,17 +1,20 @@ package dtos.errors; -import dtos.diagnostics.SourcePositionDTO; -import dtos.diagnostics.TranslationTableDTO; import liquidjava.diagnostics.errors.StateConflictError; /** * DTO for serializing StateConflictError instances to JSON */ -public record StateConflictErrorDTO(String category, String type, String title, String message, String file, SourcePositionDTO position, - TranslationTableDTO translationTable, String state) { +public class StateConflictErrorDTO extends LJErrorDTO { + + public final String state; + + public StateConflictErrorDTO(StateConflictError error) { + super("state-conflict-error", error); + this.state = error.getState(); + } public static StateConflictErrorDTO from(StateConflictError error) { - return new StateConflictErrorDTO("error", "state-conflict-error", error.getTitle(), error.getMessage(), error.getFile(), - SourcePositionDTO.from(error.getPosition()), TranslationTableDTO.from(error.getTranslationTable()), error.getState()); + return new StateConflictErrorDTO(error); } } diff --git a/server/src/main/java/dtos/errors/StateRefinementErrorDTO.java b/server/src/main/java/dtos/errors/StateRefinementErrorDTO.java index efcf369..ab1a217 100644 --- a/server/src/main/java/dtos/errors/StateRefinementErrorDTO.java +++ b/server/src/main/java/dtos/errors/StateRefinementErrorDTO.java @@ -1,19 +1,25 @@ package dtos.errors; -import dtos.diagnostics.SourcePositionDTO; -import dtos.diagnostics.TranslationTableDTO; import liquidjava.diagnostics.errors.StateRefinementError; import liquidjava.rj_language.opt.derivation_node.ValDerivationNode; /** * DTO for serializing StateRefinementError instances to JSON */ -public record StateRefinementErrorDTO(String category, String type, String title, String message, String file, SourcePositionDTO position, - TranslationTableDTO translationTable, ValDerivationNode expected, ValDerivationNode found, String customMessage) { +public class StateRefinementErrorDTO extends LJErrorDTO { + + public final ValDerivationNode expected; + public final ValDerivationNode found; + public final String customMessage; + + public StateRefinementErrorDTO(StateRefinementError error) { + super("state-refinement-error", error); + this.expected = error.getExpected(); + this.found = error.getFound(); + this.customMessage = error.getCustomMessage(); + } public static StateRefinementErrorDTO from(StateRefinementError error) { - return new StateRefinementErrorDTO("error", "state-refinement-error", error.getTitle(), error.getMessage(), error.getFile(), - SourcePositionDTO.from(error.getPosition()), TranslationTableDTO.from(error.getTranslationTable()), error.getExpected(), - error.getFound(), error.getCustomMessage()); + return new StateRefinementErrorDTO(error); } } diff --git a/server/src/main/java/dtos/errors/SyntaxErrorDTO.java b/server/src/main/java/dtos/errors/SyntaxErrorDTO.java index e426823..e08cd84 100644 --- a/server/src/main/java/dtos/errors/SyntaxErrorDTO.java +++ b/server/src/main/java/dtos/errors/SyntaxErrorDTO.java @@ -1,16 +1,20 @@ package dtos.errors; -import dtos.diagnostics.SourcePositionDTO; import liquidjava.diagnostics.errors.SyntaxError; /** * DTO for serializing SyntaxError instances to JSON */ -public record SyntaxErrorDTO(String category, String type, String title, String message, String file, SourcePositionDTO position, - String refinement) { +public class SyntaxErrorDTO extends LJErrorDTO { + + public final String refinement; + + public SyntaxErrorDTO(SyntaxError error) { + super("syntax-error", error); + this.refinement = error.getRefinement(); + } public static SyntaxErrorDTO from(SyntaxError error) { - return new SyntaxErrorDTO("error", "syntax-error", error.getTitle(), error.getMessage(), error.getFile(), - SourcePositionDTO.from(error.getPosition()), error.getRefinement()); + return new SyntaxErrorDTO(error); } } diff --git a/server/src/main/java/dtos/warnings/CustomWarningDTO.java b/server/src/main/java/dtos/warnings/CustomWarningDTO.java index 5e02122..740351e 100644 --- a/server/src/main/java/dtos/warnings/CustomWarningDTO.java +++ b/server/src/main/java/dtos/warnings/CustomWarningDTO.java @@ -1,15 +1,17 @@ package dtos.warnings; -import dtos.diagnostics.SourcePositionDTO; import liquidjava.diagnostics.warnings.CustomWarning; /** * DTO for serializing CustomError instances to JSON */ -public record CustomWarningDTO(String category, String type, String title, String message, String file, SourcePositionDTO position) { +public class CustomWarningDTO extends LJWarningDTO { + + public CustomWarningDTO(CustomWarning warning) { + super("custom-warning", warning); + } public static CustomWarningDTO from(CustomWarning warning) { - return new CustomWarningDTO("warning", "custom-warning", warning.getTitle(), warning.getMessage(), warning.getFile(), - SourcePositionDTO.from(warning.getPosition())); + return new CustomWarningDTO(warning); } } diff --git a/server/src/main/java/dtos/warnings/ExternalClassNotFoundWarningDTO.java b/server/src/main/java/dtos/warnings/ExternalClassNotFoundWarningDTO.java index 36a0d86..e380c31 100644 --- a/server/src/main/java/dtos/warnings/ExternalClassNotFoundWarningDTO.java +++ b/server/src/main/java/dtos/warnings/ExternalClassNotFoundWarningDTO.java @@ -1,16 +1,20 @@ package dtos.warnings; -import dtos.diagnostics.SourcePositionDTO; import liquidjava.diagnostics.warnings.ExternalClassNotFoundWarning; /** * DTO for serializing ExternalClassNotFoundWarning instances to JSON */ -public record ExternalClassNotFoundWarningDTO(String category, String type, String title, String message, String file, - SourcePositionDTO position, String className) { +public class ExternalClassNotFoundWarningDTO extends LJWarningDTO { + + public final String className; + + public ExternalClassNotFoundWarningDTO(ExternalClassNotFoundWarning warning) { + super("external-class-not-found-warning", warning); + this.className = warning.getClassName(); + } public static ExternalClassNotFoundWarningDTO from(ExternalClassNotFoundWarning warning) { - return new ExternalClassNotFoundWarningDTO("warning", "external-class-not-found-warning", warning.getTitle(), warning.getMessage(), warning.getFile(), - SourcePositionDTO.from(warning.getPosition()), warning.getClassName()); + return new ExternalClassNotFoundWarningDTO(warning); } } diff --git a/server/src/main/java/dtos/warnings/ExternalMethodNotFoundWarningDTO.java b/server/src/main/java/dtos/warnings/ExternalMethodNotFoundWarningDTO.java index 495d198..c5d695d 100644 --- a/server/src/main/java/dtos/warnings/ExternalMethodNotFoundWarningDTO.java +++ b/server/src/main/java/dtos/warnings/ExternalMethodNotFoundWarningDTO.java @@ -1,16 +1,24 @@ package dtos.warnings; -import dtos.diagnostics.SourcePositionDTO; import liquidjava.diagnostics.warnings.ExternalMethodNotFoundWarning; /** * DTO for serializing ExternalMethodNotFoundWarning instances to JSON */ -public record ExternalMethodNotFoundWarningDTO(String category, String type, String title, String message, String file, - SourcePositionDTO position, String signature, String className, String[] overloads) { +public class ExternalMethodNotFoundWarningDTO extends LJWarningDTO { + + public final String signature; + public final String className; + public final String[] overloads; + + public ExternalMethodNotFoundWarningDTO(ExternalMethodNotFoundWarning warning) { + super("external-method-not-found-warning", warning); + this.signature = warning.getSignature(); + this.className = warning.getClassName(); + this.overloads = warning.getOverloads(); + } public static ExternalMethodNotFoundWarningDTO from(ExternalMethodNotFoundWarning warning) { - return new ExternalMethodNotFoundWarningDTO("warning", "external-method-not-found-warning", warning.getTitle(), warning.getMessage(), warning.getFile(), - SourcePositionDTO.from(warning.getPosition()), warning.getSignature(), warning.getClassName(), warning.getOverloads()); + return new ExternalMethodNotFoundWarningDTO(warning); } } diff --git a/server/src/main/java/dtos/warnings/LJWarningDTO.java b/server/src/main/java/dtos/warnings/LJWarningDTO.java index acd598a..6e41d99 100644 --- a/server/src/main/java/dtos/warnings/LJWarningDTO.java +++ b/server/src/main/java/dtos/warnings/LJWarningDTO.java @@ -1,14 +1,22 @@ package dtos.warnings; -import dtos.diagnostics.SourcePositionDTO; +import dtos.diagnostics.LJDiagnosticDTO; import liquidjava.diagnostics.warnings.LJWarning; /** * DTO for serializing LJWarning instances to JSON */ -public record LJWarningDTO(String title, String message, String file, SourcePositionDTO position) { +public class LJWarningDTO extends LJDiagnosticDTO { + + public LJWarningDTO(String type, LJWarning warning) { + super("warning", type, warning); + } + + protected LJWarningDTO(String category, String type, LJWarning warning) { + super(category, type, warning); + } public static LJWarningDTO from(LJWarning warning) { - return new LJWarningDTO(warning.getTitle(), warning.getMessage(), warning.getFile(), SourcePositionDTO.from(warning.getPosition())); + return new LJWarningDTO(null, warning); } } diff --git a/server/src/main/java/dtos/warnings/UnsatisfiableRefinementWarningDTO.java b/server/src/main/java/dtos/warnings/UnsatisfiableRefinementWarningDTO.java index d72fb01..a127460 100644 --- a/server/src/main/java/dtos/warnings/UnsatisfiableRefinementWarningDTO.java +++ b/server/src/main/java/dtos/warnings/UnsatisfiableRefinementWarningDTO.java @@ -1,17 +1,20 @@ package dtos.warnings; -import dtos.diagnostics.SourcePositionDTO; import liquidjava.diagnostics.warnings.UnsatisfiableRefinementWarning; /** * DTO for serializing UnsatisfiableRefinementWarning instances to JSON */ -public record UnsatisfiableRefinementWarningDTO(String category, String type, String title, String message, String file, - SourcePositionDTO position, String refinement) { +public class UnsatisfiableRefinementWarningDTO extends LJWarningDTO { + + public final String refinement; + + public UnsatisfiableRefinementWarningDTO(UnsatisfiableRefinementWarning warning) { + super("unsatisfiable-refinement-warning", warning); + this.refinement = warning.getRefinement(); + } public static UnsatisfiableRefinementWarningDTO from(UnsatisfiableRefinementWarning warning) { - return new UnsatisfiableRefinementWarningDTO("warning", "unsatisfiable-refinement-warning", warning.getTitle(), - warning.getMessage(), warning.getFile(), SourcePositionDTO.from(warning.getPosition()), - warning.getRefinement()); + return new UnsatisfiableRefinementWarningDTO(warning); } }