Community
Participate
Working Groups
I'm using maintenance build Version: 3.1.1 Build id: M20050811-0400, during refactoring (rename) of method in interface, I have some times such errors in the log, and refactoring fails: java.lang.reflect.InvocationTargetException at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:327) at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2. run(RefactoringWizardDialog2.java:293) at org.eclipse.ltk.ui.refactoring.RefactoringWizard. createChange(RefactoringWizard.java:573) at org.eclipse.ltk.ui.refactoring.RefactoringWizard. computeUserInputSuccessorPage(RefactoringWizard.java:416) at org.eclipse.ltk.ui.refactoring.UserInputWizardPage. computeSuccessorPage(UserInputWizardPage.java:74) at org.eclipse.ltk.ui.refactoring.UserInputWizardPage. getNextPage(UserInputWizardPage.java:114) at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2. previewPressed(RefactoringWizardDialog2.java:447) at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2. access$3(RefactoringWizardDialog2.java:445) at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2$1. widgetSelected(RefactoringWizardDialog2.java:584) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java: 90) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:843) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3080) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2713) at org.eclipse.jface.window.Window.runEventLoop(Window.java:809) at org.eclipse.jface.window.Window.open(Window.java:787) at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation$1. run(RefactoringWizardOpenOperation.java:125) at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69) at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation. run(RefactoringWizardOpenOperation.java:138) at org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter. activate(RefactoringStarter.java:40) at org.eclipse.jdt.internal.ui.refactoring.UserInterfaceStarter. activate(UserInterfaceStarter.java:56) at org.eclipse.jdt.internal.ui.refactoring.reorg. RenameUserInterfaceStarter.activate(RenameUserInterfaceStarter.java:113) at org.eclipse.jdt.internal.ui.refactoring.reorg. RenameMethodUserInterfaceStarter.activate(RenameMethodUserInterfaceStarter.java: 68) at org.eclipse.jdt.ui.refactoring.RenameSupport.openDialog(RenameSupport. java:114) at org.eclipse.jdt.internal.corext.refactoring. RefactoringExecutionStarter.startRenameRefactoring(RefactoringExecutionStarter. java:327) at org.eclipse.jdt.internal.ui.refactoring.actions. RenameJavaElementAction.run(RenameJavaElementAction.java:171) at org.eclipse.jdt.internal.ui.refactoring.actions. RenameJavaElementAction.run(RenameJavaElementAction.java:131) at org.eclipse.jdt.ui.actions.RenameAction.run(RenameAction.java:117) at org.eclipse.jdt.ui.actions.SelectionDispatchAction. dispatchRun(SelectionDispatchAction.java:226) at org.eclipse.jdt.ui.actions.SelectionDispatchAction. run(SelectionDispatchAction.java:198) at org.eclipse.jface.action.Action.runWithEvent(Action.java:996) at org.eclipse.jface.action.ActionContributionItem. handleWidgetSelection(ActionContributionItem.java:538) at org.eclipse.jface.action.ActionContributionItem. access$2(ActionContributionItem.java:488) at org.eclipse.jface.action.ActionContributionItem$5. handleEvent(ActionContributionItem.java:400) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:843) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3080) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2713) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1699) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1663) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java: 367) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143) at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:103) at org.eclipse.core.internal.runtime.PlatformActivator$1. run(PlatformActivator.java:226) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter. java:376) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter. java:163) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl. java:39) at sun.reflect.DelegatingMethodAccessorImpl. invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at org.eclipse.core.launcher.Main.invokeFramework(Main.java:334) at org.eclipse.core.launcher.Main.basicRun(Main.java:278) at org.eclipse.core.launcher.Main.run(Main.java:973) at org.eclipse.core.launcher.Main.main(Main.java:948) Caused by: java.lang.ArrayIndexOutOfBoundsException: 1 at org.eclipse.jdt.internal.core.search.matching.MethodLocator. matchOverriddenMethod(MethodLocator.java:290) at org.eclipse.jdt.internal.core.search.matching.MethodLocator. newDeclarationMatch(MethodLocator.java:471) at org.eclipse.jdt.internal.core.search.matching.MatchLocator. reportMatching(MatchLocator.java:1820) at org.eclipse.jdt.internal.core.search.matching.MatchLocator. reportMatching(MatchLocator.java:2209) at org.eclipse.jdt.internal.core.search.matching.MatchLocator. reportMatching(MatchLocator.java:2010) at org.eclipse.jdt.internal.core.search.matching.MatchLocator. process(MatchLocator.java:1458) at org.eclipse.jdt.internal.core.search.matching.MatchLocator. locateMatches(MatchLocator.java:945) at org.eclipse.jdt.internal.core.search.matching.MatchLocator. locateMatches(MatchLocator.java:986) at org.eclipse.jdt.internal.core.search.matching.MatchLocator. locateMatches(MatchLocator.java:1088) at org.eclipse.jdt.internal.core.search.JavaSearchParticipant. locateMatches(JavaSearchParticipant.java:94) at org.eclipse.jdt.internal.core.search.BasicSearchEngine. findMatches(BasicSearchEngine.java:208) at org.eclipse.jdt.internal.core.search.BasicSearchEngine. search(BasicSearchEngine.java:424) at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:532) at org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine2. searchPattern(RefactoringSearchEngine2.java:471) at org.eclipse.jdt.internal.corext.refactoring.rename.RippleMethodFinder2. findAllDeclarations(RippleMethodFinder2.java:290) at org.eclipse.jdt.internal.corext.refactoring.rename.RippleMethodFinder2. getAllRippleMethods(RippleMethodFinder2.java:139) at org.eclipse.jdt.internal.corext.refactoring.rename.RippleMethodFinder2. getRelatedMethods(RippleMethodFinder2.java:130) at org.eclipse.jdt.internal.corext.refactoring.rename. RenameMethodProcessor.initializeMethodsToRename(RenameMethodProcessor.java:157) at org.eclipse.jdt.internal.corext.refactoring.rename. RenameMethodProcessor.checkFinalConditions(RenameMethodProcessor.java:252) at org.eclipse.jdt.internal.corext.refactoring.rename. RenameVirtualMethodProcessor.checkFinalConditions(RenameVirtualMethodProcessor. java:111) at org.eclipse.ltk.core.refactoring.participants. ProcessorBasedRefactoring.checkFinalConditions(ProcessorBasedRefactoring.java: 169) at org.eclipse.ltk.core.refactoring.CheckConditionsOperation. run(CheckConditionsOperation.java:84) at org.eclipse.ltk.core.refactoring.CreateChangeOperation. run(CreateChangeOperation.java:114) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1719) at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter. run(WorkbenchRunnableAdapter.java:86) at org.eclipse.jface.operation.ModalContext$ModalContextThread. run(ModalContext.java:113) ---------------------------------------------------------------------- Please note: Caused by: java.lang.ArrayIndexOutOfBoundsException: 1 at org.eclipse.jdt.internal.core.search.matching.MethodLocator. matchOverriddenMethod(MethodLocator.java:290) In this class, there is a bug on lines 290/292/294 (througth copy and paste of code - note the wrong usage of "i" counter instead of "j" in the second "for" loop): for (int i = 0; i<iLength; i++) { if (interfaces[i].isParameterizedType()) { MethodBinding[] methods = interfaces[i].getMethods(this. pattern.selector); int length = methods.length; for (int j = 0; j<length; j++) { if (methods[i].areParametersEqual(method)) { if (matchMethod == null) { if (methodParametersEqualsPattern(methods[i ].original())) return true; } else { if (methodsHaveSameParameters(methods[i]. original(), matchMethod)) return true; } } } } if (matchOverriddenMethod(interfaces[i], method, matchMethod)) { return true; } }
Thanks for pointing on this nasty copy/paste error.
Thanks for pointing on this nasty copy/paste error. Philippe, may you set the target? Thx
Fixed and released in HEAD stream
+1 for 3.1.1
Fixed and released in R3_1_maintenance stream
Verified using I20050920-0010 for 3.2M2. Verified that the code is fixed.
A test case that fails with 3.1 and works with 3.1.1: I.java interface I<U> extends J<U>, K<U> { void put(U u); } interface J<V> { void put(V v); V get(); } interface K<W> { void put(W w); } Rename I#put to I#reput via refactoring (exception in 3.1, works in 3.1.1).
Verified for 3.1.1 using build M20050923-1430.