Bug 74227

Summary: [jdom] Exception in JDOM handling initializers in anonymous classes
Product: [Eclipse Project] JDT Reporter: Gary Sevitsky <sevitsky>
Component: CoreAssignee: Jerome Lanneluc <jerome_lanneluc>
Status: RESOLVED WONTFIX QA Contact:
Severity: normal    
Priority: P3 CC: Ed.Merks
Version: 3.0   
Target Milestone: 3.1 M5   
Hardware: PC   
OS: Windows XP   
Whiteboard:

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.