Bug 114539 - [search] Internal error when refactoring code with errors
Summary: [search] Internal error when refactoring code with errors
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Linux-GTK
: P2 normal (vote)
Target Milestone: 3.1.2   Edit
Assignee: Frederic Fusier CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-11-01 10:31 EST by Tom Hofmann CLA
Modified: 2006-01-10 06:58 EST (History)
1 user (show)

See Also:


Attachments
Patch to fix this issue (2.98 KB, patch)
2005-11-01 12:12 EST, Frederic Fusier CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Tom Hofmann CLA 2005-11-01 10:31:10 EST
3.2 M3 test pass

- have the following two CUs in the 'org.foo' package:

----- Foo.java -----
public class Foo {
	int bar= Bar.FOO;
}
----- Bar.java -----
class Bar {
	private static final int FOO= 0;
}
--------------------

- note the compile error in Foo due to FOO being private
- in Bar.java, select FOO and choose Refactor>Move, target to type 'Foo'

> get this:

!ENTRY org.eclipse.ltk.ui.refactoring 4 10000 2005-11-01 16:28:48.229
!MESSAGE Internal Error
!STACK 0
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.jdt.internal.ui.refactoring.MoveMembersWizard$MoveMembersInputPage.getNextPage(MoveMembersWizard.java:201)
	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:587)
	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:1056)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3061)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2743)
	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:131)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at
org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:144)
	at
org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter.activate(RefactoringStarter.java:40)
	at
org.eclipse.jdt.internal.corext.refactoring.RefactoringExecutionStarter.startMoveStaticMembersRefactoring(RefactoringExecutionStarter.java:300)
	at
org.eclipse.jdt.internal.ui.refactoring.actions.MoveStaticMembersAction.run(MoveStaticMembersAction.java:110)
	at org.eclipse.jdt.ui.actions.MoveAction.tryMoveStaticMembers(MoveAction.java:164)
	at org.eclipse.jdt.ui.actions.MoveAction.run(MoveAction.java:142)
	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.ui.commands.ActionHandler.execute(ActionHandler.java:182)
	at
org.eclipse.ui.internal.handlers.LegacyHandlerWrapper.execute(LegacyHandlerWrapper.java:108)
	at org.eclipse.core.commands.Command.execute(Command.java:287)
	at
org.eclipse.core.commands.ParameterizedCommand.execute(ParameterizedCommand.java:401)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:459)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:781)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:828)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:550)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:493)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:117)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1247)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1055)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1080)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1065)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1092)
	at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:646)
	at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:1982)
	at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:566)
	at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1401)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3693)
	at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
	at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:4955)
	at org.eclipse.swt.widgets.Display.eventProc(Display.java:1062)
	at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method)
	at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:1308)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2741)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1774)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1738)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:376)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:106)
	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:165)
	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:338)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:282)
	at org.eclipse.core.launcher.Main.run(Main.java:977)
	at org.eclipse.core.launcher.Main.main(Main.java:952)
Caused by: java.lang.NullPointerException
	at
org.eclipse.jdt.internal.core.search.matching.FieldLocator.matchReportReference(FieldLocator.java:199)
	at
org.eclipse.jdt.internal.core.search.matching.MatchLocator.reportMatching(MatchLocator.java:2089)
	at
org.eclipse.jdt.internal.core.search.matching.MatchLocator.reportMatching(MatchLocator.java:2212)
	at
org.eclipse.jdt.internal.core.search.matching.MatchLocator.reportMatching(MatchLocator.java:2023)
	at
org.eclipse.jdt.internal.core.search.matching.MatchLocator.process(MatchLocator.java:1471)
	at
org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:958)
	at
org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:999)
	at
org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1117)
	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:464)
	at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:532)
	at
org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine2.searchPattern(RefactoringSearchEngine2.java:476)
	at
org.eclipse.jdt.internal.corext.refactoring.structure.MemberVisibilityAdjustor.adjustVisibility(MemberVisibilityAdjustor.java:783)
	at
org.eclipse.jdt.internal.corext.refactoring.structure.MoveStaticMembersProcessor.createChange(MoveStaticMembersProcessor.java:652)
	at
org.eclipse.jdt.internal.corext.refactoring.structure.MoveStaticMembersProcessor.checkFinalConditions(MoveStaticMembersProcessor.java:320)
	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:117)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1705)
	at
org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:86)
	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)
Comment 1 Dirk Baeumer CLA 2005-11-01 11:07:07 EST
Moving to Core. The NPE happens in the search engine (match locator).
Comment 2 Frederic Fusier CLA 2005-11-01 11:59:55 EST
Unfortunately this NPE may happen in 3.1 as it has been introduced while
implementing search for generics :-(

Surely a good candidate for 3.1.2...
Philippe, do you agree?
Comment 3 Frederic Fusier CLA 2005-11-01 12:12:44 EST
Created attachment 29079 [details]
Patch to fix this issue
Comment 4 Frederic Fusier CLA 2005-11-04 10:20:40 EST
Fixed and released in HEAD.

Setting target to 3.2 M4 waiting for acknowledgement to report it in
R3_1_maintenance stream.
Comment 5 Philipe Mulet CLA 2005-11-18 02:54:50 EST
+1 for 3.1.2
Comment 6 Frederic Fusier CLA 2005-11-23 12:49:26 EST
Released in R3_1_maintenance stream.
Comment 7 Olivier Thomann CLA 2005-12-13 10:30:12 EST
The NPE doesn't happen anymore, but the resulting cu looks wrong:

package org.foo;
public class Foo {
	int bar= Bar.FOO;
	private static final int FOO= 0;
}

Because FOO has been moved to the Foo class, Bar.FOO is reported as an error.

Verified for 3.2M4 in I20051212-2000 because the NPE doesn't occur anymore.
Open bug 120583 for the wrong CU contents.
Comment 8 Maxime Daniel CLA 2006-01-10 05:58:05 EST
Verified for 3.1.2 using build M20060109-1200.