Bug 69713 - [1.5] Cannot save java document, throws nullpointer
Summary: [1.5] Cannot save java document, throws nullpointer
Status: RESOLVED FIXED
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 M1   Edit
Assignee: Philipe Mulet CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 69998 (view as bug list)
Depends on:
Blocks:
 
Reported: 2004-07-09 09:25 EDT by Mike Ahlers CLA
Modified: 2005-01-11 11:01 EST (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 Mike Ahlers CLA 2004-07-09 09:25:44 EDT
A nullpointer is thrown when attempting to save a java document when it contains
an if statement like: if(config_data.length = 2) {

Or rather, when assigning the value to an array-length instead of checking the
length.
Comment 1 Olivier Thomann CLA 2004-07-09 10:41:51 EDT
Could you please provide a complete test case?
Build id? Do you have a .log file in your .metadata folder?
Comment 2 Mike Ahlers CLA 2004-07-09 10:54:24 EDT
Try this sample:

public class Example {
    String[] elements = null;
	
    public Example() {
        String s = "a, b, c, d";
        elements = s.split(",");
        if(elements.length == 3) {
            // Change the == to = and try saving the document to reproduce the bug		
        }
    }
}

Heres a clean .log:

!SESSION Jul 09, 2004 16:38:33.968 ---------------------------------------------
eclipse.buildId=I200406251208
java.version=1.4.2_03
java.vendor=Sun Microsystems Inc.
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_US

!ENTRY org.eclipse.ui 4 4 Jul 09, 2004 16:38:33.968
!MESSAGE Bad extension specification

!ENTRY de.sundn.prod.sunbow.webapp 4 0 Jul 09, 2004 16:38:33.968
!MESSAGE startup class must implement org.eclipse.ui.IStartup

!ENTRY org.eclipse.jdt.core 4 4 Jul 09, 2004 16:38:51.390
!MESSAGE Exception occurred during problem detection: 
!STACK 0
java.lang.NullPointerException
	at
org.eclipse.jdt.internal.compiler.ast.Assignment.checkAssignment(Assignment.java:64)
	at
org.eclipse.jdt.internal.compiler.ast.Assignment.resolveType(Assignment.java:169)
	at
org.eclipse.jdt.internal.compiler.ast.Expression.resolveTypeExpecting(Expression.java:469)
	at
org.eclipse.jdt.internal.compiler.ast.Assignment.resolveTypeExpecting(Assignment.java:182)
	at org.eclipse.jdt.internal.compiler.ast.IfStatement.resolve(IfStatement.java:221)
	at
org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:395)
	at
org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:134)
	at
org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:373)
	at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:920)
	at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:969)
	at
org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:280)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:564)
	at
org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:176)
	at
org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:146)
	at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:183)
	at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:572)
	at
org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:976)
	at
org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:58)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:700)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:739)
	at
org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1097)
	at
org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1060)
	at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider.commitWorkingCopy(CompilationUnitDocumentProvider.java:886)
	at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitDocumentProvider$2.execute(CompilationUnitDocumentProvider.java:951)
	at
org.eclipse.ui.editors.text.TextFileDocumentProvider$DocumentProviderOperation.run(TextFileDocumentProvider.java:126)
	at
org.eclipse.ui.actions.WorkspaceModifyDelegatingOperation.execute(WorkspaceModifyDelegatingOperation.java:67)
	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.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:73)
	at
org.eclipse.ui.internal.editors.text.WorkspaceOperationRunner.run(WorkspaceOperationRunner.java:63)
	at
org.eclipse.ui.editors.text.TextFileDocumentProvider.executeOperation(TextFileDocumentProvider.java:440)
	at
org.eclipse.ui.editors.text.TextFileDocumentProvider.saveDocument(TextFileDocumentProvider.java:699)
	at
org.eclipse.ui.texteditor.AbstractTextEditor.performSave(AbstractTextEditor.java:3535)
	at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.performSave(CompilationUnitEditor.java:1357)
	at
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditor.doSave(CompilationUnitEditor.java:1410)
	at org.eclipse.ui.internal.EditorManager$12.run(EditorManager.java:1160)
	at org.eclipse.ui.internal.EditorManager$10.run(EditorManager.java:1015)
	at
org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:303)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:253)
	at org.eclipse.jface.window.ApplicationWindow$1.run(ApplicationWindow.java:588)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.jface.window.ApplicationWindow.run(ApplicationWindow.java:585)
	at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:1653)
	at
org.eclipse.ui.internal.EditorManager.runProgressMonitorOperation(EditorManager.java:1021)
	at org.eclipse.ui.internal.EditorManager.savePart(EditorManager.java:1165)
	at org.eclipse.ui.internal.WorkbenchPage.savePart(WorkbenchPage.java:2539)
	at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:2551)
	at org.eclipse.ui.internal.SaveAction.run(SaveAction.java:69)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
	at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:141)
	at org.eclipse.ui.internal.commands.Command.execute(Command.java:132)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:471)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:889)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:930)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:548)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$2(WorkbenchKeyboard.java:496)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard$1.handleEvent(WorkbenchKeyboard.java:261)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:740)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:795)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:805)
	at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:1734)
	at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:1730)
	at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3067)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:2970)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1467)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2429)
	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)

!ENTRY org.eclipse.jdt.core 4 4 Jul 09, 2004 16:38:53.296
!MESSAGE Exception occurred during problem detection: 
!STACK 0
java.lang.NullPointerException
	at
org.eclipse.jdt.internal.compiler.ast.Assignment.checkAssignment(Assignment.java:64)
	at
org.eclipse.jdt.internal.compiler.ast.Assignment.resolveType(Assignment.java:169)
	at
org.eclipse.jdt.internal.compiler.ast.Expression.resolveTypeExpecting(Expression.java:469)
	at
org.eclipse.jdt.internal.compiler.ast.Assignment.resolveTypeExpecting(Assignment.java:182)
	at org.eclipse.jdt.internal.compiler.ast.IfStatement.resolve(IfStatement.java:221)
	at
org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolveStatements(AbstractMethodDeclaration.java:395)
	at
org.eclipse.jdt.internal.compiler.ast.MethodDeclaration.resolveStatements(MethodDeclaration.java:134)
	at
org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:373)
	at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:920)
	at
org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:969)
	at
org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:280)
	at org.eclipse.jdt.internal.compiler.Compiler.resolve(Compiler.java:564)
	at
org.eclipse.jdt.internal.core.CompilationUnitProblemFinder.process(CompilationUnitProblemFinder.java:176)
	at
org.eclipse.jdt.internal.core.CompilationUnit.buildStructure(CompilationUnit.java:146)
	at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:183)
	at org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:572)
	at
org.eclipse.jdt.internal.core.CompilationUnit.makeConsistent(CompilationUnit.java:971)
	at
org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:58)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:700)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:739)
	at
org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1097)
	at
org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:88)
	at
org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconcile(JavaReconcilingStrategy.java:129)
	at
org.eclipse.jdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:86)
	at
org.eclipse.jdt.internal.ui.text.JavaCompositeReconcilingStrategy.reconcile(JavaCompositeReconcilingStrategy.java:96)
	at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:75)
	at org.eclipse.jdt.internal.ui.text.JavaReconciler.process(JavaReconciler.java:315)
	at
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:204)
Comment 3 Michael Fraenkel CLA 2004-07-09 13:49:27 EDT
The simple fix is to just add a check for a null declaringClass since the length
field doesn't come from one.

The smallest test case is something like:

int a[] = null;
a.length = 2;

While not valid, shows the problem.
Comment 4 Philipe Mulet CLA 2004-07-09 17:37:23 EDT
This is a Cheetah only bug.

Added protection, and regression test GenericTypeTest#test240.
Fixed

Comment 5 Dirk Baeumer CLA 2004-07-14 12:01:19 EDT
*** Bug 69998 has been marked as a duplicate of this bug. ***