Bug 248087 - JavaElement.java:381 leads to CCE
Summary: JavaElement.java:381 leads to CCE
Status: VERIFIED WONTFIX
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.4   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: 3.5 M2   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2008-09-22 01:34 EDT by Andrew Gaydenko CLA
Modified: 2009-04-06 13:17 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Gaydenko CLA 2008-09-22 01:34:52 EDT
Build ID: I20080617-2000

Steps To Reproduce:
org.eclipse.jdt.internal.core.JavaElement.java:381 try to cast

(IField)child

inside do/while, and, at the same time, reassigns 'child' in this do/while without further checking 'child instanceof IField'. This code fragment is definitely invalid.

It rises CCE at some situations.

More information:
For example, see

http://www.nabble.com/-scala-tools--Eclipse-plugin%2C-floating-exception-td19584578.html
Comment 1 Jerome Lanneluc CLA 2008-09-22 04:47:40 EDT
The stack trace is:

ClassCastException: scala.tools.eclipse.javaelements.ScalaDefElement cannot be cast to org.eclipse.jdt.core.IField
        at org.eclipse.jdt.internal.core.JavaElement.getSourceElementAt(JavaElement.java:381)
        at org.eclipse.jdt.internal.core.JavaElement.getSourceElementAt(JavaElement.java:392)
        at org.eclipse.jdt.internal.core.CompilationUnit.getElementAt(CompilationUnit.java:687)
        at scala.tools.eclipse.Editor.getElementAt(Editor.scala:54)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.computeHighlightRangeSourceReference(JavaEditor.java:3823)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.showBreadcrumb(JavaEditor.java:1879)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.createPartControl(JavaEditor.java:3043)
        at scala.tools.eclipse.Editor.createPartControl(Editor.scala:78)
        at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:661)
        at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:428)
        at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:594)
        at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:266)
        at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2820)
        at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2729)
        at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2721)
        at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2673)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(Unknown Source)
        at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2668)
        at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2652)
        at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2643)
        at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:331)
        at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:194)
        at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:144)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditorBreadcrumb.openInNewEditor(JavaEditorBreadcrumb.java:718)
        at org.eclipse.jdt.internal.ui.javaeditor.JavaEditorBreadcrumb.open(JavaEditorBreadcrumb.java:689)
        at org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb.doOpen(EditorBreadcrumb.java:355)
        at org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb.doRevealOrOpen(EditorBreadcrumb.java:336)
        at org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb.access$8(EditorBreadcrumb.java:333)
        at org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.EditorBreadcrumb$3.open(EditorBreadcrumb.java:254)
        at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:820)
        at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
        at org.eclipse.core.runtime.Platform.run(Platform.java:880)
        at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:48)
        at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175)
        at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:818)
        at org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.BreadcrumbViewer.fireMenuSelection(BreadcrumbViewer.java:538)
        at org.eclipse.jdt.internal.ui.javaeditor.breadcrumb.BreadcrumbItemDropDown$3.mouseUp(BreadcrumbItemDropDown.java:341)
        at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
        at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
        at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2382)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2346)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2198)
        at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:493)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:288)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:488)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:193)
        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:382)
        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:597)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:549)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:504)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1236)
        at org.eclipse.equinox.launcher.Main.main(Main.java:1212) 
Comment 2 Jerome Lanneluc CLA 2008-09-22 04:49:16 EDT
According to this stack trace, SourceRefElement is extended by ScalaDefElement. SourceRefElement is an internal class. It is not allowed to extend internal classes. Won't fix.
Comment 3 David Audel CLA 2008-12-09 05:00:08 EST
Verified for 3.5M4