variable arguments support in type def function definition.
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/JSDocTypeParser.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/JSDocTypeParser.java
index 660a091..c4936f9 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/JSDocTypeParser.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/typeinfo/JSDocTypeParser.java
@@ -388,6 +388,17 @@
 			}
 			final JSType type = parse(input, true);
 			if (type != null) {
+				if (input.LT(1) == '.' && input.LT(2) == '.'
+						&& input.LT(3) == '.') {
+					input.consume();
+					input.consume();
+					input.consume();
+					varargs = true;
+					if (input.LT(1) == '[') {
+						input.consume();
+						squareBracket = true;
+					}
+				}
 				final Parameter parameter = TypeInfoModelFactory.eINSTANCE
 						.createParameter();
 				parameter.setType(type);
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/CodeCompletion.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/CodeCompletion.java
index 620f1b4..18f92f6 100644
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/CodeCompletion.java
+++ b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/contentassist/CodeCompletion.java
@@ -1041,4 +1041,33 @@
 		assertEquals("Any", parameterNames[2]);
 		
 	}
+	
+	public void testTypeDefParameterNamesTestWithVariableArguments() {
+		final StringList code = new StringList();
+		code.add("/**");
+		code.add(" * @typedef {{ log: function(String, Number, *...) }}");
+		code.add(" */");
+		code.add("var myType");
+		code.add("function tst(){");
+		code.add("	/**");
+		code.add("	 * @type {myType}");
+		code.add("	 */");
+		code.add("	var x = null;");
+		code.add("	x.log");
+		code.add("}");
+		final IModuleSource module = new TestModule(code.toString());
+		final List<CompletionProposal> results = new ArrayList<CompletionProposal>();
+		final ICompletionEngine completionEngine = createEngine(results,
+				JSCompletionEngine.OPTION_KEYWORDS);
+		completionEngine.complete(module, lastPositionInFile(".log", module), 0);
+		assertEquals(1, results.size());
+		CompletionProposal completionProposal = results.get(0);
+		assertEquals("log", completionProposal.getName());
+		String[] parameterNames = completionProposal.getParameterNames();
+		assertEquals(3, parameterNames.length);
+		assertEquals("String", parameterNames[0]);
+		assertEquals("Number", parameterNames[1]);
+		assertEquals("Any", parameterNames[2]);
+		
+	}
 }