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]); + + } }