Community
Participate
Working Groups
In the last two nightly builds, JDT/UI had failing performance tests: http://fullmoon.rtp.raleigh.ibm.com/downloads/drops/N-N20040919-200409190010/performance/html/org.eclipse.jdt.ui.tests.refactoring_.html#RenameMethodPerfTests1 and http://fullmoon.rtp.raleigh.ibm.com/downloads/drops/N-N20040920-200409200010/performance/html/org.eclipse.jdt.ui.tests.refactoring_.html#MoveStaticMembersPerfTests1 I think this is a concurrency / GC issue in WeakHashSet, since we didn't change the tests since 20040917. java.lang.ArrayIndexOutOfBoundsException: -1 at org.eclipse.jdt.internal.compiler.util.WeakHashSet.cleanupGarbageCollectedValues(WeakHashSet.java:118) at org.eclipse.jdt.internal.compiler.util.WeakHashSet.add(WeakHashSet.java:67) at org.eclipse.jdt.internal.core.JavaModelManager.intern(JavaModelManager.java:1343) at org.eclipse.jdt.internal.core.JarPackageFragmentRoot.initPackageFragToTypes(JarPackageFragmentRoot.java:249) at org.eclipse.jdt.internal.core.JarPackageFragmentRoot.computeChildren(JarPackageFragmentRoot.java:97) at org.eclipse.jdt.internal.core.PackageFragmentRoot.buildStructure(PackageFragmentRoot.java:173) at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:202) at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:544) at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:291) at org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:277) at org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:232) at org.eclipse.jdt.internal.core.JavaProjectElementInfo.getAllPackageFragments(JavaProjectElementInfo.java:182) at org.eclipse.jdt.internal.core.JavaProject.newNameLookup(JavaProject.java:2279) at org.eclipse.jdt.internal.core.SearchableEnvironment.<init>(SearchableEnvironment.java:53) at org.eclipse.jdt.internal.core.JavaProject.newSearchableNameEnvironment(JavaProject.java:2297) at org.eclipse.jdt.internal.core.hierarchy.HierarchyBuilder.<init>(HierarchyBuilder.java:86) at org.eclipse.jdt.internal.core.hierarchy.IndexBasedHierarchyBuilder.<init>(IndexBasedHierarchyBuilder.java:96) at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.compute(TypeHierarchy.java:316) at org.eclipse.jdt.internal.core.hierarchy.TypeHierarchy.refresh(TypeHierarchy.java:1243) at org.eclipse.jdt.internal.core.CreateTypeHierarchyOperation.executeOperation(CreateTypeHierarchyOperation.java:90) at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:700) at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:739) at org.eclipse.jdt.internal.core.SourceType.newTypeHierarchy(SourceType.java:673) at org.eclipse.jdt.internal.corext.refactoring.rename.MethodChecks.isDeclaredInInterface(MethodChecks.java:98) at org.eclipse.jdt.internal.corext.refactoring.rename.RenameVirtualMethodProcessor.checkInitialConditions(RenameVirtualMethodProcessor.java:70) at org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring.checkInitialConditions(ProcessorBasedRefactoring.java:113) at org.eclipse.ltk.core.refactoring.Refactoring.checkAllConditions(Refactoring.java:122) at org.eclipse.ltk.core.refactoring.CheckConditionsOperation.run(CheckConditionsOperation.java:80) at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:114) at org.eclipse.ltk.core.refactoring.PerformRefactoringOperation.run(PerformRefactoringOperation.java:103) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1674) at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1694) at org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringPerformanceTestCase.executeRefactoring(RefactoringPerformanceTestCase.java:46) at org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringPerformanceTestCase.executeRefactoring(RefactoringPerformanceTestCase.java:38) at org.eclipse.jdt.ui.tests.refactoring.infra.RefactoringPerformanceTestCase.executeRefactoring(RefactoringPerformanceTestCase.java:34) at org.eclipse.jdt.ui.tests.refactoring.reorg.AbstractRenameMethodPerfTest.executeRefactoring(AbstractRenameMethodPerfTest.java:46) at org.eclipse.jdt.ui.tests.refactoring.reorg.RenameMethodPerfTests1.test_100_10(RenameMethodPerfTests1.java:47) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22) at junit.extensions.TestSetup$1.protect(TestSetup.java:19) at junit.extensions.TestSetup.run(TestSetup.java:23) at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:320) at org.eclipse.test.EclipseTestRunner.run(EclipseTestRunner.java:196) at org.eclipse.test.EclipseTestRunner.main(EclipseTestRunner.java:131) at org.eclipse.test.UITestApplication$3.run(UITestApplication.java:180) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:106) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2760) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2445) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1435) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1406) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:263) at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:144) at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:102) at org.eclipse.test.UITestApplication.runApplication(UITestApplication.java:123) at org.eclipse.test.UITestApplication.run(UITestApplication.java:55) at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:335) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at org.eclipse.core.launcher.Main.basicRun(Main.java:185) at org.eclipse.core.launcher.Main.run(Main.java:704) at org.eclipse.core.launcher.Main.main(Main.java:688)
Changed WeakHashSet#cleanupGarbageCollectedValues(...) to ensure that if the garbage collected value is at the last index, we wrap the index correctly and we don't attempt to get the value at -1.
Verified for 3.1 M2 with build I200409230010.