Bug 92482 - Rename refactor of aspect fails
Summary: Rename refactor of aspect fails
Status: RESOLVED DUPLICATE of bug 98547
Alias: None
Product: AJDT
Classification: Tools
Component: Core (show other bugs)
Version: 1.2.0 M2   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 1.2.0 RC2   Edit
Assignee: Helen Beeken CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2005-04-23 07:56 EDT by Barry Kaplan CLA
Modified: 2005-08-24 05:24 EDT (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Barry Kaplan CLA 2005-04-23 07:56:58 EDT
eclipse: 3.1M6
adjt: 1.2.0 20050420095141
AspectJ: 1.5.0M2

I am attempting to rename an aspect, say 'FooAspect' to 'Foo'. I select
refactor->rename and modify the name, click ok, and get the following:

Found problems: Compilation unit could not be created for this element. No
context information available.
Comment 1 Barry Kaplan CLA 2005-04-23 08:56:29 EDT
This is worse. I cannot rename /any/ class in an aspectj enabled project. When
attempting to rename a .java file, I get:

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:282)
	at
org.eclipse.ltk.ui.refactoring.RefactoringWizard.internalPerformFinish(RefactoringWizard.java:544)
	at
org.eclipse.ltk.ui.refactoring.UserInputWizardPage.performFinish(UserInputWizardPage.java:153)
	at
org.eclipse.ltk.ui.refactoring.RefactoringWizard.performFinish(RefactoringWizard.java:610)
	at
org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.okPressed(RefactoringWizardDialog2.java:406)
	at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:409)
	at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:556)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:89)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:842)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2894)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2527)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:803)
	at org.eclipse.jface.window.Window.open(Window.java:781)
	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.ui.refactoring.RenameSupport.openDialog(RenameSupport.java:114)
	at
org.eclipse.jdt.internal.ui.refactoring.actions.RenameJavaElementAction.run(RenameJavaElementAction.java:180)
	at
org.eclipse.jdt.internal.ui.refactoring.actions.RenameJavaElementAction.run(RenameJavaElementAction.java:133)
	at org.eclipse.jdt.ui.actions.RenameAction.run(RenameAction.java:116)
	at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:216)
	at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:188)
	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:331)
	at
org.eclipse.core.commands.ParameterizedCommand.execute(ParameterizedCommand.java:396)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:452)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:741)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:784)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:543)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:486)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:110)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:777)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:841)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:866)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:851)
	at org.eclipse.swt.widgets.Control.traverse(Control.java:2770)
	at org.eclipse.swt.widgets.Control.translateMnemonic(Control.java:2611)
	at org.eclipse.swt.widgets.Composite.translateMnemonic(Composite.java:807)
	at org.eclipse.swt.widgets.Control.translateMnemonic(Control.java:2629)
	at org.eclipse.swt.widgets.Display.translateMnemonic(Display.java:3314)
	at org.eclipse.swt.widgets.Display.filterMessage(Display.java:791)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2523)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1570)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1534)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:306)
	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:228)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:156)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.core.launcher.Main.invokeFramework(Main.java:315)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:268)
	at org.eclipse.core.launcher.Main.run(Main.java:942)
	at org.eclipse.core.launcher.Main.main(Main.java:926)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	at java.lang.String.substring(Unknown Source)
	at
org.eclipse.jdt.internal.core.util.Util.getNameWithoutJavaLikeExtension(Util.java:890)
	at
org.eclipse.jdt.internal.core.search.matching.PossibleMatch.getQualifiedName(PossibleMatch.java:101)
	at
org.eclipse.jdt.internal.core.search.matching.PossibleMatch.<init>(PossibleMatch.java:41)
	at
org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1079)
	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:394)
	at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:532)
	at
org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine.internalSearch(RefactoringSearchEngine.java:130)
	at
org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine.search(RefactoringSearchEngine.java:104)
	at
org.eclipse.jdt.internal.corext.refactoring.rename.RenameTypeProcessor.checkFinalConditions(RenameTypeProcessor.java:319)
	at
org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring.checkFinalConditions(ProcessorBasedRefactoring.java:165)
	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.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:189)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1714)
	at
org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:86)
	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)
Comment 2 Barry Kaplan CLA 2005-04-23 09:22:13 EDT
Now, even after removing aspectj nature I cannot rename a package:

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:282)
	at
org.eclipse.ltk.ui.refactoring.RefactoringWizard.internalPerformFinish(RefactoringWizard.java:544)
	at
org.eclipse.ltk.ui.refactoring.UserInputWizardPage.performFinish(UserInputWizardPage.java:153)
	at
org.eclipse.ltk.ui.refactoring.RefactoringWizard.performFinish(RefactoringWizard.java:610)
	at
org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.okPressed(RefactoringWizardDialog2.java:406)
	at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:409)
	at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:556)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:89)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:842)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2894)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2527)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:803)
	at org.eclipse.jface.window.Window.open(Window.java:781)
	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.ui.refactoring.RenameSupport.openDialog(RenameSupport.java:114)
	at
org.eclipse.jdt.internal.ui.refactoring.actions.RenameJavaElementAction.run(RenameJavaElementAction.java:180)
	at
org.eclipse.jdt.internal.ui.refactoring.actions.RenameJavaElementAction.run(RenameJavaElementAction.java:133)
	at org.eclipse.jdt.ui.actions.RenameAction.run(RenameAction.java:116)
	at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:216)
	at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:188)
	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:331)
	at
org.eclipse.core.commands.ParameterizedCommand.execute(ParameterizedCommand.java:396)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:452)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:741)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:784)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:543)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:486)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:110)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:777)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:841)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:866)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:851)
	at org.eclipse.swt.widgets.Control.traverse(Control.java:2770)
	at org.eclipse.swt.widgets.Control.translateMnemonic(Control.java:2611)
	at org.eclipse.swt.widgets.Composite.translateMnemonic(Composite.java:807)
	at org.eclipse.swt.widgets.Control.translateMnemonic(Control.java:2629)
	at org.eclipse.swt.widgets.Display.translateMnemonic(Display.java:3314)
	at org.eclipse.swt.widgets.Display.filterMessage(Display.java:791)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2523)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1570)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1534)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:306)
	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:228)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:156)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.core.launcher.Main.invokeFramework(Main.java:315)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:268)
	at org.eclipse.core.launcher.Main.run(Main.java:942)
	at org.eclipse.core.launcher.Main.main(Main.java:926)
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -1
	at java.lang.String.substring(Unknown Source)
	at
org.eclipse.jdt.internal.core.util.Util.getNameWithoutJavaLikeExtension(Util.java:890)
	at
org.eclipse.jdt.internal.core.search.matching.PossibleMatch.getQualifiedName(PossibleMatch.java:101)
	at
org.eclipse.jdt.internal.core.search.matching.PossibleMatch.<init>(PossibleMatch.java:41)
	at
org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches(MatchLocator.java:1079)
	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:394)
	at org.eclipse.jdt.core.search.SearchEngine.search(SearchEngine.java:532)
	at
org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine.internalSearch(RefactoringSearchEngine.java:130)
	at
org.eclipse.jdt.internal.corext.refactoring.RefactoringSearchEngine.search(RefactoringSearchEngine.java:104)
	at
org.eclipse.jdt.internal.corext.refactoring.rename.RenameTypeProcessor.checkFinalConditions(RenameTypeProcessor.java:319)
	at
org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring.checkFinalConditions(ProcessorBasedRefactoring.java:165)
	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.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:189)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1714)
	at
org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:86)
	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:113)
Comment 3 Mario Scalas CLA 2005-05-09 16:36:42 EDT
I can confirm that the problem still exists with 1.2M3 :( 
Comment 4 Helen Beeken CLA 2005-05-18 09:13:45 EDT
This problem still exists on AJDT 1.2.0 rc1
Comment 5 Helen Beeken CLA 2005-05-19 05:50:44 EDT
The place we are failing at is in the method:

org.eclipse.jdt.internal.corext.refactoring.Checks.checkIfCuBroken(IMember 
member)

at line 486, when the following call

ICompilationUnit cu= (ICompilationUnit)JavaCore.create(ResourceUtil.getResource
(member));

returns null.

This is the usual problem that JavaCore.create(IResource) requires the 
IResource to be a project, a .java file, a .class file, a .jar file, a folder 
or the workspace root resouce. What ResourceUtil.getResource(member) returns 
in our case is a .aj file.

All this checking is happening before any actual refactoring/renaming is done 
which is why you get the dialog which doesn't allow you to go any further. It 
could well be that if we get past this stage then the renaming would still 
fail - see bug 74426.
Comment 6 Barry Kaplan CLA 2005-05-19 09:20:38 EDT
Is there any reason not to simply suffix aspect files with .java for now?
Comment 7 Helen Beeken CLA 2005-05-19 10:43:09 EDT
Yes, there is functionality which isn't available if you have your aspects 
in .java files, for example, the aspect structure doesn't appear in the 
package explorer, the contents of the outline view, cross reference view.
Comment 8 Helen Beeken CLA 2005-05-27 06:46:45 EDT
Looking into the processor/participant mechanism mentioned in bug 74426, the
comment:

"Each refactoring will run exactly one processor and zero or more 
participants.  It is not possible to contribute or override refactoring 
processors, which means that we cannot run our own delete processor for 
AJCompilationUnits.  I believe this would be the most desirable option if the 
extension point was opened up in the future and is possibly something to raise 
with the JDT team."

would also be the most desirable solution for rename i.e. running our own rename
processor for AJCompilationUnits.

We also can't be a participant for the JDT rename processor since participants
are only loaded after the checkFinalConditions(..) method from the processor is
run. Unfortunately, we are failing within
RenameTypeProcessor.checkFinalConditions(..) (which is called from
RenameCompilationUnitProcessor.checkFinalConditions(..)), and so are never loaded.
Comment 9 Helen Beeken CLA 2005-06-02 07:54:09 EDT
The solution for the short term is to add another "Rename..." action on the
Package explorer's context menu for .aj files. The entry will appear under the
"Refactor" entry but not in the "Refactor" menu. This is because the rename for
.aj files will be the simple rename resource action and dialog. In other words,
it will not rename the type, rename references etc. It will simply do the same
as if you opened the Navigator View and then right clicked on the .aj file.

This is a better solution to the current one, because the action can be done
from the package explorer, however, it is far from ideal. 

The fix required the creation of
org.eclipse.ajdt.internal.ui.actions.RenameAJFileAction and updates to the
plugin.xml file. 

The fix is in build:

BUILD COMPLETE -  build.386
Date of build: 06/02/2005 11:43:14
Time to build: 18 minutes 33 seconds
Last changed: 06/02/2005 11:32:45
Last log entry: setting the update of the xref view after a build to be a system job
Latest good AJDT build available at update site:
http://download.eclipse.org/technology/ajdt/30/dev/update/


and will be in the AJDT 1.2.0 rc2 build. 

I'm closing this bug as fixed since you now can rename .aj files. However, I'm
raising another one to track the remaining issues: bug 98708
Comment 10 Ben Dalziel CLA 2005-08-24 04:45:59 EDT
Sometimes the Package explorer's context menu for .aj files does not contain the
newly added "Rename..." entry.

For example, create a new aspect within an AJ or Java Project.  Right click on
the aspect in the Package explorer and there is no "Rename..." entry in its
context menu.  If you close the editor window which appeared when the aspect was
created, and reopen it by double clicking on the aspect in the package explorer,
the aspects context menu will now have a "Rename..." entry.

If you then do something in the Package explorer, such as add another project,
or delete a class, the entry disappears again.

For reference, this was highlighted in Manual Test REF_14
Comment 11 Helen Beeken CLA 2005-08-24 05:18:22 EDT
Reopening this bug due to Ben's comment #10.
Comment 12 Helen Beeken CLA 2005-08-24 05:24:35 EDT
I believe that the reason we're seeing this behaviour in the latest AJDT 1.3
builds is due to the fix for bug 98547 (which has had other affects aswell).
This fix registered .aj files as a "java like extension" so the jdt merrily goes
and creates Compilation units for them. Then, since it's a .aj file, we (AJDT)
create AJCompilationUnits for the same files and everything gets a bit messy
(entries don't appear on menus etc.)

I'm therefore closing this bug now as a duplicate of bug 98547 to record that
this is another consequence of that fix.

*** This bug has been marked as a duplicate of 98547 ***