Search in sources :

Example 1 with ValuesExtractionResult

use of com.intellij.psi.codeStyle.extractor.values.ValuesExtractionResult in project intellij-community by JetBrains.

the class DifferBase method getDifference.

@Override
public int getDifference(ValuesExtractionResult container) {
    final ValuesExtractionResult orig = container.apply(true);
    String newText = reformattedText();
    int result = Utils.getDiff(mySettings.getCommonSettings(myFile.getLanguage()).getIndentOptions(), myOrigText, newText);
    orig.apply(false);
    return result;
}
Also used : ValuesExtractionResult(com.intellij.psi.codeStyle.extractor.values.ValuesExtractionResult)

Example 2 with ValuesExtractionResult

use of com.intellij.psi.codeStyle.extractor.values.ValuesExtractionResult in project intellij-community by JetBrains.

the class BruteForceProcessor method runWithProgress.

@Override
public ValuesExtractionResult runWithProgress(Project project, CodeStyleSettings settings, PsiFile file, ProgressIndicator indicator) {
    List<Value> values = getFormattingValues(settings, file.getLanguage());
    Differ differ = myLangExtractor.getDiffer(project, file, settings);
    ValuesExtractionResult container = new ValuesExtractionResultImpl(values);
    Utils.adjustValuesMin(container, differ, indicator);
    return container;
}
Also used : ValuesExtractionResultImpl(com.intellij.psi.codeStyle.extractor.values.ValuesExtractionResultImpl) Differ(com.intellij.psi.codeStyle.extractor.differ.Differ) ValuesExtractionResult(com.intellij.psi.codeStyle.extractor.values.ValuesExtractionResult) Value(com.intellij.psi.codeStyle.extractor.values.Value)

Example 3 with ValuesExtractionResult

use of com.intellij.psi.codeStyle.extractor.values.ValuesExtractionResult in project intellij-community by JetBrains.

the class ExtractCodeStyleAction method reportResult.

public void reportResult(final ValuesExtractionResult forSelection, final Project project, final CodeStyleSettings cloneSettings, final PsiFile file, final Map<Value, Object> backup) {
    final Balloon balloon = JBPopupFactory.getInstance().createHtmlTextBalloonBuilder("Formatting Options were extracted<br/><a href=\"apply\">Apply</a> <a href=\"details\">Details...</a>", MessageType.INFO, new HyperlinkListener() {

        @Override
        public void hyperlinkUpdate(HyperlinkEvent e) {
            if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
                boolean apply = "apply".equals(e.getDescription());
                ExtractedSettingsDialog myDialog = null;
                if (!apply) {
                    final List<Value> values = forSelection.getValues();
                    final LanguageCodeStyleSettingsProvider[] providers = Extensions.getExtensions(LanguageCodeStyleSettingsProvider.EP_NAME);
                    Language language = file.getLanguage();
                    CodeStyleSettingsNameProvider nameProvider = new CodeStyleSettingsNameProvider();
                    for (final LanguageCodeStyleSettingsProvider provider : providers) {
                        Language target = provider.getLanguage();
                        if (target.equals(language)) {
                            //this is our language
                            nameProvider.addSettings(provider);
                            myDialog = new ExtractedSettingsDialog(project, nameProvider, values);
                            apply = myDialog.showAndGet();
                            break;
                        }
                    }
                }
                if (apply && myDialog != null) {
                    //create new settings named after the file
                    final ExtractedSettingsDialog finalMyDialog = myDialog;
                    forSelection.applyConditioned(value -> finalMyDialog.valueIsSelectedInTree(value), backup);
                    CodeStyleScheme derivedScheme = CodeStyleSchemes.getInstance().createNewScheme("Derived from " + file.getName(), null);
                    derivedScheme.getCodeStyleSettings().copyFrom(cloneSettings);
                    CodeStyleSchemes.getInstance().addScheme(derivedScheme);
                    CodeStyleSchemesImpl.getSchemeManager().setCurrent(derivedScheme);
                    CodeStyleSettingsManager.getInstance(project).PREFERRED_PROJECT_CODE_STYLE = derivedScheme.getName();
                }
            }
        }
    }).setDisposable(ApplicationManager.getApplication()).setShowCallout(false).setFadeoutTime(0).setShowCallout(false).setAnimationCycle(0).setHideOnClickOutside(false).setHideOnKeyOutside(false).setCloseButtonEnabled(true).setHideOnLinkClick(true).createBalloon();
    ApplicationManager.getApplication().invokeLater(() -> {
        Window window = WindowManager.getInstance().getFrame(project);
        if (window == null) {
            window = JOptionPane.getRootFrame();
        }
        if (window instanceof IdeFrame) {
            BalloonLayout layout = ((IdeFrame) window).getBalloonLayout();
            if (layout != null) {
                layout.add(balloon);
            }
        }
    });
}
Also used : Language(com.intellij.lang.Language) IdeFrame(com.intellij.openapi.wm.IdeFrame) MessageType(com.intellij.openapi.ui.MessageType) HyperlinkEvent(javax.swing.event.HyperlinkEvent) com.intellij.psi.codeStyle(com.intellij.psi.codeStyle) VirtualFile(com.intellij.openapi.vfs.VirtualFile) CodeStyleDeriveProcessor(com.intellij.psi.codeStyle.extractor.processor.CodeStyleDeriveProcessor) LangCodeStyleExtractor(com.intellij.psi.codeStyle.extractor.differ.LangCodeStyleExtractor) Value(com.intellij.psi.codeStyle.extractor.values.Value) PsiManager(com.intellij.psi.PsiManager) Balloon(com.intellij.openapi.ui.popup.Balloon) ProcessCanceledException(com.intellij.openapi.progress.ProcessCanceledException) Task(com.intellij.openapi.progress.Task) BalloonLayout(com.intellij.ui.BalloonLayout) Map(java.util.Map) Project(com.intellij.openapi.project.Project) PsiFile(com.intellij.psi.PsiFile) DumbAware(com.intellij.openapi.project.DumbAware) PsiDocumentManager(com.intellij.psi.PsiDocumentManager) ExtractedSettingsDialog(com.intellij.psi.codeStyle.extractor.ui.ExtractedSettingsDialog) Extensions(com.intellij.openapi.extensions.Extensions) ProgressManager(com.intellij.openapi.progress.ProgressManager) HyperlinkListener(javax.swing.event.HyperlinkListener) WindowManager(com.intellij.openapi.wm.WindowManager) Editor(com.intellij.openapi.editor.Editor) java.awt(java.awt) com.intellij.openapi.actionSystem(com.intellij.openapi.actionSystem) ProgressIndicator(com.intellij.openapi.progress.ProgressIndicator) List(java.util.List) JBPopupFactory(com.intellij.openapi.ui.popup.JBPopupFactory) GenProcessor(com.intellij.psi.codeStyle.extractor.processor.GenProcessor) CodeStyleSchemesImpl(com.intellij.psi.impl.source.codeStyle.CodeStyleSchemesImpl) LanguageFormatting(com.intellij.lang.LanguageFormatting) ApplicationManager(com.intellij.openapi.application.ApplicationManager) CodeStyleSettingsNameProvider(com.intellij.psi.codeStyle.extractor.ui.CodeStyleSettingsNameProvider) ValuesExtractionResult(com.intellij.psi.codeStyle.extractor.values.ValuesExtractionResult) NotNull(org.jetbrains.annotations.NotNull) Condition(com.intellij.openapi.util.Condition) javax.swing(javax.swing) HyperlinkEvent(javax.swing.event.HyperlinkEvent) ExtractedSettingsDialog(com.intellij.psi.codeStyle.extractor.ui.ExtractedSettingsDialog) Balloon(com.intellij.openapi.ui.popup.Balloon) CodeStyleSettingsNameProvider(com.intellij.psi.codeStyle.extractor.ui.CodeStyleSettingsNameProvider) IdeFrame(com.intellij.openapi.wm.IdeFrame) BalloonLayout(com.intellij.ui.BalloonLayout) Language(com.intellij.lang.Language) HyperlinkListener(javax.swing.event.HyperlinkListener) List(java.util.List)

Example 4 with ValuesExtractionResult

use of com.intellij.psi.codeStyle.extractor.values.ValuesExtractionResult in project intellij-community by JetBrains.

the class ExtractCodeStyleAction method actionPerformed.

@Override
public void actionPerformed(AnActionEvent e) {
    DataContext dataContext = e.getDataContext();
    final Project project = CommonDataKeys.PROJECT.getData(dataContext);
    if (project == null)
        return;
    Editor editor = CommonDataKeys.EDITOR.getData(dataContext);
    final VirtualFile[] files = CommonDataKeys.VIRTUAL_FILE_ARRAY.getData(dataContext);
    PsiFile file = null;
    if (editor == null && files != null && files.length == 1 && !files[0].isDirectory()) {
        file = PsiManager.getInstance(project).findFile(files[0]);
    } else if (editor != null) {
        file = PsiDocumentManager.getInstance(project).getPsiFile(editor.getDocument());
    }
    if (file == null)
        return;
    Language language = file.getLanguage();
    final LangCodeStyleExtractor extractor = LangCodeStyleExtractor.EXTENSION.forLanguage(language);
    if (extractor == null)
        return;
    final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(project);
    final CodeStyleDeriveProcessor genProcessor = new GenProcessor(extractor);
    final PsiFile finalFile = file;
    final Task.Backgroundable task = new Task.Backgroundable(project, "Code style extractor", true) {

        @Override
        public void run(@NotNull ProgressIndicator indicator) {
            try {
                CodeStyleSettings cloneSettings = settings.clone();
                Map<Value, Object> backup = genProcessor.backupValues(cloneSettings, finalFile.getLanguage());
                ValuesExtractionResult res = genProcessor.runWithProgress(project, cloneSettings, finalFile, indicator);
                reportResult(res, project, cloneSettings, finalFile, backup);
            } catch (ProcessCanceledException e) {
                Utils.logError("Code extraction was canceled");
            } catch (Throwable t) {
                Utils.logError("Unexpected exception:\n" + t);
            }
        }
    };
    ProgressManager.getInstance().run(task);
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) Task(com.intellij.openapi.progress.Task) ValuesExtractionResult(com.intellij.psi.codeStyle.extractor.values.ValuesExtractionResult) CodeStyleDeriveProcessor(com.intellij.psi.codeStyle.extractor.processor.CodeStyleDeriveProcessor) NotNull(org.jetbrains.annotations.NotNull) Project(com.intellij.openapi.project.Project) Language(com.intellij.lang.Language) ProgressIndicator(com.intellij.openapi.progress.ProgressIndicator) Value(com.intellij.psi.codeStyle.extractor.values.Value) PsiFile(com.intellij.psi.PsiFile) LangCodeStyleExtractor(com.intellij.psi.codeStyle.extractor.differ.LangCodeStyleExtractor) Editor(com.intellij.openapi.editor.Editor) GenProcessor(com.intellij.psi.codeStyle.extractor.processor.GenProcessor) ProcessCanceledException(com.intellij.openapi.progress.ProcessCanceledException)

Aggregations

ValuesExtractionResult (com.intellij.psi.codeStyle.extractor.values.ValuesExtractionResult)4 Value (com.intellij.psi.codeStyle.extractor.values.Value)3 Language (com.intellij.lang.Language)2 Editor (com.intellij.openapi.editor.Editor)2 ProcessCanceledException (com.intellij.openapi.progress.ProcessCanceledException)2 ProgressIndicator (com.intellij.openapi.progress.ProgressIndicator)2 Task (com.intellij.openapi.progress.Task)2 Project (com.intellij.openapi.project.Project)2 VirtualFile (com.intellij.openapi.vfs.VirtualFile)2 PsiFile (com.intellij.psi.PsiFile)2 LangCodeStyleExtractor (com.intellij.psi.codeStyle.extractor.differ.LangCodeStyleExtractor)2 CodeStyleDeriveProcessor (com.intellij.psi.codeStyle.extractor.processor.CodeStyleDeriveProcessor)2 GenProcessor (com.intellij.psi.codeStyle.extractor.processor.GenProcessor)2 LanguageFormatting (com.intellij.lang.LanguageFormatting)1 com.intellij.openapi.actionSystem (com.intellij.openapi.actionSystem)1 ApplicationManager (com.intellij.openapi.application.ApplicationManager)1 Extensions (com.intellij.openapi.extensions.Extensions)1 ProgressManager (com.intellij.openapi.progress.ProgressManager)1 DumbAware (com.intellij.openapi.project.DumbAware)1 MessageType (com.intellij.openapi.ui.MessageType)1