Bug 74227 - [jdom] Exception in JDOM handling initializers in anonymous classes
Summary: [jdom] Exception in JDOM handling initializers in anonymous classes
Status: RESOLVED WONTFIX
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.1 M5   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-09-18 09:05 EDT by Gary Sevitsky CLA
Modified: 2005-01-24 12:51 EST (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 Gary Sevitsky CLA 2004-09-18 09:05:11 EDT
This bug shows up consistently when using the eMF code generator (both 1.x and 
2.0), in Eclipse (both 2.x and 3.0), preventing the code generator from 
completing. It appears to be caused by JDOM not working properly with 
initializers in anonymous classes.  

The eMF scenario in which it occurs is when regenerating an eMF model from 
annotated Java.  Ed Merks from IBM's eMF development (merks@ca.ibm.com) was 
able to narrow down the problem to this small example:

package org.example;

public interface Sample {

    Object x = new Object()
    {
        {
            System.err.println("**");
        }
   
    };
}

I get the following exception and stack trace:

>>> org.eclipse.jdt.core.jdom.DOMException: Attempt to add child to node that 
cannot have children
>>>     at org.eclipse.jdt.internal.core.jdom.DOMNode.basicAddChild
(DOMNode.java:344)
>>>     at org.eclipse.jdt.internal.core.jdom.AbstractDOMBuilder.addChild
(AbstractDOMBuilder.java:129)
>>>     at org.eclipse.jdt.internal.core.jdom.DOMBuilder.addChild
(DOMBuilder.java:139)
>>>     at org.eclipse.jdt.internal.core.jdom.DOMBuilder.acceptInitializer
(DOMBuilder.java:99)
>>>     at 
org.eclipse.jdt.internal.compiler.DocumentElementParser.consumeClassBodyDeclara
tion(DocumentElementParser.java:131)
>>>     at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule
(Parser.java:2695)
>>>     at org.eclipse.jdt.internal.compiler.parser.Parser.parse
(Parser.java:5370)
>>>     at org.eclipse.jdt.internal.compiler.DocumentElementParser.parseType
(DocumentElementParser.java:1204)
>>>     at org.eclipse.jdt.internal.core.jdom.DOMBuilder.createType
(DOMBuilder.java:266)
>>>     at org.eclipse.jdt.core.jdom.DOMFactory.createType(DOMFactory.java:157)
>>>     at org.eclipse.jdt.internal.core.jdom.DOMType.getDetailedNode
(DOMType.java:389)
>>>     at org.eclipse.jdt.internal.core.jdom.DOMNode.becomeDetailed
(DOMNode.java:390)
>>>     at org.eclipse.jdt.internal.core.jdom.DOMMember.getComment
(DOMMember.java:218)
>>>     at 
org.eclipse.emf.codegen.ecore.java2ecore.JavaEcoreBuilder.analyzeType
(JavaEcoreBuilder.java:739)
>>>     at 
org.eclipse.emf.codegen.ecore.java2ecore.JavaEcoreBuilder.analyzeCompilationUni
t(JavaEcoreBuilder.java:719)
>>>     at org.eclipse.emf.codegen.ecore.java2ecore.JavaEcoreBuilder.traverse
(JavaEcoreBuilder.java:701)
>>>     at org.eclipse.emf.codegen.ecore.java2ecore.JavaEcoreBuilder.traverse
(JavaEcoreBuilder.java:677)
>>>     at org.eclipse.emf.codegen.ecore.java2ecore.JavaEcoreBuilder.traverse
(JavaEcoreBuilder.java:681)
>>>     at org.eclipse.emf.codegen.ecore.java2ecore.JavaEcoreBuilder.traverse
(JavaEcoreBuilder.java:681)
>>>     at org.eclipse.emf.codegen.ecore.java2ecore.JavaEcoreBuilder.run
(JavaEcoreBuilder.java:269)
>>>     at 
org.eclipse.emf.codegen.ecore.genmodel.presentation.EMFProjectWizard$40.execute
(EMFProjectWizard.java:2693)
>>>     at org.eclipse.ui.actions.WorkspaceModifyOperation$1.run
(WorkspaceModifyOperation.java:91)
>>>     at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1673)
>>>     at org.eclipse.ui.actions.WorkspaceModifyOperation.run
(WorkspaceModifyOperation.java:105)
>>>     at org.eclipse.jface.operation.ModalContext.runInCurrentThread
(ModalContext.java:303)
>>>     at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:253)
>>>     at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:752)
>>>     at 
org.eclipse.emf.codegen.ecore.genmodel.presentation.EMFProjectWizard$PackagePag
e.refreshPackagesTable(EMFProjectWizard.java:2735)
>>>     at 
org.eclipse.emf.codegen.ecore.genmodel.presentation.EMFProjectWizard$PackagePag
e.setVisible(EMFProjectWizard.java:2138)
>>>     at org.eclipse.jface.wizard.WizardDialog.updateForPage
(WizardDialog.java:937)
>>>     at org.eclipse.jface.wizard.WizardDialog.access$2
(WizardDialog.java:920)
>>>     at org.eclipse.jface.wizard.WizardDialog$4.run(WizardDialog.java:911)
>>>     at org.eclipse.swt.custom.BusyIndicator.showWhile
(BusyIndicator.java:69)
>>>     at org.eclipse.jface.wizard.WizardDialog.showPage
(WizardDialog.java:909)
>>>     at org.eclipse.jface.wizard.WizardDialog.nextPressed
(WizardDialog.java:680)
>>>     at org.eclipse.jface.wizard.WizardDialog.buttonPressed
(WizardDialog.java:300)
>>>     at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:506)
>>>     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:796)
>>>     at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2772)
>>>     at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2431)
>>>     at org.eclipse.jface.window.Window.runEventLoop(Window.java:668)
>>>     at org.eclipse.jface.window.Window.open(Window.java:648)
>>>     at 
org.eclipse.emf.codegen.ecore.genmodel.presentation.GenModelActionBarContributo
r$ReloadAction.run(GenModelActionBarContributor.java:165)
>>>     at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
>>>     at 
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection
(ActionContributionItem.java:915)
>>>     at org.eclipse.jface.action.ActionContributionItem.access$2
(ActionContributionItem.java:866)
>>>     at org.eclipse.jface.action.ActionContributionItem$7.handleEvent
(ActionContributionItem.java:785)
>>>     at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
>>>     at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
>>>     at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2772)
>>>     at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2431)
>>>     at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1377)
>>>     at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348)
>>>     at org.eclipse.ui.internal.Workbench.createAndRunWorkbench
(Workbench.java:254)
>>>     at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
>>>     at org.eclipse.ui.internal.ide.IDEApplication.run
(IDEApplication.java:96)
>>>     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(Unknown Source)
>>>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
>>>     at java.lang.reflect.Method.invoke(Unknown Source)
>>>     at org.eclipse.core.launcher.Main.basicRun(Main.java:183)
>>>     at org.eclipse.core.launcher.Main.run(Main.java:644)
>>>     at org.eclipse.core.launcher.Main.main(Main.java:628)
>>>
>
Comment 1 Jerome Lanneluc CLA 2005-01-24 12:51:16 EST
JDOM has been deprecated. Please use the DOM AST support and the AST rewrite
support instead.