Bug 513869 - M6: NPE creating a method override

Change-Id: I30f819640f3083e6dea73d5a28638debdbf83e48
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewrite18Test.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewrite18Test.java
index ec3300a..34c9db1 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewrite18Test.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/rewrite/describing/ImportRewrite18Test.java
@@ -37,6 +37,7 @@
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclaration;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
+import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.TypeLocation;
 import org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants;
 import org.eclipse.jdt.core.tests.model.AbstractJavaModelTests;
 import org.eclipse.jface.text.BadLocationException;
@@ -544,7 +545,7 @@
 		assertTrue(actualType.isParameterizedType());
 	}
 
-	private Type runTest426094andGetType(int i) throws Exception {
+	private Type runTest426094andGetType(int i, boolean testNullImportRewriteContext) throws Exception {
 		String contents = "package pack1;\n" +
 				"public class X{\n" +
 				this.bug426094TestInput[i][0] + "\n" +
@@ -594,7 +595,12 @@
 		ITypeBinding typeBinding = variableBinding.getType();
 		cu = getCompilationUnit("/" + PROJECT + "/src/pack1/A.java");
 		ImportRewrite rewrite = newImportsRewrite(cu, new String[0], 99, 99, true);
-		Type actualType = rewrite.addImport(typeBinding, astRoot.getAST());
+		Type actualType;
+		if(testNullImportRewriteContext) {
+			actualType = rewrite.addImport(typeBinding, astRoot.getAST(), null, TypeLocation.UNKNOWN);
+		} else {
+			actualType = rewrite.addImport(typeBinding, astRoot.getAST());			
+		}
 		return actualType;
 	}
 
@@ -613,7 +619,7 @@
 	};
 
 	private Type bug426094_runi_since_8(int i) throws Exception {
-		Type actualType = runTest426094andGetType(i);
+		Type actualType = runTest426094andGetType(i, false);
 		assertEquals(this.bug426094TestInput[i][1], actualType.toString());
 		return actualType;
 	}
@@ -826,4 +832,9 @@
 		edit.apply(document);
 		compilationUnit.getBuffer().setContents(document.get());
 	}
+	
+	public void testBug513869() throws Exception {
+		Type actualType = runTest426094andGetType(0, true);
+		assertEquals(this.bug426094TestInput[0][1], actualType.toString());
+	}
 }
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
index d4535d7..503283c 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
@@ -1460,6 +1460,8 @@
 
 	private void annotateList(List annotations, IAnnotationBinding [] annotationBindings, AST ast,
 						ImportRewriteContext context, TypeLocation location, ITypeBinding type) {
+		if (context == null)
+			context= this.defaultContext;
 		annotationBindings = context.removeRedundantTypeAnnotations(annotationBindings, location, type);
 		for (int i = 0; i< annotationBindings.length; i++) {
 			Annotation annotation = addAnnotation(annotationBindings[i], ast, context);