fixed bug 472962: [formatter] Missing whitespace after >, ] in annotation type declaration
diff --git a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
index 45d659f..8ad978a 100644
--- a/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
+++ b/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/formatter/FormatterBugsTests.java
@@ -11089,4 +11089,18 @@
 		"}";

 	formatSource(source);

 }

+/**

+ * @bug 472962: [formatter] Missing whitespace after >, ] in annotation type declaration

+ * @test test that there is whitespace before element identifiers

+ * @see "https://bugs.eclipse.org/bugs/show_bug.cgi?id=472962"

+ */

+public void testBug472962() {

+	String source = 

+		"public @interface A {\r\n" + 

+		"	String[] strings();\r\n" + 

+		"\r\n" + 

+		"	Class<String> stringClasses();\r\n" + 

+		"}";

+	formatSource(source);

+}

 }

diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
index 4acb9e6..d457503 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/SpacePreparator.java
@@ -422,6 +422,7 @@
 

 	@Override

 	public boolean visit(AnnotationTypeMemberDeclaration node) {

+		handleToken(node.getName(), TokenNameIdentifier, true, false);

 		handleToken(node.getName(), TokenNameLPAREN,

 				this.options.insert_space_before_opening_paren_in_annotation_type_member_declaration, false);

 		handleEmptyParens(node.getName(),

@@ -922,7 +923,7 @@
 

 	private void handleToken(ASTNode node, int tokenType, boolean spaceBefore, boolean spaceAfter) {

 		if (spaceBefore || spaceAfter) {

-			Token token = this.tm.get(this.tm.findIndex(node.getStartPosition(), tokenType, true));

+			Token token = this.tm.firstTokenIn(node, tokenType);

 			handleToken(token, spaceBefore, spaceAfter);

 		}

 	}