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