/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.intentions;
import com.intellij.lang.ImportOptimizer;
import com.intellij.openapi.editor.Document;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.util.PsiTreeUtil;
import gw.plugin.ij.lang.psi.IGosuFile;
import gw.plugin.ij.lang.psi.api.statements.IGosuUsesStatementList;
import org.jetbrains.annotations.NotNull;
public class GosuImportOptimizer implements ImportOptimizer {
public boolean supports(PsiFile file) {
return file instanceof IGosuFile;
}
@NotNull
public Runnable processFile(PsiFile file) {
return new ImportProcessor((IGosuFile) file);
}
private static class ImportProcessor implements Runnable {
private final IGosuFile _gosuFile;
private GosuImportReferenceAnalyzer _importAnalyzer;
private ImportProcessor(IGosuFile file) {
_gosuFile = file;
}
public void run() {
if(_gosuFile.getName().endsWith(".gst")) {
//todo: see PL-27628
return;
}
final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(_gosuFile.getProject());
final Document document = documentManager.getDocument(_gosuFile);
if (document != null) {
documentManager.commitDocument(document);
}
_importAnalyzer = new GosuImportReferenceAnalyzer(_gosuFile);
_importAnalyzer.analyze();
_importAnalyzer.processImports();
final IGosuUsesStatementList oldUsesList = PsiTreeUtil.findChildOfType(_gosuFile, IGosuUsesStatementList.class);
final IGosuUsesStatementList newUsesList = _importAnalyzer.getNewImportList();
if (oldUsesList != null) {
if (newUsesList == null) {
oldUsesList.delete();
} else {
oldUsesList.replace(newUsesList);
}
}
}
}
}