Package krasa.formatter.plugin.processor

Source Code of krasa.formatter.plugin.processor.ImportOrderProcessor

package krasa.formatter.plugin.processor;

import com.intellij.openapi.editor.Document;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiImportList;
import com.intellij.psi.PsiImportStatementBase;
import com.intellij.psi.PsiJavaFile;
import com.intellij.psi.impl.source.codeStyle.CodeStyleManagerImpl;
import krasa.formatter.common.ModifiableFile;
import krasa.formatter.plugin.ImportSorter;
import krasa.formatter.plugin.ImportSorterException;
import krasa.formatter.plugin.Range;
import krasa.formatter.settings.Settings;
import krasa.formatter.settings.provider.ImportOrderProvider;
import krasa.formatter.utils.FileUtils;
import org.jetbrains.annotations.Nullable;

/**
* @author Vojtech Krasa
*/
public class ImportOrderProcessor implements Processor {
  private Settings settings;
  protected ImportSorter importSorter;
  protected ImportOrderProvider importOrderProviderFromFile;
  protected ModifiableFile.Monitor modifiedMonitor;

  public ImportOrderProcessor(Settings settings, ImportOrderProvider importOrderProvider) {
        this.settings = settings;
        this.importOrderProviderFromFile = importOrderProvider;
    }

  @Override
  public boolean process(final Document document, final PsiFile psiFile, final Range range) {
    CodeStyleManagerImpl.setSequentialProcessingAllowed(false);
    if (FileUtils.isJava(psiFile) && settings.isOptimizeImports() && range.isWholeFile()) {
      FileUtils.optimizeImportsByIntellij(psiFile);
      try {
        getImportSorter().sortImports(document);
      } catch (Exception e) {
        final PsiImportList oldImportList = ((PsiJavaFile) psiFile).getImportList();
        StringBuilder stringBuilder = new StringBuilder();
        if (oldImportList != null) {
          PsiImportStatementBase[] allImportStatements = oldImportList.getAllImportStatements();
          for (PsiImportStatementBase allImportStatement : allImportStatements) {
            String text = allImportStatement.getText();
            stringBuilder.append(text);
          }
        }
        String message = "imports: " + stringBuilder.toString() + ", settings: " + settings.getImportOrder();
        throw new ImportSorterException(message, e);
      }
    }
    CodeStyleManagerImpl.setSequentialProcessingAllowed(true);
    return true;
  }

  protected ImportSorter getImportSorter() {
    if (settings.isImportOrderFromFile()) {
      if (importSorter == null || importOrderProviderFromFile.wasChanged(modifiedMonitor)) {
        modifiedMonitor = importOrderProviderFromFile.getModifiedMonitor();
        importSorter = new ImportSorter(importOrderProviderFromFile.get());
      }
    } else if (importSorter == null) {
      importSorter = new ImportSorter(settings.getImportOrderAsList());
    }
    return importSorter;
  }


}
TOP

Related Classes of krasa.formatter.plugin.processor.ImportOrderProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.