Функции закрытия JavaScript с отсутствующим jsDoc в схеме Eclipse
У меня странная проблема с выделением файлов JavaScript в Eclipse 4.2 с использованием JSDT 1.4.1. У меня есть закрытие, определенное следующим образом:
var myClosure = (function() {
var calcGridLocation,
detectCollision;
/**
* Calculate the grid cell coordinates from the offset of an element and the editorgrid offset
*
* @param {jQuery object} obj jQuery object of the object whose location will be calculated
* @param {String} [subgrid=""] Specify the currently active subgrid
* @returns {Object} Coordinate object with x, y and obj properties, obj hols a jQuery object of the target cell, null for locations outside the editorgrid
* @memberOf myClosure
*/
calcGridLocation = function(obj, subgrid) {
var gridOffset, // Offset (relative to document) of the editorgrid
objOffset, // Offset (relative to document) of the provided object
rv = {}; // Return value object
if(subgrid === null || subgrid === undefined) {
subgrid = "";
// Get the grid's offset
gridOffset = $("#editorgrid").offset();
}
else {
// Get the grid's offset
gridOffset = $("#" + subgrid).offset();
subgrid += "_";
}
// Get the object's offset
objOffset = obj.offset();
// Calculate the grid coordinates of the object
if(objOffset === undefined || gridOffset === undefined) {
debugger;
}
rv.x = Math.floor((objOffset.left - gridOffset.left) / cellSize);
rv.y = Math.floor((objOffset.top - gridOffset.top) / cellSize);
// Check if the location is a valid grid location
if(rv.x >= 0 && rv.x < tblCellCount && rv.y >= 0 && rv.y < tblRowCount) {
if(obj.hasClass("gridCell")) {
rv.obj = obj;
}
else {
// Get the grid cell object and return the return value object
rv.obj = $("#" + subgrid + "c_" + rv.y + "_" + rv.x);
}
return rv;
}
else {
// Return null, no valid grid location
return null;
}
}; //calcGridLocation = function()
/**
* Detect a collision of an object with other dragboxes
*
* @param {jQuery object} obj Object to check for collisions
* @returns {Object} Object with collision, obstacle, shift.x and shift.y attributes
* @memberOf myClosure
*/
detectCollision = function(obj) {
// Some code here
}; //detectCollision = function()
})();
После некоторых исследований я обнаружил, что мне нужны аннотации jsDoc для отображения функций в Eclipse. Первая функция отображается, а вторая - нет. Это просто не в списке.
И действительно странная вещь: если я полностью удалю содержимое первой функции, вторая функция будет отображаться очень хорошо. Есть ли какая-то ошибка в моем синтаксисе, которая вызывает такое поведение? Полный сценарий прекрасно работает, когда я тестирую свой проект в браузере (Google Chrome), и проверяется jsLint (за исключением некоторых случаев, когда я не принимаю способ написания кода jsLint).
Дополнительная информация
Eclipse не показывает несколько функций этого замыкания, приведенный выше является лишь минимальным примером. "Потерянные" функции кажутся совершенно случайными, иногда отсутствует одна, иногда несколько подряд. Также есть функции между отсутствующими, которые показаны в схеме следующим образом: показано, показано, отсутствует, показано, отсутствует, отсутствует,...
Я дважды проверил, что каждая функция имеет @memberOf
аннотация jsDoc, которая должна сделать его видимым в схеме.
Пропущенные функции не распознаются редактором как функциональные блоки, поэтому я не могу их сложить (показанную функцию можно сложить). Удаление содержимого из calcGridLocation
функция позволяет сворачивать код на detectCollision
функция.