// Path: src/main/java/com/dubreuia/core/service/SaveActionsService.java
// @Service
// public interface SaveActionsService {
// 
//     void guardedProcessPsiFiles(Project project, Set<PsiFile> psiFiles, Action activation, ExecutionMode mode);
// 
//     boolean isJavaAvailable();
// 
//     boolean isCompilingAvailable();
// 
//     List<QuickList> getQuickLists(Project project);
// 
// }
// 
// Path: src/main/java/com/dubreuia/core/service/SaveActionsServiceManager.java
// public class SaveActionsServiceManager {
// 
// 
//     private SaveActionsServiceManager() {
//     }
// 
//     public static SaveActionsService getService() {
//         return ServiceHandler.INSTANCE.getService();
//     }
// 
//     private enum ServiceHandler {
// 
//         INSTANCE;
// 
//         private static SaveActionsService service;
// 
//         public SaveActionsService getService() {
//             if (service == null) {
//                 newService();
//             }
//             return service;
//         }
// 
//         private void newService() {
//             service = ApplicationManager.getApplication().getService(SaveActionsJavaService.class);
//             if (service == null) {
//                 service = ApplicationManager.getApplication().getService(SaveActionsDefaultService.class);
//             }
//         }
//     }
// }


import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
import java.util.Set;
import static com.dubreuia.core.ExecutionMode.batch;
import static com.dubreuia.model.Action.activateOnBatch;
import static java.util.Collections.synchronizedSet;
import com.dubreuia.core.service.SaveActionsService;
import com.dubreuia.core.service.SaveActionsServiceManager;
import com.intellij.analysis.AnalysisScope;
import com.intellij.analysis.BaseAnalysisAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2020 Alexandre DuBreuil
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 */
package com.dubreuia.core.action;




/**
 * This action runs the save actions on the given scope of files, only if property
 * {@link com.dubreuia.model.Action#activateOnShortcut} is enabled. The user is asked for the scope using a standard
 * IDEA dialog. It delegates to {@link SaveActionsService}. Originally based on
 * {@link com.intellij.codeInspection.inferNullity.InferNullityAnnotationsAction}.
 *
 * @author markiewb
 * @see SaveActionsServiceManager
 */
public class BatchAction extends BaseAnalysisAction {

    private static final Logger LOGGER = Logger.getInstance(SaveActionsService.class);
    private static final String COMPONENT_NAME = "Save Actions";

    public BatchAction() {
        super(COMPONENT_NAME, COMPONENT_NAME);
    }

// Path: src/main/java/com/dubreuia/core/service/SaveActionsService.java
// @Service
// public interface SaveActionsService {
// 
//     void guardedProcessPsiFiles(Project project, Set<PsiFile> psiFiles, Action activation, ExecutionMode mode);
// 
//     boolean isJavaAvailable();
// 
//     boolean isCompilingAvailable();
// 
//     List<QuickList> getQuickLists(Project project);
// 
// }
// 
// Path: src/main/java/com/dubreuia/core/service/SaveActionsServiceManager.java
// public class SaveActionsServiceManager {
// 
// 
//     private SaveActionsServiceManager() {
//     }
// 
//     public static SaveActionsService getService() {
//         return ServiceHandler.INSTANCE.getService();
//     }
// 
//     private enum ServiceHandler {
// 
//         INSTANCE;
// 
//         private static SaveActionsService service;
// 
//         public SaveActionsService getService() {
//             if (service == null) {
//                 newService();
//             }
//             return service;
//         }
// 
//         private void newService() {
//             service = ApplicationManager.getApplication().getService(SaveActionsJavaService.class);
//             if (service == null) {
//                 service = ApplicationManager.getApplication().getService(SaveActionsDefaultService.class);
//             }
//         }
//     }
// }


// Path: src/main/java/com/dubreuia/core/action/BatchAction.java
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.NotNull;
import java.util.HashSet;
import java.util.Set;
import static com.dubreuia.core.ExecutionMode.batch;
import static com.dubreuia.model.Action.activateOnBatch;
import static java.util.Collections.synchronizedSet;
import com.dubreuia.core.service.SaveActionsService;
import com.dubreuia.core.service.SaveActionsServiceManager;
import com.intellij.analysis.AnalysisScope;
import com.intellij.analysis.BaseAnalysisAction;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;

/*
 * The MIT License (MIT)
 *
 * Copyright (c) 2020 Alexandre DuBreuil
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 *
 */
package com.dubreuia.core.action;




/**
 * This action runs the save actions on the given scope of files, only if property
 * {@link com.dubreuia.model.Action#activateOnShortcut} is enabled. The user is asked for the scope using a standard
 * IDEA dialog. It delegates to {@link SaveActionsService}. Originally based on
 * {@link com.intellij.codeInspection.inferNullity.InferNullityAnnotationsAction}.
 *
 * @author markiewb
 * @see SaveActionsServiceManager
 */
public class BatchAction extends BaseAnalysisAction {

    private static final Logger LOGGER = Logger.getInstance(SaveActionsService.class);
    private static final String COMPONENT_NAME = "Save Actions";

    public BatchAction() {
        super(COMPONENT_NAME, COMPONENT_NAME);
    }

    @Override