Bug 537719 - Proper treatment of null as a return value from proposal and
context information providers

Change-Id: Icade86ba7a772b2d3ee5ff09ed23c35e5677af74
Signed-off-by: Christian Dietrich <christian.dietrich@itemis.de>
diff --git a/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java b/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java
index bf28a14..64327e3 100644
--- a/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java
+++ b/org.eclipse.jface.text/src/org/eclipse/jface/text/contentassist/ContentAssistant.java
@@ -1971,8 +1971,11 @@
 					SafeRunner.run(new ExceptionLoggingSafeRunnable(COMPLETION_ERROR_MESSAGE_KEY) {
 						@Override
 						public void run() throws Exception {
-							result.addAll(Arrays.asList( ((ISubjectControlContentAssistProcessor) p)
-									.computeCompletionProposals(contentAssistSubjectControl, offset)));
+							ICompletionProposal[] proposals= ((ISubjectControlContentAssistProcessor) p)
+									.computeCompletionProposals(contentAssistSubjectControl, offset);
+							if (proposals != null) {
+								result.addAll(Arrays.asList(proposals));
+							}
 							fLastErrorMessage= p.getErrorMessage();
 						}
 					});
@@ -2037,7 +2040,10 @@
 				@Override
 				public void run() throws Exception {
 					processors.forEach(p -> {
-						result.addAll(Arrays.asList(p.computeContextInformation(viewer, offset)));
+						IContextInformation[] contextInformation= p.computeContextInformation(viewer, offset);
+						if (contextInformation != null) {
+							result.addAll(Arrays.asList(contextInformation));
+						}
 						fLastErrorMessage= p.getErrorMessage();
 					});
 				}
@@ -2071,8 +2077,11 @@
 					SafeRunner.run(new ExceptionLoggingSafeRunnable(CONTEXT_ERROR_MESSAGE_KEY) {
 						@Override
 						public void run() throws Exception {
-							result.addAll(Arrays.asList( ((ISubjectControlContentAssistProcessor) p)
-									.computeContextInformation(contentAssistSubjectControl, offset)));
+							IContextInformation[] contextInformation= ((ISubjectControlContentAssistProcessor) p)
+									.computeContextInformation(contentAssistSubjectControl, offset);
+							if (contextInformation != null) {
+								result.addAll(Arrays.asList(contextInformation));
+							}
 							fLastErrorMessage= p.getErrorMessage();
 						}
 					});
diff --git a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/CompositeContentAssistProcessor.java b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/CompositeContentAssistProcessor.java
index 06ca42d..b270e15 100644
--- a/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/CompositeContentAssistProcessor.java
+++ b/org.eclipse.ui.genericeditor/src/org/eclipse/ui/internal/genericeditor/CompositeContentAssistProcessor.java
@@ -58,7 +58,10 @@
 	public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
 		List<IContextInformation> res = new ArrayList<>();
 		for (IContentAssistProcessor processor : this.fContentAssistProcessors) {
-			res.addAll(Arrays.asList(processor.computeContextInformation(viewer, offset)));
+			IContextInformation[] contextInformation = processor.computeContextInformation(viewer, offset);
+			if (contextInformation != null) {
+				res.addAll(Arrays.asList(contextInformation));
+			}
 		}
 		return res.toArray(new IContextInformation[res.size()]);
 	}