Search in sources :

Example 1 with ReferenceResolution

use of org.eclipse.n4js.ide.imports.ReferenceResolution in project n4js by eclipse.

the class N4JSQuickfixProvider method addImportForUnresolvedReference.

/**
 * Resolves missing import statements by re-using content assist and {@link ImportsAwareReferenceProposalCreator}
 */
@Fix(value = org.eclipse.xtext.diagnostics.Diagnostic.LINKING_DIAGNOSTIC, multiFix = false)
public void addImportForUnresolvedReference(QuickfixContext context, ICodeActionAcceptor acceptor) {
    Script script = context.resource.getScriptResolved();
    Document doc = context.options.getDocument();
    Diagnostic diagnostic = context.getDiagnostic();
    if (script == null || doc == null || diagnostic == null) {
        return;
    }
    EObject model = getEObject(context);
    List<ReferenceResolution> resolutions = importHelper.findResolutionsForUnresolvedReference(model, context.options.getCancelIndicator());
    for (ReferenceResolution resolution : resolutions) {
        ImportDescriptor importToBeAdded = resolution.importToBeAdded;
        if (importToBeAdded == null) {
            continue;
        }
        ReplaceRegion replacement = importHelper.getReplacementForImport(script, importToBeAdded);
        if (replacement != null) {
            String description = resolution.description;
            TextEdit textEdit = ChangeProvider.replace(doc, replacement);
            acceptor.acceptQuickfixCodeAction(context, "Add import from module " + description, Collections.singletonList(textEdit));
        }
    }
}
Also used : Script(org.eclipse.n4js.n4JS.Script) ReplaceRegion(org.eclipse.xtext.util.ReplaceRegion) TextEdit(org.eclipse.lsp4j.TextEdit) EObject(org.eclipse.emf.ecore.EObject) ReferenceResolution(org.eclipse.n4js.ide.imports.ReferenceResolution) Diagnostic(org.eclipse.lsp4j.Diagnostic) ImportDescriptor(org.eclipse.n4js.ide.imports.ImportDescriptor) Document(org.eclipse.xtext.ide.server.Document)

Example 2 with ReferenceResolution

use of org.eclipse.n4js.ide.imports.ReferenceResolution in project n4js by eclipse.

the class N4JSCommandService method doOrganizeImports.

private Void doOrganizeImports(String uriString, ILanguageServerAccess.Context context, LanguageClient languageClient, CancelIndicator cancelIndicator) {
    Resource resource = context.getResource();
    if (!(resource instanceof N4JSResource)) {
        return null;
    }
    Script script = ((N4JSResource) resource).getScript();
    Document document = context.getDocument();
    // compute imports to be added for unresolved references
    List<ImportDescriptor> importsToBeAdded = new ArrayList<>();
    List<ReferenceResolution> resolutions = importHelper.findResolutionsForAllUnresolvedReferences(script, cancelIndicator);
    for (ReferenceResolution resolution : resolutions) {
        if (resolution.importToBeAdded != null) {
            importsToBeAdded.add(resolution.importToBeAdded);
        }
    }
    // organize all imports (existing and new ones)
    List<TextEdit> edits = importOrganizer.organizeImports(document, script, importsToBeAdded, cancelIndicator);
    WorkspaceEdit workspaceEdit = new WorkspaceEdit(Collections.singletonMap(uriString, edits));
    ApplyWorkspaceEditParams params = new ApplyWorkspaceEditParams(workspaceEdit, "Organize Imports");
    languageClient.applyEdit(params);
    return null;
}
Also used : Script(org.eclipse.n4js.n4JS.Script) ApplyWorkspaceEditParams(org.eclipse.lsp4j.ApplyWorkspaceEditParams) Resource(org.eclipse.emf.ecore.resource.Resource) N4JSResource(org.eclipse.n4js.resource.N4JSResource) ArrayList(java.util.ArrayList) ReferenceResolution(org.eclipse.n4js.ide.imports.ReferenceResolution) WorkspaceEdit(org.eclipse.lsp4j.WorkspaceEdit) Document(org.eclipse.xtext.ide.server.Document) TextEdit(org.eclipse.lsp4j.TextEdit) N4JSResource(org.eclipse.n4js.resource.N4JSResource) ImportDescriptor(org.eclipse.n4js.ide.imports.ImportDescriptor)

Aggregations

TextEdit (org.eclipse.lsp4j.TextEdit)2 ImportDescriptor (org.eclipse.n4js.ide.imports.ImportDescriptor)2 ReferenceResolution (org.eclipse.n4js.ide.imports.ReferenceResolution)2 Script (org.eclipse.n4js.n4JS.Script)2 Document (org.eclipse.xtext.ide.server.Document)2 ArrayList (java.util.ArrayList)1 EObject (org.eclipse.emf.ecore.EObject)1 Resource (org.eclipse.emf.ecore.resource.Resource)1 ApplyWorkspaceEditParams (org.eclipse.lsp4j.ApplyWorkspaceEditParams)1 Diagnostic (org.eclipse.lsp4j.Diagnostic)1 WorkspaceEdit (org.eclipse.lsp4j.WorkspaceEdit)1 N4JSResource (org.eclipse.n4js.resource.N4JSResource)1 ReplaceRegion (org.eclipse.xtext.util.ReplaceRegion)1