Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 333112

Summary: [nls tooling] "Externalize Strings" throws NPE
Product: [Eclipse Project] JDT Reporter: Flavio Donze <flavio.donze>
Component: TextAssignee: Deepak Azad <deepakazad>
Status: RESOLVED WORKSFORME QA Contact:
Severity: normal    
Priority: P3 CC: daniel_megert, deepakazad, remy.suen
Version: 3.6.1   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:
Attachments:
Description Flags
properties which makes trouble
none
Configuration Screenshot none

Description Flavio Donze CLA 2010-12-22 12:24:06 EST
Build Identifier: Build id: M20100909-0800 (3.6.1)

I'm trying to externalize the strings of a plug-in. The strings were already externalized earlier using previous Eclipse versions, now I want to externalize the strings of the new code.

After I have configured the "Accessor Class" (setting everything to the already existing resources), pressing Next> I get an error:
"An unexpected exception occurred while creating a changed object. See error log for more details."

The log then says:

!ENTRY org.eclipse.ltk.ui.refactoring 4 10000 2010-12-22 18:16:04.093
!MESSAGE Internal Error
!STACK 0
java.lang.reflect.InvocationTargetException
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421)
	at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1008)
	at org.eclipse.ltk.ui.refactoring.RefactoringWizard.createChange(RefactoringWizard.java:599)
	at org.eclipse.ltk.ui.refactoring.RefactoringWizard.computeUserInputSuccessorPage(RefactoringWizard.java:438)
	at org.eclipse.ltk.ui.refactoring.UserInputWizardPage.computeSuccessorPage(UserInputWizardPage.java:74)
	at org.eclipse.ltk.ui.refactoring.UserInputWizardPage.getNextPage(UserInputWizardPage.java:114)
	at org.eclipse.jdt.internal.ui.refactoring.nls.ExternalizeWizardPage.getNextPage(ExternalizeWizardPage.java:1306)
	at org.eclipse.jface.wizard.WizardDialog.nextPressed(WizardDialog.java:887)
	at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:426)
	at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:234)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
	at org.eclipse.jface.window.Window.open(Window.java:801)
	at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation$1.run(RefactoringWizardOpenOperation.java:180)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:192)
	at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:115)
	at org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter.activate(RefactoringStarter.java:38)
	at org.eclipse.jdt.internal.ui.refactoring.nls.ExternalizeWizard$1.run(ExternalizeWizard.java:75)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.jdt.internal.ui.refactoring.nls.ExternalizeWizard.open(ExternalizeWizard.java:71)
	at org.eclipse.jdt.ui.actions.ExternalizeStringsAction$2.widgetDefaultSelected(ExternalizeStringsAction.java:491)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:119)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
	at org.eclipse.jface.window.Window.open(Window.java:801)
	at org.eclipse.jdt.ui.actions.ExternalizeStringsAction.showResults(ExternalizeStringsAction.java:310)
	at org.eclipse.jdt.ui.actions.ExternalizeStringsAction.run(ExternalizeStringsAction.java:185)
	at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:274)
	at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:250)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
	at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
	at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4066)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3657)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	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:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	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.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
Caused by: java.lang.NullPointerException
	at org.eclipse.jdt.internal.corext.refactoring.nls.PropertyFileDocumentModel.unwindEscapeChars(PropertyFileDocumentModel.java:223)
	at org.eclipse.jdt.internal.corext.refactoring.nls.PropertyFileDocumentModel.unwindValue(PropertyFileDocumentModel.java:233)
	at org.eclipse.jdt.internal.corext.refactoring.nls.NLSPropertyFileModifier.addReplaceEdits(NLSPropertyFileModifier.java:169)
	at org.eclipse.jdt.internal.corext.refactoring.nls.NLSPropertyFileModifier.addChanges(NLSPropertyFileModifier.java:99)
	at org.eclipse.jdt.internal.corext.refactoring.nls.NLSPropertyFileModifier.create(NLSPropertyFileModifier.java:76)
	at org.eclipse.jdt.internal.corext.refactoring.nls.NLSRefactoring.createChange(NLSRefactoring.java:240)
	at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:124)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
	at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Root exception:
java.lang.NullPointerException
	at org.eclipse.jdt.internal.corext.refactoring.nls.PropertyFileDocumentModel.unwindEscapeChars(PropertyFileDocumentModel.java:223)
	at org.eclipse.jdt.internal.corext.refactoring.nls.PropertyFileDocumentModel.unwindValue(PropertyFileDocumentModel.java:233)
	at org.eclipse.jdt.internal.corext.refactoring.nls.NLSPropertyFileModifier.addReplaceEdits(NLSPropertyFileModifier.java:169)
	at org.eclipse.jdt.internal.corext.refactoring.nls.NLSPropertyFileModifier.addChanges(NLSPropertyFileModifier.java:99)
	at org.eclipse.jdt.internal.corext.refactoring.nls.NLSPropertyFileModifier.create(NLSPropertyFileModifier.java:76)
	at org.eclipse.jdt.internal.corext.refactoring.nls.NLSRefactoring.createChange(NLSRefactoring.java:240)
	at org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:124)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
	at org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
	at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)


This does not happen with all existing resources.

Reproducible: Always
Comment 1 Flavio Donze CLA 2010-12-22 12:24:51 EST
Created attachment 185726 [details]
properties which makes trouble
Comment 2 Deepak Azad CLA 2010-12-23 02:18:48 EST
I am unable to reproduce this. Can you also provide the file from which you are trying to externalize the strings. Also mention what key values you entered in the 'Externalize Strings' dialog.

Looking at the code, I do not see how this NPE could occur. Were there some other some other exceptions as well in the error log?
(In reply to comment #0)
> Root exception:
> java.lang.NullPointerException
>     at
> org.eclipse.jdt.internal.corext.refactoring.nls.PropertyFileDocumentModel.unwindEscapeChars(PropertyFileDocumentModel.java:223)
>     at
> org.eclipse.jdt.internal.corext.refactoring.nls.PropertyFileDocumentModel.unwindValue(PropertyFileDocumentModel.java:233)
>     at
> org.eclipse.jdt.internal.corext.refactoring.nls.NLSPropertyFileModifier.addReplaceEdits(NLSPropertyFileModifier.java:169)
>     at
> org.eclipse.jdt.internal.corext.refactoring.nls.NLSPropertyFileModifier.addChanges(NLSPropertyFileModifier.java:99)
>     at
> org.eclipse.jdt.internal.corext.refactoring.nls.NLSPropertyFileModifier.create(NLSPropertyFileModifier.java:76)
>     at
> org.eclipse.jdt.internal.corext.refactoring.nls.NLSRefactoring.createChange(NLSRefactoring.java:240)
>     at
> org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:124)
>     at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1975)
>     at
> org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:87)
>     at
> org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
>
Comment 3 Flavio Donze CLA 2010-12-24 04:27:22 EST
Created attachment 185802 [details]
Configuration Screenshot

This is my configuration.

Strange is already that it says "Entry is missing...", even though they exist.

And "no" there was no other exception, I deleted to log first to get the "clean" exception.

Some more information about my setup:
I also have messages in en, fr and it. But I think Eclipse will only read and work with messages.properties. Should I attach?

As seen in the screen shot the messages are in "com.softmodeler.ui.rcp" in the "com.softmodeler.ui.internal" package. 
"com.softmodeler.ui.rcp" depends on "com.softmodeler.ui", which also has a package "com.softmodeler.ui.internal" with messages.properties but the class is called UIMessages. Potential error source?

The exception occurs when Eclipse does not find the entries which are actually there. Otherwise e.g. with new classes, it works.
Comment 4 Dani Megert CLA 2011-01-03 10:23:05 EST
I can also not reproduce it. If you can reproduce then please attach a test project that allows us to see the issue.