Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 320753 - [refactoring] [plan] NPE when performing pull out refactoring
Summary: [refactoring] [plan] NPE when performing pull out refactoring
Status: RESOLVED FIXED
Alias: None
Product: AJDT
Classification: Tools
Component: Core (show other bugs)
Version: 2.1.0   Edit
Hardware: Macintosh Mac OS X - Carbon (unsup.)
: P3 minor (vote)
Target Milestone: 2.1.1   Edit
Assignee: AJDT-inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2010-07-23 12:41 EDT by Andrew Eisenberg CLA
Modified: 2012-04-03 14:26 EDT (History)
0 users

See Also:


Attachments
Patch with a fix (5.04 KB, patch)
2010-07-23 20:18 EDT, Kris De Volder CLA
andrew.eisenberg: iplog+
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Eisenberg CLA 2010-07-23 12:41:49 EDT
I got an NPE when doing the following.  Here is the class:

public class Clazz {
	int x;
	int y;
	int z;
	
}

In an editor, select all 3 fields (the entire lines and including the whitespace after) and perform Pull-out refactoring from the context menu.  I get the following stack Trace (selecting less and the exception will not occur):

java.lang.reflect.InvocationTargetException
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421)
at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:507)
at org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:275)
at org.eclipse.ui.internal.progress.ProgressManager$5.run(ProgressManager.java:960)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:995)
at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:970)
at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.checkInitialConditions(RefactoringWizardOpenOperation.java:205)
at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.access$0(RefactoringWizardOpenOperation.java:200)
at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation$1.run(RefactoringWizardOpenOperation.java:163)
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.ajdt.internal.ui.refactoring.pullout.PullOutRefactoringAction.run(PullOutRefactoringAction.java:118)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoringAction.run(PullOutRefactoringAction.java:112)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)
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:1660)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1684)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1669)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1412)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3644)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3227)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
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:592)
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.AssertionFailedException: assertion failed:
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110)
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring.isInTopLevelType(PullOutRefactoring.java:910)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring.checkInitialConditions(PullOutRefactoring.java:705)
at org.eclipse.ltk.core.refactoring.CheckConditionsOperation.run(CheckConditionsOperation.java:83)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Root exception:
org.eclipse.core.runtime.AssertionFailedException: assertion failed:
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110)
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring.isInTopLevelType(PullOutRefactoring.java:910)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring.checkInitialConditions(PullOutRefactoring.java:705)
at org.eclipse.ltk.core.refactoring.CheckConditionsOperation.run(CheckConditionsOperation.java:83)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Comment 1 Andrew Eisenberg CLA 2010-07-23 12:55:53 EDT
Another stack trace, happening when I select exactly the 3 fields and go through the steps to pull out:



java.lang.reflect.InvocationTargetException
at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421)
at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.run(RefactoringWizardDialog2.java:330)
at org.eclipse.ltk.ui.refactoring.RefactoringWizard.internalPerformFinish(RefactoringWizard.java:573)
at org.eclipse.ltk.ui.refactoring.UserInputWizardPage.performFinish(UserInputWizardPage.java:153)
at org.eclipse.ltk.ui.refactoring.RefactoringWizard.performFinish(RefactoringWizard.java:646)
at org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.okPressed(RefactoringWizardDialog2.java:454)
at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:472)
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:1660)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1684)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1669)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1412)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3644)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3227)
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.ajdt.internal.ui.refactoring.pullout.PullOutRefactoringAction.run(PullOutRefactoringAction.java:118)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoringAction.run(PullOutRefactoringAction.java:112)
at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:251)
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:1660)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1684)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1669)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1412)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3644)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3227)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2629)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2593)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2427)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:670)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:663)
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:592)
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.AssertionFailedException: assertion failed:
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110)
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring.getInsertLocation(PullOutRefactoring.java:863)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring.access$2(PullOutRefactoring.java:861)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring$AspectRewrite.rewriteAspect(PullOutRefactoring.java:148)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring$AspectRewrite.access$0(PullOutRefactoring.java:120)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring.createChange(PullOutRefactoring.java:837)
at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:124)
at org.eclipse.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:209)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Root exception:
org.eclipse.core.runtime.AssertionFailedException: assertion failed:
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:110)
at org.eclipse.core.runtime.Assert.isTrue(Assert.java:96)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring.getInsertLocation(PullOutRefactoring.java:863)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring.access$2(PullOutRefactoring.java:861)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring$AspectRewrite.rewriteAspect(PullOutRefactoring.java:148)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring$AspectRewrite.access$0(PullOutRefactoring.java:120)
at org.eclipse.ajdt.internal.ui.refactoring.pullout.PullOutRefactoring.createChange(PullOutRefactoring.java:837)
at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:124)
at org.eclipse.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:209)
at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Comment 2 Kris De Volder CLA 2010-07-23 17:19:55 EDT
The second exception trace, I think should be fixed after applying patch from
316809

This was the assert that checks whether an aspect's "getSource" ends with a "}". 

This check was only a safety check to see whether I got what I expected, before attempting to insert ITDs before that brace.

While the check now fails, it looks like this is expected, and the source location is for the generated edits is still correct despite the assert failing there. So I have removed that assert.

The first stack trace is an unrelated issue, I'll look into that.
Comment 3 Kris De Volder CLA 2010-07-23 20:18:40 EDT
Created attachment 175119 [details]
Patch with a fix
Comment 4 Andrew Eisenberg CLA 2010-07-26 19:05:35 EDT
Patch is applied and committed.  Need to update push-in refactoring to use this.