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));
}
}
}
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;
}
Aggregations