diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/Checks.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/Checks.java index 91a6649ff63..7b034b249a7 100644 --- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/Checks.java +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/Checks.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2021 IBM Corporation and others. + * Copyright (c) 2000, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -36,7 +36,9 @@ import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; import org.eclipse.ltk.core.refactoring.participants.ResourceChangeChecker; +import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.ICompilationUnit; +import org.eclipse.jdt.core.IImportDeclaration; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaModelMarker; import org.eclipse.jdt.core.IJavaProject; @@ -50,13 +52,16 @@ import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.Signature; import org.eclipse.jdt.core.dom.ASTNode; +import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.Annotation; import org.eclipse.jdt.core.dom.AnonymousClassDeclaration; +import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.Expression; import org.eclipse.jdt.core.dom.IBinding; import org.eclipse.jdt.core.dom.IMethodBinding; import org.eclipse.jdt.core.dom.ITypeBinding; import org.eclipse.jdt.core.dom.IVariableBinding; +import org.eclipse.jdt.core.dom.ImportDeclaration; import org.eclipse.jdt.core.dom.Name; import org.eclipse.jdt.core.dom.SwitchCase; import org.eclipse.jdt.core.dom.VariableDeclaration; @@ -67,6 +72,7 @@ import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels; import org.eclipse.jdt.internal.corext.dom.ASTNodes; import org.eclipse.jdt.internal.corext.dom.Bindings; +import org.eclipse.jdt.internal.corext.dom.IASTSharedValues; import org.eclipse.jdt.internal.corext.refactoring.base.RefactoringStatusCodes; import org.eclipse.jdt.internal.corext.refactoring.util.JavaElementUtil; import org.eclipse.jdt.internal.corext.refactoring.util.JavaStatusContext; @@ -908,4 +914,46 @@ public static boolean isDeclaredIn(VariableDeclaration tempDeclaration, Class 0 && newName.equals(fragments[fragments.length - 1])) { + cu= convertICUtoCU(method.getCompilationUnit()); + if (cu != null) { + List importList= cu.imports(); + for (ImportDeclaration importListDecl : importList) { + if (importListDecl.getName().getFullyQualifiedName().equals(importName)) { + IBinding binding= importListDecl.resolveBinding(); + if (binding instanceof IMethodBinding) { + return importDecl; + } + } + } + } + return null; + } + } + } + } catch (JavaModelException e) { + // do nothing + } + } + return null; + } } diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java index d1200148d0c..f0192bf1de8 100644 --- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java @@ -1809,6 +1809,10 @@ public final class RefactoringCoreMessages extends NLS { public static String RenameMethodRefactoring_not_in_model; + public static String RenameMethodRefactoring_overrides_static_name; + + public static String RenameMethodRefactoring_overrides_static_name2; + public static String RenameMethodRefactoring_same_name; public static String RenameMethodRefactoring_same_name2; diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties index 41b2fcb34bf..da30c75eba0 100644 --- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties +++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/refactoring.properties @@ -473,7 +473,9 @@ RenameMethodRefactoring_no_native=Renaming native methods will cause an unsatisf RenameMethodRefactoring_no_native_1=Related method ''{0}'' (declared in ''{1}'') is native. Renaming will cause an UnsatisfiedLinkError on runtime. RenameMethodRefactoring_no_read_only=Related method ''{0}'' (declared in ''{1}'') is read-only. Refactoring cannot be performed. RenameMethodRefactoring_not_in_model=Related method ''{0}'' (declared in ''{1}'') does not exist in the model. -RenameMethodRefactoring_same_name=This name already exists. +RenameMethodRefactoring_overrides_static_name=This name collides with a static import name. +RenameMethodRefactoring_overrides_static_name2=The static import ''{0}'' in type ''{1}'' already has the assigned name. +enameMethodRefactoring_same_name=This name already exists. RenameMethodRefactoring_same_name2=The method ''{0}'' in type ''{1}'' already has the assigned name. RenameMethodRefactoring_update_occurrence=Update method reference RenameMethodRefactoring_update_declaration=Update method declaration diff --git a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java index 11d8dfc503f..d0dd903cc25 100644 --- a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java +++ b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/corext/refactoring/rename/RenameMethodProcessor.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2023 IBM Corporation and others. + * Copyright (c) 2000, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -232,6 +232,13 @@ public final RefactoringStatus checkNewElementName(String newName) { ? Messages.format(RefactoringCoreMessages.RenameMethodRefactoring_same_name2, new String[] { BasicElementLabels.getJavaElementName(newName), getDeclaringTypeLabel() } ) : RefactoringCoreMessages.RenameMethodRefactoring_same_name, JavaStatusContext.create(fMethod)); + + if (Checks.findMatchingStaticMethodImport(fMethod, newName) != null) { + status.addFatalError(fIsComposite + ? Messages.format(RefactoringCoreMessages.RenameMethodRefactoring_overrides_static_name2, new String[] { BasicElementLabels.getJavaElementName(newName), getDeclaringTypeLabel() } ) + : RefactoringCoreMessages.RenameMethodRefactoring_overrides_static_name, + JavaStatusContext.create(Checks.findMatchingStaticMethodImport(fMethod, newName))); + } return status; } private String getDeclaringTypeLabel() { diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testIssue1361/in/A.java b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testIssue1361/in/A.java new file mode 100644 index 00000000000..f962bff3feb --- /dev/null +++ b/org.eclipse.jdt.ui.tests.refactoring/resources/RenamePrivateMethod/testIssue1361/in/A.java @@ -0,0 +1,9 @@ +package p; + +import static java.lang.String.valueOf; + +public class A { + private String foo(int x) { + return valueOf(x); + } +} \ No newline at end of file diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePrivateMethodTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePrivateMethodTests.java index fad4cfc5a7a..af72be34a06 100644 --- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePrivateMethodTests.java +++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/RenamePrivateMethodTests.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2020 IBM Corporation and others. + * Copyright (c) 2000, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -131,6 +131,11 @@ public void testFail5() throws Exception{ helper1(); } + @Test + public void testIssue1361() throws Exception{ + helper1_0("foo", "valueOf", new String[0]); + } + @Test public void test0() throws Exception{ helper2();