fix for calling the function that is given as a function type through a
union.
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
index 57fc806..07aabba 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/validation/TypeInfoValidator.java
@@ -104,6 +104,7 @@
 import org.eclipse.dltk.javascript.typeinfo.IRType;
 import org.eclipse.dltk.javascript.typeinfo.IRTypeDeclaration;
 import org.eclipse.dltk.javascript.typeinfo.IRTypeExtension;
+import org.eclipse.dltk.javascript.typeinfo.IRUnionType;
 import org.eclipse.dltk.javascript.typeinfo.IRVariable;
 import org.eclipse.dltk.javascript.typeinfo.ITypeChecker;
 import org.eclipse.dltk.javascript.typeinfo.ITypeCheckerExtension;
@@ -1094,6 +1095,11 @@
 						&& expressionType != RTypes.none()
 						&& !RTypes.FUNCTION.isAssignableFrom(expressionType)
 								.ok()) {
+					if (expressionType instanceof IRUnionType) {
+						if (expressionType.isAssignableFrom(RTypes.FUNCTION)
+								.ok())
+							return;
+					}
 					reporter.reportProblem(
 							JavaScriptProblems.WRONG_FUNCTION,
 							isIdentifier(expression) ? NLS.bind(
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
index 238082e..6b8c4aa 100644
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
+++ b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/TypeInfoValidationTests.java
@@ -2193,6 +2193,26 @@
 		final List<IProblem> problems = validate(code.toString());
 		assertEquals(problems.toString(), 0, problems.size());
 	}
+	
+		public void testFunctionFromParamType() {
+		final StringList code = new StringList();
+		code.add("/** @param {function(String)} obj */");
+		code.add("function y(obj) {");
+		code.add("  obj('');");
+		code.add("}");
+		final List<IProblem> problems = validate(code.toString());
+		assertEquals(problems.toString(), 0, problems.size());
+	}
+	
+	public void testFunctionCallFromUnion() {
+		final StringList code = new StringList();
+		code.add("/** @param {function(String)|String} obj */");
+		code.add("function y(obj) {");
+		code.add("  obj('');");
+		code.add("}");
+		final List<IProblem> problems = validate(code.toString());
+		assertEquals(problems.toString(), 0, problems.size());
+	}
 
 	public void testUnionParamTypeCompatibility() {
 		final StringList code = new StringList();