mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 09:19:13 +07:00
move instance member: disable visibility change when move into interface; insert @override if needed (IDEA-88471)
This commit is contained in:
+14
@@ -27,6 +27,7 @@ import com.intellij.ui.EditorTextField;
|
||||
import com.intellij.ui.ScrollPaneFactory;
|
||||
import com.intellij.ui.TitledSeparatorWithMnemonic;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -86,6 +87,8 @@ public class MoveInstanceMethodDialog extends MoveInstanceMethodDialogBase {
|
||||
|
||||
separator.setLabelFor(myList);
|
||||
validateTextFields(myList.getSelectedIndex());
|
||||
|
||||
updateOnChanged(myList);
|
||||
return mainPanel;
|
||||
}
|
||||
|
||||
@@ -150,6 +153,17 @@ public class MoveInstanceMethodDialog extends MoveInstanceMethodDialogBase {
|
||||
invokeRefactoring(processor);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void updateOnChanged(JList list) {
|
||||
super.updateOnChanged(list);
|
||||
final PsiVariable selectedValue = (PsiVariable)list.getSelectedValue();
|
||||
if (selectedValue != null) {
|
||||
final PsiClassType psiType = (PsiClassType)selectedValue.getType();
|
||||
final PsiClass targetClass = psiType.resolve();
|
||||
UIUtil.setEnabled(myVisibilityPanel, targetClass != null && !targetClass.isInterface(), true);
|
||||
}
|
||||
}
|
||||
|
||||
protected void doHelpAction() {
|
||||
HelpManager.getInstance().invokeHelp(HelpID.MOVE_INSTANCE_METHOD);
|
||||
}
|
||||
|
||||
+5
-1
@@ -89,12 +89,16 @@ public abstract class MoveInstanceMethodDialogBase extends RefactoringDialog {
|
||||
list.setSelectedIndex(0);
|
||||
list.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
|
||||
public void valueChanged(ListSelectionEvent e) {
|
||||
getOKAction().setEnabled(!list.getSelectionModel().isSelectionEmpty());
|
||||
updateOnChanged(list);
|
||||
}
|
||||
});
|
||||
return list;
|
||||
}
|
||||
|
||||
protected void updateOnChanged(JList list) {
|
||||
getOKAction().setEnabled(!list.getSelectionModel().isSelectionEmpty());
|
||||
}
|
||||
|
||||
protected static JavaVisibilityPanel createVisibilityPanel() {
|
||||
final JavaVisibilityPanel visibilityPanel = new JavaVisibilityPanel(false, true);
|
||||
visibilityPanel.setVisibility(null);
|
||||
|
||||
+7
-3
@@ -16,6 +16,7 @@
|
||||
package com.intellij.refactoring.move.moveInstanceMethod;
|
||||
|
||||
import com.intellij.codeInsight.ChangeContextUtil;
|
||||
import com.intellij.codeInsight.generation.OverrideImplementUtil;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
@@ -216,7 +217,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
for (UsageInfo usage : usages) {
|
||||
if (usage instanceof InheritorUsageInfo) {
|
||||
final PsiClass inheritor = ((InheritorUsageInfo)usage).getInheritor();
|
||||
addMethodToClass(inheritor, patternMethod);
|
||||
addMethodToClass(inheritor, patternMethod, true);
|
||||
}
|
||||
else if (usage instanceof MethodCallUsageInfo && !((MethodCallUsageInfo)usage).isInternal()) {
|
||||
correctMethodCall(((MethodCallUsageInfo)usage).getMethodCallExpression(), false);
|
||||
@@ -229,7 +230,7 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
try {
|
||||
if (myTargetClass.isInterface()) patternMethod.getBody().delete();
|
||||
|
||||
final PsiMethod method = addMethodToClass(myTargetClass, patternMethod);
|
||||
final PsiMethod method = addMethodToClass(myTargetClass, patternMethod, false);
|
||||
myMethod.delete();
|
||||
for (PsiReference reference : docRefs) {
|
||||
reference.bindToElement(method);
|
||||
@@ -354,10 +355,13 @@ public class MoveInstanceMethodProcessor extends BaseRefactoringProcessor{
|
||||
}
|
||||
}
|
||||
|
||||
private static PsiMethod addMethodToClass(final PsiClass aClass, final PsiMethod patternMethod) {
|
||||
private static PsiMethod addMethodToClass(final PsiClass aClass, final PsiMethod patternMethod, boolean canAddOverride) {
|
||||
try {
|
||||
final PsiMethod method = (PsiMethod)aClass.add(patternMethod);
|
||||
ChangeContextUtil.decodeContextInfo(method, null, null);
|
||||
if (canAddOverride && OverrideImplementUtil.isInsertOverride(method, aClass)) {
|
||||
method.getModifierList().addAnnotation(CommonClassNames.JAVA_LANG_OVERRIDE);
|
||||
}
|
||||
return method;
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
|
||||
@@ -119,10 +119,10 @@ public class RefactoringConflictsUtil {
|
||||
conflicts.putValue(targetClass, message);
|
||||
}
|
||||
// check for member accessibility
|
||||
else if (!manager.getResolveHelper().isAccessible(member, modifierListCopy, ref, null, null)) {
|
||||
else if (!manager.getResolveHelper().isAccessible(member, modifierListCopy, ref, targetClass, null)) {
|
||||
String message = RefactoringBundle.message("0.is.1.and.will.not.be.accessible.from.2.in.the.target.class",
|
||||
RefactoringUIUtil.getDescription(member, true),
|
||||
VisibilityUtil.getVisibilityStringToDisplay(member),
|
||||
VisibilityUtil.toPresentableText(VisibilityUtil.getVisibilityModifier(modifierListCopy)),
|
||||
RefactoringUIUtil.getDescription(ConflictsUtil.getContainer(ref), true));
|
||||
message = CommonRefactoringUtil.capitalize(message);
|
||||
conflicts.putValue(member, message);
|
||||
|
||||
@@ -1,91 +1,92 @@
|
||||
/*
|
||||
* Copyright 2000-2011 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.psi;
|
||||
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public interface CommonClassNames {
|
||||
@NonNls String DEFAULT_PACKAGE = "java.lang";
|
||||
|
||||
@NonNls String JAVA_LANG_OBJECT = "java.lang.Object";
|
||||
@NonNls String JAVA_LANG_CLASS = "java.lang.Class";
|
||||
@NonNls String JAVA_LANG_ENUM = "java.lang.Enum";
|
||||
|
||||
@NonNls String JAVA_LANG_THROWABLE = "java.lang.Throwable";
|
||||
@NonNls String JAVA_LANG_EXCEPTION = "java.lang.Exception";
|
||||
@NonNls String JAVA_LANG_ERROR = "java.lang.Error";
|
||||
@NonNls String JAVA_LANG_RUNTIME_EXCEPTION = "java.lang.RuntimeException";
|
||||
@NonNls String JAVA_LANG_AUTO_CLOSEABLE = "java.lang.AutoCloseable";
|
||||
|
||||
@NonNls String JAVA_LANG_ITERABLE = "java.lang.Iterable";
|
||||
@NonNls String JAVA_UTIL_ITERATOR = "java.util.Iterator";
|
||||
|
||||
@NonNls String JAVA_LANG_DEPRECATED = "java.lang.Deprecated";
|
||||
|
||||
@NonNls String JAVA_LANG_ANNOTATION_INHERITED = "java.lang.annotation.Inherited";
|
||||
@NonNls String JAVA_LANG_ANNOTATION_ANNOTATION = "java.lang.annotation.Annotation";
|
||||
|
||||
@NonNls String JAVA_LANG_REFLECT_ARRAY = "java.lang.reflect.Array";
|
||||
|
||||
@NonNls String JAVA_UTIL_ARRAYS = "java.util.Arrays";
|
||||
@NonNls String JAVA_UTIL_COLLECTIONS = "java.util.Collections";
|
||||
@NonNls String JAVA_UTIL_COLLECTION = "java.util.Collection";
|
||||
@NonNls String JAVA_UTIL_MAP = "java.util.Map";
|
||||
@NonNls String JAVA_UTIL_LIST = "java.util.List";
|
||||
@NonNls String JAVA_UTIL_SET = "java.util.Set";
|
||||
@NonNls String JAVA_UTIL_PROPERTIES = "java.util.Properties";
|
||||
@NonNls String JAVA_UTIL_PROPERTY_RESOURCE_BUNDLE = "java.util.PropertyResourceBundle";
|
||||
@NonNls String JAVA_UTIL_DATE = "java.util.Date";
|
||||
@NonNls String JAVA_UTIL_CALENDAR = "java.util.Calendar";
|
||||
@NonNls String JAVA_UTIL_DICTIONARY = "java.util.Dictionary";
|
||||
@NonNls String JAVA_UTIL_COMPARATOR = "java.util.Comparator";
|
||||
|
||||
@NonNls String JAVA_SQL_DATE = "java.sql.Date";
|
||||
|
||||
@NonNls String JAVA_IO_SERIALIZABLE = "java.io.Serializable";
|
||||
@NonNls String JAVA_IO_EXTERNALIZABLE = "java.io.Externalizable";
|
||||
|
||||
@NonNls String JAVA_LANG_STRING = "java.lang.String";
|
||||
@NonNls String JAVA_LANG_STRING_SHORT = "String";
|
||||
@NonNls String JAVA_LANG_NUMBER = "java.lang.Number";
|
||||
@NonNls String JAVA_LANG_BOOLEAN = "java.lang.Boolean";
|
||||
@NonNls String JAVA_LANG_BYTE = "java.lang.Byte";
|
||||
@NonNls String JAVA_LANG_SHORT = "java.lang.Short";
|
||||
@NonNls String JAVA_LANG_INTEGER = "java.lang.Integer";
|
||||
@NonNls String JAVA_LANG_LONG = "java.lang.Long";
|
||||
@NonNls String JAVA_LANG_FLOAT = "java.lang.Float";
|
||||
@NonNls String JAVA_LANG_DOUBLE = "java.lang.Double";
|
||||
@NonNls String JAVA_LANG_CHARACTER = "java.lang.Character";
|
||||
|
||||
@NonNls String JAVA_LANG_STRING_BUFFER = "java.lang.StringBuffer";
|
||||
@NonNls String JAVA_LANG_STRING_BUILDER = "java.lang.StringBuilder";
|
||||
@NonNls String JAVA_LANG_ABSTRACT_STRING_BUILDER = "java.lang.AbstractStringBuilder";
|
||||
|
||||
@NonNls String JAVA_LANG_CLONEABLE = "java.lang.Cloneable";
|
||||
@NonNls String JAVA_LANG_COMPARABLE = "java.lang.Comparable";
|
||||
@NonNls String CLASS_FILE_EXTENSION = ".class";
|
||||
|
||||
@NonNls String JAVA_UTIL_CONCURRENT_FUTURE = "java.util.concurrent.Future";
|
||||
@NonNls String JAVA_UTIL_ARRAY_LIST = "java.util.ArrayList";
|
||||
|
||||
@NonNls String JAVA_LANG_INVOKE_MH_POLYMORPHIC = "java.lang.invoke.MethodHandle.PolymorphicSignature";
|
||||
String TARGET_ANNOTATION_FQ_NAME = "java.lang.annotation.Target";
|
||||
@NonNls String JAVA_LANG_RUNNABLE = "java.lang.Runnable";
|
||||
@NonNls String JAVA_IO_FILE = "java.io.File";
|
||||
}
|
||||
/*
|
||||
* Copyright 2000-2011 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.psi;
|
||||
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public interface CommonClassNames {
|
||||
@NonNls String DEFAULT_PACKAGE = "java.lang";
|
||||
|
||||
@NonNls String JAVA_LANG_OBJECT = "java.lang.Object";
|
||||
@NonNls String JAVA_LANG_CLASS = "java.lang.Class";
|
||||
@NonNls String JAVA_LANG_OVERRIDE = "java.lang.Override";
|
||||
@NonNls String JAVA_LANG_ENUM = "java.lang.Enum";
|
||||
|
||||
@NonNls String JAVA_LANG_THROWABLE = "java.lang.Throwable";
|
||||
@NonNls String JAVA_LANG_EXCEPTION = "java.lang.Exception";
|
||||
@NonNls String JAVA_LANG_ERROR = "java.lang.Error";
|
||||
@NonNls String JAVA_LANG_RUNTIME_EXCEPTION = "java.lang.RuntimeException";
|
||||
@NonNls String JAVA_LANG_AUTO_CLOSEABLE = "java.lang.AutoCloseable";
|
||||
|
||||
@NonNls String JAVA_LANG_ITERABLE = "java.lang.Iterable";
|
||||
@NonNls String JAVA_UTIL_ITERATOR = "java.util.Iterator";
|
||||
|
||||
@NonNls String JAVA_LANG_DEPRECATED = "java.lang.Deprecated";
|
||||
|
||||
@NonNls String JAVA_LANG_ANNOTATION_INHERITED = "java.lang.annotation.Inherited";
|
||||
@NonNls String JAVA_LANG_ANNOTATION_ANNOTATION = "java.lang.annotation.Annotation";
|
||||
|
||||
@NonNls String JAVA_LANG_REFLECT_ARRAY = "java.lang.reflect.Array";
|
||||
|
||||
@NonNls String JAVA_UTIL_ARRAYS = "java.util.Arrays";
|
||||
@NonNls String JAVA_UTIL_COLLECTIONS = "java.util.Collections";
|
||||
@NonNls String JAVA_UTIL_COLLECTION = "java.util.Collection";
|
||||
@NonNls String JAVA_UTIL_MAP = "java.util.Map";
|
||||
@NonNls String JAVA_UTIL_LIST = "java.util.List";
|
||||
@NonNls String JAVA_UTIL_SET = "java.util.Set";
|
||||
@NonNls String JAVA_UTIL_PROPERTIES = "java.util.Properties";
|
||||
@NonNls String JAVA_UTIL_PROPERTY_RESOURCE_BUNDLE = "java.util.PropertyResourceBundle";
|
||||
@NonNls String JAVA_UTIL_DATE = "java.util.Date";
|
||||
@NonNls String JAVA_UTIL_CALENDAR = "java.util.Calendar";
|
||||
@NonNls String JAVA_UTIL_DICTIONARY = "java.util.Dictionary";
|
||||
@NonNls String JAVA_UTIL_COMPARATOR = "java.util.Comparator";
|
||||
|
||||
@NonNls String JAVA_SQL_DATE = "java.sql.Date";
|
||||
|
||||
@NonNls String JAVA_IO_SERIALIZABLE = "java.io.Serializable";
|
||||
@NonNls String JAVA_IO_EXTERNALIZABLE = "java.io.Externalizable";
|
||||
|
||||
@NonNls String JAVA_LANG_STRING = "java.lang.String";
|
||||
@NonNls String JAVA_LANG_STRING_SHORT = "String";
|
||||
@NonNls String JAVA_LANG_NUMBER = "java.lang.Number";
|
||||
@NonNls String JAVA_LANG_BOOLEAN = "java.lang.Boolean";
|
||||
@NonNls String JAVA_LANG_BYTE = "java.lang.Byte";
|
||||
@NonNls String JAVA_LANG_SHORT = "java.lang.Short";
|
||||
@NonNls String JAVA_LANG_INTEGER = "java.lang.Integer";
|
||||
@NonNls String JAVA_LANG_LONG = "java.lang.Long";
|
||||
@NonNls String JAVA_LANG_FLOAT = "java.lang.Float";
|
||||
@NonNls String JAVA_LANG_DOUBLE = "java.lang.Double";
|
||||
@NonNls String JAVA_LANG_CHARACTER = "java.lang.Character";
|
||||
|
||||
@NonNls String JAVA_LANG_STRING_BUFFER = "java.lang.StringBuffer";
|
||||
@NonNls String JAVA_LANG_STRING_BUILDER = "java.lang.StringBuilder";
|
||||
@NonNls String JAVA_LANG_ABSTRACT_STRING_BUILDER = "java.lang.AbstractStringBuilder";
|
||||
|
||||
@NonNls String JAVA_LANG_CLONEABLE = "java.lang.Cloneable";
|
||||
@NonNls String JAVA_LANG_COMPARABLE = "java.lang.Comparable";
|
||||
@NonNls String CLASS_FILE_EXTENSION = ".class";
|
||||
|
||||
@NonNls String JAVA_UTIL_CONCURRENT_FUTURE = "java.util.concurrent.Future";
|
||||
@NonNls String JAVA_UTIL_ARRAY_LIST = "java.util.ArrayList";
|
||||
|
||||
@NonNls String JAVA_LANG_INVOKE_MH_POLYMORPHIC = "java.lang.invoke.MethodHandle.PolymorphicSignature";
|
||||
String TARGET_ANNOTATION_FQ_NAME = "java.lang.annotation.Target";
|
||||
@NonNls String JAVA_LANG_RUNNABLE = "java.lang.Runnable";
|
||||
@NonNls String JAVA_IO_FILE = "java.io.File";
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ interface Foreign {
|
||||
}
|
||||
|
||||
class ForeignImpl implements Foreign {
|
||||
@Override
|
||||
public void foo(Test1 test1) {
|
||||
test1.field++;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user