public void addFunctionDeclaration( Expression identifier, FunctionStatement function, IMethod method) { nodes.add(new MethodDeclarationNode(identifier != null ? identifier : function, method)); Map<String, Argument> arguments = new HashMap<String, Argument>(); for (Argument argument : function.getArguments()) { arguments.put(argument.getIdentifier().getName(), argument); } for (IParameter parameter : method.getParameters()) { final Argument argument = arguments.get(parameter.getName()); if (argument != null) { nodes.add( new ArgumentDeclarationNode( argument, method.getLocation().getSourceModule(), parameter.getType())); } } final Comment comment = JSDocSupport.getComment(function); if (comment != null) { final JSDocTags tags = JSDocSupport.parse(comment); for (JSDocTag tag : tags.list(JSDocTag.PARAM)) { final ParameterNode node = JSDocSupport.parseParameter(tag); if (node != null) { final IParameter parameter = method.getParameter(node.name); if (parameter != null) { final Identifier ref = new Identifier(null); ref.setName(node.name); final int start = tag.fromValueOffset(node.offset); ref.setStart(start); ref.setEnd(start + node.name.length()); nodes.add(new LocalVariableReferenceNode(ref, parameter.getLocation(), true)); } } } } }
private void printRest(StringBuffer buffer) { if (!fRest.isEmpty()) { final Set<String> definedTags = new HashSet<String>(); Collections.addAll(definedTags, JSDocTag.getTags()); ISourceModule module = null; /* TODO identify module? */ Collections.addAll( definedTags, JSKeywordManager.getInstance().getKeywords(JSKeywordCategory.JS_DOC_TAG, module)); final List<Pair> unknowTags = new ArrayList<Pair>(); for (Pair p : fRest) { buffer.append("<dt>"); // $NON-NLS-1$ if (definedTags.contains(p.fTag)) { buffer.append(Character.toUpperCase(p.fTag.charAt(1))).append(p.fTag.substring(2)); if (p.fContent.length() != 0) { buffer.append(":"); } buffer.append("</dt>"); // $NON-NLS-1$ printDefinition(buffer, p.fContent, TypedDefinition.AUTO); } else { unknowTags.add(p); } } for (Pair p : unknowTags) { buffer.append("<dt>"); // $NON-NLS-1$ buffer.append(p.fTag); if (p.fContent.length() != 0) { buffer.append(":"); } buffer.append("</dt>"); // $NON-NLS-1$ printDefinition(buffer, p.fContent, TypedDefinition.AUTO); } } }