Community
Participate
Working Groups
I allowed my JRE Container Initializer to resolve a container to "null". This caused a stack overflow. I have since put in protection against the overflow (in the container initializer), but I do not think this should be required. I beleive am I allowed to resolve a container to null. (I will paste the stack trace)
java.lang.StackOverflowError at java.net.URLStreamHandler.hostsEqual(URLStreamHandler.java:396) at java.net.URLStreamHandler.sameFile(URLStreamHandler.java:342) at java.net.URLStreamHandler.equals(URLStreamHandler.java:275) at java.net.URL.equals(URL.java:857) at java.util.Hashtable.get(Hashtable.java:332) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.isClassVisible (DelegatingURLClassLoader.java:821) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.checkClassVisibility (DelegatingURLClassLoader.java:367) at org.eclipse.core.internal.plugins.PluginClassLoader.internalFindClassParentsSelf (PluginClassLoader.java:149) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClassParentsSelf (DelegatingURLClassLoader.java:499) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass (DelegatingURLClassLoader.java:891) at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass (DelegatingURLClassLoader.java:871) at java.lang.ClassLoader.loadClass(ClassLoader.java:255) at org.eclipse.core.internal.plugins.PluginDescriptor.createExecutableExtension (PluginDescriptor.java:130) at org.eclipse.core.internal.plugins.PluginDescriptor.createExecutableExtension (PluginDescriptor.java:167) at org.eclipse.core.internal.plugins.ConfigurationElement.createExecutableExtension (ConfigurationElement.java:103) at org.eclipse.jdt.core.JavaCore.getClasspathContainerInitializer (JavaCore.java:937) at org.eclipse.jdt.core.JavaCore.getClasspathContainer (JavaCore.java:857) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath (JavaProject.java:1438) at org.eclipse.jdt.internal.core.SetClasspathOperation.updateProjectReferencesIfNec essary(SetClasspathOperation.java:719) at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation (SetClasspathOperation.java:228) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:343) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:671) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1588) at org.eclipse.jdt.internal.core.JavaElement.runOperation (JavaElement.java:556) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath (JavaProject.java:2078) at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:2749) at org.eclipse.jdt.internal.core.BatchOperation.executeOperation (BatchOperation.java:34) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:343) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:671) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1588) at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:2633) at org.eclipse.jdt.core.JavaCore.setClasspathContainer (JavaCore.java:2739) at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize (JREContainerInitializer.java:63) at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:872) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:867) at org.eclipse.core.runtime.Platform.run(Platform.java:413) at org.eclipse.jdt.core.JavaCore.getClasspathContainer (JavaCore.java:867) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath (JavaProject.java:1438) at org.eclipse.jdt.internal.core.SetClasspathOperation.updateProjectReferencesIfNec essary(SetClasspathOperation.java:719) at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation (SetClasspathOperation.java:228) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:343) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:671) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1588) at org.eclipse.jdt.internal.core.JavaElement.runOperation (JavaElement.java:556) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath (JavaProject.java:2078) at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:2749) at org.eclipse.jdt.internal.core.BatchOperation.executeOperation (BatchOperation.java:34) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:343) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:671) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1588) at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:2633) at org.eclipse.jdt.core.JavaCore.setClasspathContainer (JavaCore.java:2739) at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize (JREContainerInitializer.java:63) at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:872) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:867) at org.eclipse.core.runtime.Platform.run(Platform.java:413) at org.eclipse.jdt.core.JavaCore.getClasspathContainer (JavaCore.java:867) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath (JavaProject.java:1438) at org.eclipse.jdt.internal.core.SetClasspathOperation.updateProjectReferencesIfNec essary(SetClasspathOperation.java:719) at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation (SetClasspathOperation.java:228) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:343) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:671) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1588) at org.eclipse.jdt.internal.core.JavaElement.runOperation (JavaElement.java:556) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath (JavaProject.java:2078) at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:2749) at org.eclipse.jdt.internal.core.BatchOperation.executeOperation (BatchOperation.java:34) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:343) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:671) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1588) at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:2633) at org.eclipse.jdt.core.JavaCore.setClasspathContainer (JavaCore.java:2739) at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize (JREContainerInitializer.java:63) at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:872) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:867) at org.eclipse.core.runtime.Platform.run(Platform.java:413) at org.eclipse.jdt.core.JavaCore.getClasspathContainer (JavaCore.java:867) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath (JavaProject.java:1438) at org.eclipse.jdt.internal.core.SetClasspathOperation.updateProjectReferencesIfNec essary(SetClasspathOperation.java:719) at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation (SetClasspathOperation.java:228) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:343) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:671) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1588) at org.eclipse.jdt.internal.core.JavaElement.runOperation (JavaElement.java:556) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath (JavaProject.java:2078) at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:2749) at org.eclipse.jdt.internal.core.BatchOperation.executeOperation (BatchOperation.java:34) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:343) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:671) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1588) at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:2633) at org.eclipse.jdt.core.JavaCore.setClasspathContainer (JavaCore.java:2739) at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize (JREContainerInitializer.java:63) at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:872) at org.eclipse.core.internal.runtime.InternalPlatform.run (InternalPlatform.java:867) at org.eclipse.core.runtime.Platform.run(Platform.java:413) at org.eclipse.jdt.core.JavaCore.getClasspathContainer (JavaCore.java:867) at org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath (JavaProject.java:1438) at org.eclipse.jdt.internal.core.SetClasspathOperation.updateProjectReferencesIfNec essary(SetClasspathOperation.java:719) at org.eclipse.jdt.internal.core.SetClasspathOperation.executeOperation (SetClasspathOperation.java:228) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:343) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:671) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1588) at org.eclipse.jdt.internal.core.JavaElement.runOperation (JavaElement.java:556) at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath (JavaProject.java:2078) at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:2749) at org.eclipse.jdt.internal.core.BatchOperation.executeOperation (BatchOperation.java:34) at org.eclipse.jdt.internal.core.JavaModelOperation.execute (JavaModelOperation.java:343) at org.eclipse.jdt.internal.core.JavaModelOperation.run (JavaModelOperation.java:671) at org.eclipse.core.internal.resources.Workspace.run (Workspace.java:1588) at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:2633) at org.eclipse.jdt.core.JavaCore.setClasspathContainer (JavaCore.java:2739) at org.eclipse.jdt.internal.launching.JREContainerInitializer.initialize (JREContainerInitializer.java:63) at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:872) ...
Setting container to null should reset its cached value, causing next request to re-run the initializer again. However, it shouldn't loop internally.
Fixed
Verified.
Regression test is ClasspathInitializerTests#testContainerInitializer05()