vazexqi / CodingSpectator

Watches and analyzes code edits in the Eclipse IDE non-invasively
http://codingspectator.cs.illinois.edu
Other
20 stars 14 forks source link

Capture canceled and performed events of move refactorings #107

Closed reprogrammer closed 13 years ago

reprogrammer commented 13 years ago

The move refactoring is similar to rename as it is also processor based. The following three classes extend org.eclipse.ltk.core.refactoring.participants.MoveProcessor

  1. org.eclipse.jdt.internal.corext.refactoring.reorg.JavaMoveProcessor
  2. org.eclipse.jdt.internal.corext.refactoring.structure.MoveInstanceMethodProcessor
  3. org.eclipse.jdt.internal.corext.refactoring.structure.MoveStaticMembersProcessor
  4. org.eclipse.ltk.internal.core.refactoring.resource.MoveResourcesProcessor

The class org.eclipse.ltk.internal.core.refactoring.resource.MoveResourcesProcessor is not in JDT. So, we won't instrument it.

reprogrammer commented 13 years ago

We started by instrumenting MoveStaticMembersProcessor in 64369f03dbdaf78c02ab7e1f9a7f806d1b42fb3b. Our instrumentation successfully captures the cancellation of this refactoring. But, it throws the following exception when a move refactoring on a static field is performed.

java.lang.NullPointerException
    at org.eclipse.jdt.internal.corext.refactoring.structure.MoveStaticMembersProcessor.getQualifiedTypeLabel(MoveStaticMembersProcessor.java:636)
    at org.eclipse.jdt.internal.corext.refactoring.structure.MoveStaticMembersProcessor.createDescriptor(MoveStaticMembersProcessor.java:849)
    at org.eclipse.jdt.internal.corext.refactoring.structure.MoveStaticMembersProcessor.createRefactoringDescriptor(MoveStaticMembersProcessor.java:1158)
    at org.eclipse.jdt.internal.corext.refactoring.structure.WatchedMoveProcessor.getSimpleRefactoringDescriptor(WatchedMoveProcessor.java:22)
    at org.eclipse.ltk.core.refactoring.participants.MoveRefactoring.getSimpleRefactoringDescriptor(MoveRefactoring.java:70)
    at org.eclipse.ltk.ui.refactoring.Logger.logRefactoringEvent(Logger.java:49)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizard.performCancel(RefactoringWizard.java:653)
    at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.cancelPressed(RefactoringWizardDialog2.java:446)
    at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:474)
    at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
    at org.eclipse.jface.window.Window.open(Window.java:801)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation$1.run(RefactoringWizardOpenOperation.java:180)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:192)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:115)
    at org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter.activate(RefactoringStarter.java:38)
    at org.eclipse.jdt.internal.corext.refactoring.RefactoringExecutionStarter.startMoveStaticMembersRefactoring(RefactoringExecutionStarter.java:412)
    at org.eclipse.jdt.internal.ui.refactoring.actions.MoveStaticMembersAction.run(MoveStaticMembersAction.java:108)
    at org.eclipse.jdt.ui.actions.MoveAction.tryMoveStaticMembers(MoveAction.java:180)
    at org.eclipse.jdt.ui.actions.MoveAction.run(MoveAction.java:158)
    at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:278)
    at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:250)
    at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    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:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
reprogrammer commented 13 years ago

The commit 78e40da9d60887517a550099e048a3bd9882a6a1 throws the following exception when canceling a move static member refactoring. This exception occurs when the user provide an invalid destination type. This is because we have to set fDestinationType in the refactoring descriptor to a non-null value.

java.lang.reflect.InvocationTargetException
    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:597)
    at org.eclipse.jdt.internal.corext.refactoring.structure.WatchedMoveProcessor.getArguments(WatchedMoveProcessor.java:36)
    at org.eclipse.jdt.internal.corext.refactoring.structure.WatchedMoveProcessor.getSimpleRefactoringDescriptor(WatchedMoveProcessor.java:23)
    at org.eclipse.ltk.core.refactoring.participants.MoveRefactoring.getSimpleRefactoringDescriptor(MoveRefactoring.java:70)
    at org.eclipse.ltk.ui.refactoring.Logger.logRefactoringEvent(Logger.java:49)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizard.performCancel(RefactoringWizard.java:651)
    at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.cancelPressed(RefactoringWizardDialog2.java:446)
    at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:474)
    at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
    at org.eclipse.jface.window.Window.open(Window.java:801)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation$1.run(RefactoringWizardOpenOperation.java:180)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:192)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:115)
    at org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter.activate(RefactoringStarter.java:38)
    at org.eclipse.jdt.internal.corext.refactoring.RefactoringExecutionStarter.startMoveStaticMembersRefactoring(RefactoringExecutionStarter.java:412)
    at org.eclipse.jdt.internal.ui.refactoring.actions.MoveStaticMembersAction.run(MoveStaticMembersAction.java:108)
    at org.eclipse.jdt.ui.actions.MoveAction.tryMoveStaticMembers(MoveAction.java:180)
    at org.eclipse.jdt.ui.actions.MoveAction.run(MoveAction.java:158)
    at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:278)
    at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:250)
    at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    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:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Caused by: java.lang.RuntimeException: Validation returns a fatal error status
    at org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor.populateArgumentMap(JavaRefactoringDescriptor.java:334)
    at org.eclipse.jdt.core.refactoring.descriptors.MoveStaticMembersDescriptor.populateArgumentMap(MoveStaticMembersDescriptor.java:105)
    at org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor.getArguments(JavaRefactoringDescriptor.java:323)
    ... 59 more
Caused by: org.eclipse.core.runtime.CoreException: Destination type has not been set.
    ... 62 more
Root exception:
java.lang.RuntimeException: Validation returns a fatal error status
    at org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor.populateArgumentMap(JavaRefactoringDescriptor.java:334)
    at org.eclipse.jdt.core.refactoring.descriptors.MoveStaticMembersDescriptor.populateArgumentMap(MoveStaticMembersDescriptor.java:105)
    at org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor.getArguments(JavaRefactoringDescriptor.java:323)
    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:597)
    at org.eclipse.jdt.internal.corext.refactoring.structure.WatchedMoveProcessor.getArguments(WatchedMoveProcessor.java:36)
    at org.eclipse.jdt.internal.corext.refactoring.structure.WatchedMoveProcessor.getSimpleRefactoringDescriptor(WatchedMoveProcessor.java:23)
    at org.eclipse.ltk.core.refactoring.participants.MoveRefactoring.getSimpleRefactoringDescriptor(MoveRefactoring.java:70)
    at org.eclipse.ltk.ui.refactoring.Logger.logRefactoringEvent(Logger.java:49)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizard.performCancel(RefactoringWizard.java:651)
    at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.cancelPressed(RefactoringWizardDialog2.java:446)
    at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:474)
    at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
    at org.eclipse.jface.window.Window.open(Window.java:801)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation$1.run(RefactoringWizardOpenOperation.java:180)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:192)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:115)
    at org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter.activate(RefactoringStarter.java:38)
    at org.eclipse.jdt.internal.corext.refactoring.RefactoringExecutionStarter.startMoveStaticMembersRefactoring(RefactoringExecutionStarter.java:412)
    at org.eclipse.jdt.internal.ui.refactoring.actions.MoveStaticMembersAction.run(MoveStaticMembersAction.java:108)
    at org.eclipse.jdt.ui.actions.MoveAction.tryMoveStaticMembers(MoveAction.java:180)
    at org.eclipse.jdt.ui.actions.MoveAction.run(MoveAction.java:158)
    at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:278)
    at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:250)
    at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    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:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1383)
Caused by: org.eclipse.core.runtime.CoreException: Destination type has not been set.
    ... 62 more

!ENTRY org.eclipse.ui 4 0 2010-11-08 18:38:04.850
!MESSAGE Unhandled event loop exception
!STACK 0
java.lang.IllegalArgumentException: The map does not contain the attribute 'input'
    at org.eclipse.jdt.internal.core.refactoring.descriptors.JavaRefactoringDescriptorUtil.getString(JavaRefactoringDescriptorUtil.java:182)
    at org.eclipse.jdt.internal.core.refactoring.descriptors.JavaRefactoringDescriptorUtil.getJavaElement(JavaRefactoringDescriptorUtil.java:321)
    at org.eclipse.jdt.internal.core.refactoring.descriptors.JavaRefactoringDescriptorUtil.getJavaElement(JavaRefactoringDescriptorUtil.java:305)
    at org.eclipse.jdt.core.refactoring.descriptors.MoveStaticMembersDescriptor.(MoveStaticMembersDescriptor.java:95)
    at org.eclipse.jdt.internal.core.refactoring.descriptors.RefactoringSignatureDescriptorFactory.createMoveStaticMembersDescriptor(RefactoringSignatureDescriptorFactory.java:234)
    at org.eclipse.jdt.internal.corext.refactoring.structure.WatchedMoveProcessor.getSimpleRefactoringDescriptor(WatchedMoveProcessor.java:26)
    at org.eclipse.ltk.core.refactoring.participants.MoveRefactoring.getSimpleRefactoringDescriptor(MoveRefactoring.java:70)
    at org.eclipse.ltk.ui.refactoring.Logger.logRefactoringEvent(Logger.java:49)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizard.performCancel(RefactoringWizard.java:651)
    at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.cancelPressed(RefactoringWizardDialog2.java:446)
    at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:474)
    at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
    at org.eclipse.jface.window.Window.open(Window.java:801)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation$1.run(RefactoringWizardOpenOperation.java:180)
    at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:192)
    at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:115)
    at org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter.activate(RefactoringStarter.java:38)
    at org.eclipse.jdt.internal.corext.refactoring.RefactoringExecutionStarter.startMoveStaticMembersRefactoring(RefactoringExecutionStarter.java:412)
    at org.eclipse.jdt.internal.ui.refactoring.actions.MoveStaticMembersAction.run(MoveStaticMembersAction.java:108)
    at org.eclipse.jdt.ui.actions.MoveAction.tryMoveStaticMembers(MoveAction.java:180)
    at org.eclipse.jdt.ui.actions.MoveAction.run(MoveAction.java:158)
    at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:278)
    at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:250)
    at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
    at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
    at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3540)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3161)
    at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
    at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
    at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
    at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    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:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1383)

The above exception is fixed in cd1cc08d7ce8fa7800f6a5fcd3edc9921925ed11.

reprogrammer commented 13 years ago

We are not capturing the move refactorings performed via drag and drop in the outline view. Such moves are textual, i.e. if they cause any errors they'll still be performed. However, they are logged by the refactoring history service of Eclipse like other refactorings. Since these textual moves always get performed, there's no way to cancel them. Therefore, Eclipse already captures them but an undo deletes it from refactoring history. However, codingtracker records all refactorings even though they get undone.

reprogrammer commented 13 years ago

We captured the move instance method refactoring in 1443c23f3239a25a790f615a8c341aa5257c68f2.

reprogrammer commented 13 years ago

We instrumented JavaMoveProcessor in 54f7e6c7ec44ae91de8c16112a53c4e53b8a66f3

Limitations:

reprogrammer commented 13 years ago

We factored out move and rename processors to reuse WatchedProcessor in d8573674fbf14d01d7835bcfdbcadcab2b82d736.

vazexqi commented 13 years ago

Resolved in a027b12dc1ac4d967401b6f28492cfce17327091