diff --git a/rosetta-ide/src/main/java/com/regnosys/rosetta/ide/quickfix/RosettaQuickFixCodeActionService.java b/rosetta-ide/src/main/java/com/regnosys/rosetta/ide/quickfix/RosettaQuickFixCodeActionService.java index ae6413bd3..448c9829b 100644 --- a/rosetta-ide/src/main/java/com/regnosys/rosetta/ide/quickfix/RosettaQuickFixCodeActionService.java +++ b/rosetta-ide/src/main/java/com/regnosys/rosetta/ide/quickfix/RosettaQuickFixCodeActionService.java @@ -4,7 +4,6 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; -import java.util.stream.Collectors; import jakarta.inject.Inject; @@ -17,6 +16,7 @@ import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.eclipse.xtext.ide.editor.quickfix.DiagnosticResolution; import org.eclipse.xtext.ide.editor.quickfix.IQuickFixProvider; +import org.eclipse.xtext.ide.server.ILanguageServerAccess; import org.eclipse.xtext.ide.server.codeActions.ICodeActionService2; /* @@ -30,26 +30,35 @@ public class RosettaQuickFixCodeActionService implements ICodeActionService2 { @Override public List> getCodeActions(Options options) { - boolean handleQuickfixes = options.getCodeActionParams().getContext().getOnly() == null - || options.getCodeActionParams().getContext().getOnly().isEmpty() - || options.getCodeActionParams().getContext().getOnly().contains(CodeActionKind.QuickFix); - - if (!handleQuickfixes) { - return Collections.emptyList(); - } List> result = new ArrayList<>(); for (Diagnostic diagnostic : options.getCodeActionParams().getContext().getDiagnostics()) { - Options diagnosticOptions = createOptionsForSingleDiagnostic(options, diagnostic); - List resolutions = quickfixes.getResolutions(diagnosticOptions, diagnostic).stream() - .sorted(Comparator.nullsLast(Comparator.comparing(DiagnosticResolution::getLabel))) - .collect(Collectors.toList()); - for (DiagnosticResolution resolution : resolutions) { - result.add(Either.forRight(createFix(resolution, diagnostic))); + if (handlesDiagnostic(diagnostic)) { + result.addAll(options.getLanguageServerAccess() + .doSyncRead(options.getURI(), (ILanguageServerAccess.Context context) -> { + options.setDocument(context.getDocument()); + options.setResource(context.getResource()); + Options diagnosticOptions = createOptionsForSingleDiagnostic(options, diagnostic); + return getCodeActions(diagnosticOptions, diagnostic); + })); } } return result; } + + protected boolean handlesDiagnostic(Diagnostic diagnostic) { + return quickfixes.handlesDiagnostic(diagnostic); + } + + protected List> getCodeActions(Options options, Diagnostic diagnostic) { + List> codeActions = new ArrayList<>(); + + quickfixes.getResolutions(options, diagnostic).stream() + .sorted(Comparator + .nullsLast(Comparator.comparing(DiagnosticResolution::getLabel))) + .forEach(r -> codeActions.add(Either.forRight(createFix(r, diagnostic)))); + return codeActions; + } private CodeAction createFix(DiagnosticResolution resolution, Diagnostic diagnostic) { CodeAction codeAction = new CodeAction();