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