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