package org.infernus.idea.checkstyle.actions;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.vfs.VirtualFile;
import org.infernus.idea.checkstyle.CheckStylePlugin;
import org.infernus.idea.checkstyle.model.ConfigurationLocation;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
class ScanEverythingAction implements Runnable {
private final Project project;
private final Module module;
private final ConfigurationLocation selectedOverride;
ScanEverythingAction(@NotNull final Project project, final ConfigurationLocation selectedOverride) {
this.project = project;
this.module = null;
this.selectedOverride = selectedOverride;
}
ScanEverythingAction(@NotNull final Module module, final ConfigurationLocation selectedOverride) {
this.project = module.getProject();
this.module = module;
this.selectedOverride = selectedOverride;
}
@Override
public void run() {
List<VirtualFile> filesToScan = null;
if (module != null) {
// all non-excluded files of a module
final ModuleRootManager moduleRootManager = ModuleRootManager.getInstance(module);
filesToScan = flattenFiles(moduleRootManager.getContentRoots());
} else {
// all non-excluded files of the project
filesToScan = flattenFiles(new VirtualFile[]{project.getBaseDir()});
}
project.getComponent(CheckStylePlugin.class).asyncScanFiles(filesToScan, selectedOverride);
}
private List<VirtualFile> flattenFiles(final VirtualFile[] files) {
final List<VirtualFile> flattened = new ArrayList<>();
if (files != null) {
for (final VirtualFile file : files) {
flattened.add(file);
if (file.getChildren() != null) {
flattened.addAll(flattenFiles(file.getChildren()));
}
}
}
return flattened;
}
}