Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 170080 - [content assist] null pointer exception in StyleElementAdapter
Summary: [content assist] null pointer exception in StyleElementAdapter
Status: RESOLVED FIXED
Alias: None
Product: WTP Source Editing
Classification: WebTools
Component: wst.html (show other bugs)
Version: 2.0   Edit
Hardware: PC Windows XP
: P2 major (vote)
Target Milestone: 3.2 M7   Edit
Assignee: Nick Sandonato CLA
QA Contact: Nitin Dahyabhai CLA
URL:
Whiteboard:
Keywords:
: 195583 308779 (view as bug list)
Depends on:
Blocks: 171740
  Show dependency tree
 
Reported: 2007-01-10 09:16 EST by Nikolay Metchev CLA
Modified: 2010-04-12 17:21 EDT (History)
4 users (show)

See Also:


Attachments
patch (5.58 KB, patch)
2009-09-17 16:15 EDT, Nick Sandonato CLA
no flags Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Nikolay Metchev CLA 2007-01-10 09:16:31 EST
Build ID: 3.3M4
WTP 2.0M4

Steps To Reproduce:
if you content assist on the following index.htm file you get the NPE below:
-------------------------
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Risk Technology</title>
<style type="css">
.title
{
	font-size: 12pt;
	
}
</style>
</head>
<body>
<span class="title">Risk Technology</span>


</body>
</html>
---------------------------------------------
java.lang.NullPointerException
	at org.eclipse.wst.html.core.internal.htmlcss.StyleElementAdapter.getModel(StyleElementAdapter.java:169)
	at org.eclipse.wst.css.ui.internal.contentassist.CSSContentAssistProcessor.getCSSModel(CSSContentAssistProcessor.java:237)
	at org.eclipse.wst.css.ui.internal.contentassist.CSSContentAssistProcessor.computeCompletionProposals(CSSContentAssistProcessor.java:78)
	at org.eclipse.wst.sse.ui.internal.contentassist.CompoundContentAssistProcessor.computeCompletionProposals(CompoundContentAssistProcessor.java:233)
	at org.eclipse.jface.text.contentassist.ContentAssistant.computeCompletionProposals(ContentAssistant.java:1754)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.computeProposals(CompletionProposalPopup.java:479)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.access$16(CompletionProposalPopup.java:476)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup$2.run(CompletionProposalPopup.java:411)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
	at org.eclipse.jface.text.contentassist.CompletionProposalPopup.showProposals(CompletionProposalPopup.java:405)
	at org.eclipse.jface.text.contentassist.ContentAssistant.showPossibleCompletions(ContentAssistant.java:1583)
	at org.eclipse.wst.sse.ui.internal.StructuredTextViewer.doOperation(StructuredTextViewer.java:376)
	at org.eclipse.ui.texteditor.TextOperationAction$1.run(TextOperationAction.java:131)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
	at org.eclipse.ui.texteditor.TextOperationAction.run(TextOperationAction.java:129)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:499)
	at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:185)
	at org.eclipse.ui.internal.handlers.LegacyHandlerWrapper.execute(LegacyHandlerWrapper.java:109)
	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:461)
	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:424)
	at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:160)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:465)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:791)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:838)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:563)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:505)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:122)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1007)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:927)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:952)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:937)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:965)
	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:961)
	at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1275)
	at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3472)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3372)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4134)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2176)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3077)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1945)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1909)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:425)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95)
	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.internal.app.EclipseAppContainer.callMethod(EclipseAppContainer.java:522)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:147)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:74)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:170)
	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.invokeFramework(Main.java:339)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:283)
	at org.eclipse.core.launcher.Main.run(Main.java:984)
	at org.eclipse.core.launcher.Main.main(Main.java:959)


More information:
Comment 1 Cameron Bateman CLA 2007-01-25 19:48:54 EST
+1

This is relatively serious bug and arises from the fact that StyleElementAdapter.getModel does not do a null check when createModel (implemented in the same module!) returns null.  The method isValidAttribute which contributes to createModel returning null is also troubling:

if (type != null && type.length() > 0 && !type.equalsIgnoreCase("text/css")) 

So type may be null or of length 0, so then it's valid?  

This causes major as-you-type exceptions that can crash our editor and the work-around (to check for the condition that triggers the internal break) is very hacky.
Comment 2 Nick Sandonato CLA 2009-02-02 10:16:54 EST
*** Bug 195583 has been marked as a duplicate of this bug. ***
Comment 3 Nitin Dahyabhai CLA 2009-05-11 10:45:18 EDT
(In reply to comment #1)
> So type may be null or of length 0, so then it's valid?  

Yes, unless a value specified, we assume the default of CSS as the style language.  The case where the value doesn't indicate CSS (properly or not), could be better handled.  Targeting 3.2M1 with an eye toward backporting the fix to 3.1.1.
Comment 4 Nick Sandonato CLA 2009-09-17 16:15:54 EDT
Created attachment 147487 [details]
patch

In addition to the null check, I've also changed the StructuredTextPartitionerForHTML around so that the type attribute must not be defined or have a value of "text/css" in order to be a CSS Style partition.
Comment 5 Nick Sandonato CLA 2010-04-12 17:11:33 EDT
Fixed the NPE and added some unit tests. In 3.3, we'll make sure that style block are only treated as CSS if there is no type attribute or the type attribute is "text/css". This is being tracked by Bug 308928 so we can keep an eye on any performance / regressions issues.
Comment 6 Nick Sandonato CLA 2010-04-12 17:21:41 EDT
*** Bug 308779 has been marked as a duplicate of this bug. ***