package com.google.jstestdriver.idea.assertFramework.support; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.AsyncResult; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.util.FileContentUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import java.util.Arrays; class AdapterFix implements LocalQuickFix { private final AbstractAddAdapterSupportInspection myAssertFrameworkAdapterSupportProvider; AdapterFix(AbstractAddAdapterSupportInspection assertFrameworkAddAdapterSupportInspection) { myAssertFrameworkAdapterSupportProvider = assertFrameworkAddAdapterSupportInspection; } @NotNull //@Override public String getText() { String assertFrameworkName = myAssertFrameworkAdapterSupportProvider.getAssertFrameworkName(); return "Add " + assertFrameworkName + " adapter support for JsTestDriver"; } @NotNull @Override public String getFamilyName() { return getText(); } public void invoke(@NotNull final Project project, Editor editor, final PsiFile file) throws IncorrectOperationException { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { AddAdapterSupportDialog dialog = new AddAdapterSupportDialog( project, myAssertFrameworkAdapterSupportProvider.getAssertFrameworkName(), myAssertFrameworkAdapterSupportProvider.getAdapterSourceFiles() ); final AsyncResult<Boolean> result = dialog.showAndGetOk(); final VirtualFile virtualFile = file.getVirtualFile(); if (virtualFile != null) { result.doWhenDone(new AsyncResult.Handler<Boolean>() { @Override public void run(Boolean ok) { if (ok) { FileContentUtil.reparseFiles(project, Arrays.<VirtualFile>asList(virtualFile), true); } } }); } } }); } // LocalQuickFix methods implementation @NotNull @Override public String getName() { return getText(); } @Override public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { final Editor editor = FileEditorManager.getInstance(project).getSelectedTextEditor(); invoke(project, editor, descriptor.getPsiElement().getContainingFile()); } }