package com.chrisfolger.needsmoredojo.intellij.inspections;
import com.chrisfolger.needsmoredojo.core.amd.importing.UnusedImportBlockEntry;
import com.chrisfolger.needsmoredojo.core.amd.importing.UnusedImportsRemover;
import com.chrisfolger.needsmoredojo.core.settings.DojoSettings;
import com.intellij.codeInspection.InspectionManager;
import com.intellij.codeInspection.LocalQuickFix;
import com.intellij.codeInspection.ProblemDescriptor;
import com.intellij.codeInspection.ProblemHighlightType;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
public class UnusedImportsInspection extends DojoInspection
{
@Override
public String getDisplayName()
{
return "Check for unused imports";
}
@Nls
@NotNull
@Override
public String getGroupDisplayName()
{
return "Needs More Dojo";
}
@Override
public String[] getGroupPath()
{
return new String[] { "JavaScript", "Needs More Dojo "};
}
@Nullable
@Override
public String getStaticDescription() {
return "Detects AMD imports that are flagged as unused and marks them with a strikethrough";
}
@Override
public boolean isEnabledByDefault()
{
return true;
}
@Override
public String getShortName()
{
return "UnusedImportsInspection";
}
@Override
public ProblemDescriptor[] checkFile(@NotNull PsiFile file, @NotNull final InspectionManager manager, boolean isOnTheFly)
{
if(!isEnabled(file.getProject()))
{
return new ProblemDescriptor[0];
}
final List<ProblemDescriptor> descriptors = new ArrayList<ProblemDescriptor>();
UnusedImportsRemover detector = new UnusedImportsRemover();
List<UnusedImportBlockEntry> results = detector.filterUsedModules(file, ServiceManager.getService(file.getProject(), DojoSettings.class).getRuiImportExceptions());
for(UnusedImportBlockEntry result : results)
{
List<PsiElement> defines = result.getDefines();
List<PsiElement> parameters = result.getParameters();
LocalQuickFix[] fixes = new LocalQuickFix[0];
for(int i=0;i<parameters.size();i++)
{
PsiElement define = null;
if(i < defines.size())
{
define = defines.get(i);
}
PsiElement parameter = null;
if(i < parameters.size())
{
parameter = parameters.get(i);
}
if(parameter != null && define != null)
{
fixes = new LocalQuickFix[] { new RemoveImportQuickFix(define, parameter), new IgnoreImportQuickFix(define, parameter), new RemoveUnusedImportsQuickFix(define, parameter)};
}
else
{
fixes = new LocalQuickFix[0];
}
if (parameter != null)
{
descriptors.add(manager.createProblemDescriptor(parameter, String.format("Unused AMD import: %s", parameter.getText()), fixes, ProblemHighlightType.LIKE_DEPRECATED, true, false));
}
if (define != null)
{
descriptors.add(manager.createProblemDescriptor(define, String.format("Unused AMD import: %s", define.getText()), fixes, ProblemHighlightType.LIKE_DEPRECATED, true, false));
}
}
}
return descriptors.toArray(new ProblemDescriptor[0]);
}
}