package com.google.jstestdriver.idea.assertFramework.support; import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiFile; import com.intellij.util.FileContentUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.NotNullProducer; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.List; public class AddAdapterSupportIntentionAction implements IntentionAction { private final String myAssertionFrameworkName; private final NotNullProducer<List<VirtualFile>> myAdapterSourceFilesProvider; private final String myAdapterHomePageUrl; public AddAdapterSupportIntentionAction(@NotNull String assertionFrameworkName, @NotNull NotNullProducer<List<VirtualFile>> adapterSourceFilesProvider, @Nullable String adapterHomePageUrl) { myAssertionFrameworkName = assertionFrameworkName; myAdapterSourceFilesProvider = adapterSourceFilesProvider; myAdapterHomePageUrl = adapterHomePageUrl; } @NotNull @Override public String getText() { return "Add " + myAssertionFrameworkName + " JsTestDriver adapter"; } @NotNull @Override public String getFamilyName() { return getText(); } @Override public boolean isAvailable(@NotNull final Project project, Editor editor, final PsiFile psiFile) { return psiFile != null && psiFile.isValid(); } @Override public void invoke(@NotNull final Project project, Editor editor, final PsiFile file) throws IncorrectOperationException { AddAdapterSupportDialog dialog = new AddAdapterSupportDialog( project, file, myAssertionFrameworkName, myAdapterSourceFilesProvider.produce(), myAdapterHomePageUrl ); final boolean result = dialog.showAndGet(); final VirtualFile virtualFile = file.getVirtualFile(); if (virtualFile != null && result) { FileContentUtil.reparseFiles(project, Collections.singletonList(virtualFile), true); } } @Override public boolean startInWriteAction() { return false; } }