Bug 142990 - [model] Rename operation should not use workspace root rule
Summary: [model] Rename operation should not use workspace root rule
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.2   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.5 M2   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-05-22 10:03 EDT by Sergey Vladimirov CLA
Modified: 2008-09-15 11:29 EDT (History)
3 users (show)

See Also:


Attachments
Reformatted thread dump (15.61 KB, text/plain)
2006-05-23 05:58 EDT, Jerome Lanneluc CLA
no flags Details
Proposed fix and regression tests (18.23 KB, patch)
2008-09-09 09:08 EDT, Jerome Lanneluc CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Sergey Vladimirov CLA 2006-05-22 10:03:31 EDT
1. Create Test.java in big project (with a lot of classes, time of compilation > 1 min)
2. open Test.java and change
public class Test
to
public class TeSt

3. Select "Rename compilation Unit" from quick-fix list.

After I selected "Rename compilation Unit" Eclipse started to compile code in foreground without showing any progress window. It looks like it stuck - GUI aren't updating.

Sorry for bad English :)

2006-05-22 18:01:29
Full thread dump Java HotSpot(TM) Server VM (1.6.0-beta2-b83 mixed mode):

"StackTrace Remote Thread" prio=6 tid=0x1661e400 nid=0xa7c runnable [0x00000000..0x1e43fbc8]
   java.lang.Thread.State: RUNNABLE

"Worker-124" prio=6 tid=0x18842c00 nid=0x188 in Object.wait() [0x1e2ef000..0x1e2efd14]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
	- locked <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-123" prio=6 tid=0x197f7c00 nid=0xa0c in Object.wait() [0x1d76f000..0x1d76fd94]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
	- locked <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-122" prio=6 tid=0x177d3c00 nid=0xb4c in Object.wait() [0x190df000..0x190dfa14]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
	- locked <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-121" prio=6 tid=0x15830400 nid=0x600 in Object.wait() [0x18ccf000..0x18ccfa94]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
	- locked <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-120" prio=6 tid=0x18643400 nid=0x2b4 in Object.wait() [0x18c7f000..0x18c7fb14]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
	- locked <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x1869d400 nid=0xb30 in Object.wait() [0x1e79f000..0x1e79fa14]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x09b03770> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:176)
	- locked <0x09b03770> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"Worker-119" prio=6 tid=0x14ff5800 nid=0x718 runnable [0x1e48f000..0x1e48fb94]
   java.lang.Thread.State: RUNNABLE
	at java.io.FileInputStream.readBytes(Native Method)
	at java.io.FileInputStream.read(FileInputStream.java:199)
	at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
	- locked <0x04385cc8> (a java.io.InputStreamReader)
	at java.io.InputStreamReader.read(InputStreamReader.java:167)
	at org.eclipse.jdt.internal.compiler.util.Util.getInputStreamAsCharArray(Util.java:251)
	at org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1061)
	at org.eclipse.jdt.internal.core.util.Util.getResourceContentsAsCharArray(Util.java:1033)
	at org.eclipse.jdt.internal.core.builder.SourceFile.getContents(SourceFile.java:79)
	at org.eclipse.jdt.internal.compiler.parser.Parser.getMethodBodies(Parser.java:8103)
	at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:583)
	at org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:411)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:300)
	at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.compile(BatchImageBuilder.java:217)
	at org.eclipse.jdt.internal.core.builder.AbstractImageBuilder.compile(AbstractImageBuilder.java:264)
	at org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:56)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:249)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.buildDeltas(JavaBuilder.java:263)
	at org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:185)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:603)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:167)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:201)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:230)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:233)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:252)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:285)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:145)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:208)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

"Worker-114" prio=6 tid=0x15807c00 nid=0x740 in Object.wait() [0x1e6af000..0x1e6afc94]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:173)
	- locked <0x059ac948> (a org.eclipse.core.internal.jobs.WorkerPool)
	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:205)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:51)

"Worker-107" prio=6 tid=0x173f1400 nid=0xf4 in Object.wait() [0x18eaf000..0x18eafa14]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x0a31d838> (a org.eclipse.core.internal.jobs.ThreadJob)
	at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:182)
	- locked <0x0a31d838> (a org.eclipse.core.internal.jobs.ThreadJob)
	at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:87)
	at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:219)
	at org.eclipse.core.internal.utils.StringPoolJob.run(StringPoolJob.java:99)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:58)

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x199b2c00 nid=0xf84 in Object.wait() [0x1913f000..0x1913fa94]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x07a87240> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:176)
	- locked <0x07a87240> (a org.eclipse.jface.text.reconciler.DirtyRegionQueue)

"Java indexing" daemon prio=4 tid=0x15871c00 nid=0x388 in Object.wait() [0x18d1f000..0x18d1fd94]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x05d1b9b0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager)
	at java.lang.Object.wait(Object.java:485)
	at org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:349)
	- locked <0x05d1b9b0> (a org.eclipse.jdt.internal.core.search.indexing.IndexManager)
	at java.lang.Thread.run(Thread.java:619)

"Start Level Event Dispatcher" daemon prio=6 tid=0x147a2c00 nid=0xe84 in Object.wait() [0x149bf000..0x149bfc14]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x04fd0118> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at java.lang.Object.wait(Object.java:485)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:349)
	- locked <0x04fd0118> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:287)

"Framework Event Dispatcher" daemon prio=6 tid=0x147d8800 nid=0x35c in Object.wait() [0x1496f000..0x1496fc94]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x04fd0478> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at java.lang.Object.wait(Object.java:485)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.getNextEvent(EventManager.java:349)
	- locked <0x04fd0478> (a org.eclipse.osgi.framework.eventmgr.EventManager$EventThread)
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:287)

"State Data Manager" daemon prio=6 tid=0x14777800 nid=0xfc0 waiting on condition [0x1491f000..0x1491fd14]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
	at java.lang.Thread.sleep(Native Method)
	at org.eclipse.osgi.internal.baseadaptor.StateManager.run(StateManager.java:297)
	at java.lang.Thread.run(Thread.java:619)

"Low Memory Detector" daemon prio=6 tid=0x1438dc00 nid=0x948 runnable [0x00000000..0x00000000]
   java.lang.Thread.State: RUNNABLE

"CompilerThread1" daemon prio=10 tid=0x1438c800 nid=0x714 waiting on condition [0x00000000..0x145ef310]
   java.lang.Thread.State: RUNNABLE

"CompilerThread0" daemon prio=10 tid=0x1438a000 nid=0xf1c waiting on condition [0x00000000..0x1459f390]
   java.lang.Thread.State: RUNNABLE

"Attach Listener" daemon prio=10 tid=0x14389000 nid=0x194 runnable [0x00000000..0x00000000]
   java.lang.Thread.State: RUNNABLE

"Signal Dispatcher" daemon prio=10 tid=0x14388000 nid=0x924 runnable [0x00000000..0x00000000]
   java.lang.Thread.State: RUNNABLE

"Finalizer" daemon prio=8 tid=0x14378c00 nid=0xfb4 in Object.wait() [0x144af000..0x144afc94]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x04fd0848> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
	- locked <0x04fd0848> (a java.lang.ref.ReferenceQueue$Lock)
	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x14375000 nid=0xa4c in Object.wait() [0x1445f000..0x1445fd14]
   java.lang.Thread.State: WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x04fd0190> (a java.lang.ref.Reference$Lock)
	at java.lang.Object.wait(Object.java:485)
	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
	- locked <0x04fd0190> (a java.lang.ref.Reference$Lock)

"main" prio=6 tid=0x00386400 nid=0xb68 in Object.wait() [0x003ee000..0x003efe5c]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
	at java.lang.Object.wait(Native Method)
	- waiting on <0x09f949f0> (a org.eclipse.core.internal.jobs.ThreadJob)
	at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:182)
	- locked <0x09f949f0> (a org.eclipse.core.internal.jobs.ThreadJob)
	at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:87)
	at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:219)
	at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:96)
	at org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1684)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1732)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:784)
	at org.eclipse.jdt.internal.core.JavaModel.rename(JavaModel.java:285)
	at org.eclipse.jdt.internal.core.CompilationUnit.rename(CompilationUnit.java:1143)
	at org.eclipse.jdt.internal.corext.refactoring.changes.RenameCompilationUnitChange.doRename(RenameCompilationUnitChange.java:57)
	at org.eclipse.jdt.internal.corext.refactoring.AbstractJavaElementRenameChange.perform(AbstractJavaElementRenameChange.java:75)
	at org.eclipse.jdt.internal.ui.text.correction.ChangeCorrectionProposal.performChange(ChangeCorrectionProposal.java:119)
	at org.eclipse.jdt.internal.ui.text.correction.ChangeCorrectionProposal.apply(ChangeCorrectionProposal.java:81)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.insertProposal(CompletionProposalPopup.java:782)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.insertSelectedProposalWithMask(CompletionProposalPopup.java:728)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.access$28(CompletionProposalPopup.java:724)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup$5.widgetDefaultSelected(CompletionProposalPopup.java:563)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:97)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:928)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3348)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2968)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1914)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1878)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:419)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:143)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95)
	at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
	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:589)
	at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
	at org.eclipse.core.launcher.Main.run(Main.java:977)
	at org.eclipse.core.launcher.Main.main(Main.java:952)

"VM Thread" prio=10 tid=0x14372400 nid=0xed0 runnable 

"VM Periodic Task Thread" prio=10 tid=0x1438f400 nid=0xa30 waiting on condition
Comment 1 Dani Megert CLA 2006-05-22 10:08:48 EDT
Which build are you using?
Comment 2 Jerome Lanneluc CLA 2006-05-23 05:58:52 EDT
Created attachment 42250 [details]
Reformatted  thread dump
Comment 3 Jerome Lanneluc CLA 2006-05-23 06:00:10 EDT
Rename operation should not take workspace lock
Comment 4 Sergey Vladimirov CLA 2006-06-05 11:05:28 EDT
>Which build are you using?
I think it was 3.2 RC5
Comment 5 Jerome Lanneluc CLA 2008-05-07 10:24:30 EDT
Deferring post 3.4
Comment 6 Jerome Lanneluc CLA 2008-09-02 04:30:14 EDT
Changing title to reflect actual problem
Comment 7 Jerome Lanneluc CLA 2008-09-09 09:08:10 EDT
Created attachment 112076 [details]
Proposed fix and regression tests

To verify the fix is in, run the tests with and without the fix.
Comment 8 Jerome Lanneluc CLA 2008-09-10 03:59:25 EDT
Fix and tests released for 3.5M2
Comment 9 Olivier Thomann CLA 2008-09-15 11:29:45 EDT
Verified by running the tests using 3.4.1.
Verified for 3.5M2 using I20080914-2000