validate single tag should use TYPEDEF
test if type & typedef are used together.
Added tests for duplicate and mix of type/typedef
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocProblem.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocProblem.java
index 2033551..2a9cc52 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocProblem.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocProblem.java
@@ -42,7 +42,9 @@
WRONG_SUPPRESS_WARNING,
- UNSUPPORTED_TYPEDEF;
+ UNSUPPORTED_TYPEDEF,
+
+ TYPE_WITH_TYPEDEF;
private String message;
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocProblem.properties b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocProblem.properties
index 4271714..75bfac2 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocProblem.properties
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocProblem.properties
@@ -8,3 +8,4 @@
WRONG_TYPE_PARAMETERIZATION={0} cannot be parameterized with {1}
WRONG_SUPPRESS_WARNING=WRONG_SUPPRESS_WARNING
UNSUPPORTED_TYPEDEF=@typedef can't be typed with {0}, only record/object type notation is supported.
+TYPE_WITH_TYPEDEF=@type can't be defined together with @typedef
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocSupport.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocSupport.java
index d9d86e2..0da8aa3 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocSupport.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/JSDocSupport.java
@@ -371,7 +371,11 @@
variable.setTypeDef(type);
}
}
- validateSingleTag(tags, JSDocTag.THIS, reporter);
+ validateSingleTag(tags, JSDocTag.TYPEDEF, reporter);
+ if (reporter != null && tags.count(JSDocTag.TYPE) > 0) {
+ reportProblem(reporter, JSDocProblem.TYPE_WITH_TYPEDEF,
+ typeDefTag, typeDefTag.name());
+ }
}
}
diff --git a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/JSDocValidationTest.java b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/JSDocValidationTest.java
index d6c1987..fbee6bc 100644
--- a/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/JSDocValidationTest.java
+++ b/tests/org.eclipse.dltk.javascript.core.tests/src/org/eclipse/dltk/javascript/core/tests/validation/JSDocValidationTest.java
@@ -159,4 +159,39 @@
assertEquals(problems.toString(), 1, problems.size());
assertEquals(JSDocProblem.DUPLICATE_TAG, problems.get(0).getID());
}
+
+ public void testIllegalTypeDefAnnotation() {
+ final StringList code = new StringList();
+ code.add("/**");
+ code.add("* @typedef {String}");
+ code.add("**/");
+ code.add("var g =null");
+ final List<IProblem> problems = validate(code.toString());
+ assertEquals(problems.toString(), 1, problems.size());
+ assertEquals(JSDocProblem.UNSUPPORTED_TYPEDEF, problems.get(0).getID());
+ }
+
+ public void testDuplicateTypeDefAnnotation() {
+ final StringList code = new StringList();
+ code.add("/**");
+ code.add("* @typedef {{}}");
+ code.add("* @typedef {{}}");
+ code.add("**/");
+ code.add("var g =null");
+ final List<IProblem> problems = validate(code.toString());
+ assertEquals(problems.toString(), 1, problems.size());
+ assertEquals(JSDocProblem.DUPLICATE_TAG, problems.get(0).getID());
+ }
+
+ public void testTypeWithTypeDefAnnotation() {
+ final StringList code = new StringList();
+ code.add("/**");
+ code.add("* @typedef {{}}");
+ code.add("* @type {{}}");
+ code.add("**/");
+ code.add("var g =null");
+ final List<IProblem> problems = validate(code.toString());
+ assertEquals(problems.toString(), 1, problems.size());
+ assertEquals(JSDocProblem.TYPE_WITH_TYPEDEF, problems.get(0).getID());
+ }
}