com.intellij.refactoring.introduceVariable.IntroduceVariableHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.intellij.refactoring.introduceVariable.IntroduceVariableHandler.java

Source

/*
 * Copyright 2000-2009 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.intellij.refactoring.introduceVariable;

import com.intellij.codeInsight.highlighting.HighlightManager;
import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.editor.colors.EditorColors;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.markup.RangeHighlighter;
import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.DialogWrapper;
import com.intellij.openapi.wm.WindowManager;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiExpression;
import com.intellij.refactoring.HelpID;
import com.intellij.refactoring.RefactoringBundle;
import com.intellij.refactoring.introduce.inplace.OccurrencesChooser;
import com.intellij.refactoring.ui.ConflictsDialog;
import com.intellij.refactoring.ui.TypeSelectorManagerImpl;
import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.util.containers.MultiMap;
import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;

public class IntroduceVariableHandler extends IntroduceVariableBase {

    public void invoke(@NotNull final Project project, final Editor editor, final PsiExpression expression) {
        invokeImpl(project, expression, editor);
    }

    @Override
    public IntroduceVariableSettings getSettings(Project project, Editor editor, PsiExpression expr,
            PsiExpression[] occurrences, TypeSelectorManagerImpl typeSelectorManager, boolean declareFinalIfAll,
            boolean anyAssignmentLHS, final InputValidator validator, PsiElement anchor,
            final OccurrencesChooser.ReplaceChoice replaceChoice) {
        if (replaceChoice != null) {
            return super.getSettings(project, editor, expr, occurrences, typeSelectorManager, declareFinalIfAll,
                    anyAssignmentLHS, validator, anchor, replaceChoice);
        }
        ArrayList<RangeHighlighter> highlighters = new ArrayList<RangeHighlighter>();
        HighlightManager highlightManager = null;
        if (editor != null) {
            highlightManager = HighlightManager.getInstance(project);
            EditorColorsManager colorsManager = EditorColorsManager.getInstance();
            TextAttributes attributes = colorsManager.getGlobalScheme()
                    .getAttributes(EditorColors.SEARCH_RESULT_ATTRIBUTES);
            if (occurrences.length > 1) {
                highlightManager.addOccurrenceHighlights(editor, occurrences, attributes, true, highlighters);
            }
        }

        IntroduceVariableDialog dialog = new IntroduceVariableDialog(project, expr, occurrences.length,
                anyAssignmentLHS, declareFinalIfAll, typeSelectorManager, validator);
        dialog.show();
        if (!dialog.isOK()) {
            if (occurrences.length > 1) {
                WindowManager.getInstance().getStatusBar(project)
                        .setInfo(RefactoringBundle.message("press.escape.to.remove.the.highlighting"));
            }
        } else {
            if (editor != null) {
                for (RangeHighlighter highlighter : highlighters) {
                    highlightManager.removeSegmentHighlighter(editor, highlighter);
                }
            }
        }

        return dialog;
    }

    protected void showErrorMessage(final Project project, Editor editor, String message) {
        CommonRefactoringUtil.showErrorHint(project, editor, message, REFACTORING_NAME, HelpID.INTRODUCE_VARIABLE);
    }

    protected boolean reportConflicts(final MultiMap<PsiElement, String> conflicts, final Project project,
            IntroduceVariableSettings dialog) {
        ConflictsDialog conflictsDialog = new ConflictsDialog(project, conflicts);
        conflictsDialog.show();
        final boolean ok = conflictsDialog.isOK();
        if (!ok && conflictsDialog.isShowConflicts()) {
            if (dialog instanceof DialogWrapper)
                ((DialogWrapper) dialog).close(DialogWrapper.CANCEL_EXIT_CODE);
        }
        return ok;
    }
}