type def params don't have to have names, make sure we fallback to type
name or else anon_1
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/codeassist/JavaScriptCompletionEngine2.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/codeassist/JavaScriptCompletionEngine2.java
index 4db9b29..ccbe5d8 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/codeassist/JavaScriptCompletionEngine2.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/javascript/internal/core/codeassist/JavaScriptCompletionEngine2.java
@@ -556,6 +556,11 @@
final String[] params = new String[paramCount];
for (int i = 0; i < paramCount; ++i) {
params[i] = parameters.get(i).getName();
+ if (params[i] == null
+ && parameters.get(i).getType() != null)
+ params[i] = parameters.get(i).getType().getName();
+ if (params[i] == null)
+ params[i] = "anon_" + i;
}
proposal.setParameterNames(params);
if (parameters.get(paramCount - 1).getKind() != ParameterKind.NORMAL) {
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 296d5ff..620f1b4 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
@@ -1013,4 +1013,32 @@
}
+ public void testTypeDefParameterNamesTest() {
+ 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]);
+
+ }
}