Bug 386704 - Requesting AST throws NPE if base class is unresolved
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/BaseCallMessageSend.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/BaseCallMessageSend.java
index 0a9cc19..5b17514 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/BaseCallMessageSend.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/BaseCallMessageSend.java
@@ -232,9 +232,9 @@
 
     	// return type:
 		TypeBinding returnType = null;
-    	if (referenceMethod != null && ! referenceMethod.ignoreFurtherInvestigation) {
+    	if (referenceMethod != null) {
     		returnType = MethodModel.getReturnType(referenceMethod.binding);
-			if (returnType.isBaseType()) {
+			if (returnType != null && returnType.isBaseType()) {
 				if (returnType != TypeBinding.VOID)
 					this._wrappee = gen.createUnboxing(this._wrappee, (BaseTypeBinding)returnType);
 				else if (outerCallinMethod == null)
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/src/org/eclipse/objectteams/otdt/ui/tests/dom/converter/DOMRegressionTests.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/src/org/eclipse/objectteams/otdt/ui/tests/dom/converter/DOMRegressionTests.java
index 1eb2a3b..05aa63b 100644
--- a/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/src/org/eclipse/objectteams/otdt/ui/tests/dom/converter/DOMRegressionTests.java
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/src/org/eclipse/objectteams/otdt/ui/tests/dom/converter/DOMRegressionTests.java
@@ -24,7 +24,10 @@
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTParser;
+import org.eclipse.jdt.core.dom.BaseCallMessageSend;
 import org.eclipse.jdt.core.dom.CompilationUnit;
+import org.eclipse.jdt.core.dom.IfStatement;
+import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.TypeDeclaration;
 import org.eclipse.objectteams.otdt.ui.tests.dom.FileBasedDOMTest;
 
@@ -95,4 +98,29 @@
 		assertEquals("No fields expected",nestedTeam.getFields().length, 0);
 	}
 
+	// Bug 386704 - Requesting AST throws NPE if base class is unresolved
+	// request resolved AST despite syntax error (missing ';')
+	public void testBug386704() throws JavaModelException {
+		ICompilationUnit teamClass = getCompilationUnit(
+                getTestProjectDir(),
+                "src",
+                "regression.basecall",
+                "T.java");
+		ASTParser parser = ASTParser.newParser(JAVA_LANGUAGE_SPEC_LEVEL);
+		parser.setProject(getJavaProject(TEST_PROJECT));
+		parser.setSource(teamClass);
+		parser.setStatementsRecovery(true);
+		parser.setResolveBindings(true);
+		
+		ASTNode root = parser.createAST( new NullProgressMonitor() );        
+		CompilationUnit compUnit = (CompilationUnit) root;
+		TypeDeclaration topTeam = (TypeDeclaration) compUnit.types().get(0);
+		TypeDeclaration role = (TypeDeclaration) topTeam.getTypes()[0];
+		MethodDeclaration method = (MethodDeclaration) role.bodyDeclarations().get(1);
+		IfStatement ifStat = (IfStatement) method.getBody().statements().get(0);
+		BaseCallMessageSend basecall = (BaseCallMessageSend) ifStat.getExpression();
+		// note: the bug was related to mistakenly converted generated fields.
+		assertEquals("Call to foo expected", "foo", basecall.getName().getIdentifier());
+	}
+	
 }
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/workspace/DOM_AST/src/regression/basecall/B.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/workspace/DOM_AST/src/regression/basecall/B.java
new file mode 100644
index 0000000..02d1fe9
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/workspace/DOM_AST/src/regression/basecall/B.java
@@ -0,0 +1,4 @@
+package regression.basecall;
+public class B {
+	boolean getFlag(String i) { return false; }
+}
\ No newline at end of file
diff --git a/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/workspace/DOM_AST/src/regression/basecall/T.java b/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/workspace/DOM_AST/src/regression/basecall/T.java
new file mode 100644
index 0000000..4c1df77
--- /dev/null
+++ b/testplugins/org.eclipse.objectteams.otdt.ui.tests.dom/workspace/DOM_AST/src/regression/basecall/T.java
@@ -0,0 +1,17 @@
+package regression.basecall;
+public team class T {
+	protected class R playedBy B {
+		boolean foo(String i) <- replace boolean getFlag(String i);
+		callin boolean foo(String i) {
+			if (base.foo(i)) return true;
+			int l = i.length();
+			switch (l) {
+			case 1 :
+				if (i.equals("OK"))	
+					return true;
+				return false;
+			default return
+			}
+		}
+	}
+}
\ No newline at end of file