bug 71554 [1.5][syntax highlighting] JDK 5.0: enum should be marked as a keyword
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCodeScanner.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCodeScanner.java
index 0596920..6418a5f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCodeScanner.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCodeScanner.java
@@ -41,7 +41,6 @@
  */
 public final class JavaCodeScanner extends AbstractJavaScanner {
 
-	
 	/**
 	 * Rule to detect java operators.
 	 * 
@@ -184,11 +183,11 @@
 			IToken token= super.evaluate(scanner, word);
 
 			if (fEnable) {
-				if (fCurrentVersion.equals(fVersion) || token.isUndefined())
+				if (fCurrentVersion.compareTo(fVersion) >= 0 || token.isUndefined())
 					return token;
 				return fDefaultToken;
 			} else {
-				if (fCurrentVersion.equals(fVersion))
+				if (fCurrentVersion.compareTo(fVersion) >= 0)
 					return Token.UNDEFINED;
 					
 				return token;
@@ -215,7 +214,9 @@
 		"while" //$NON-NLS-1$
 	};
 	
-	private static String[] fgNewKeywords= { "assert" }; //$NON-NLS-1$
+	private static final String RETURN= "return"; //$NON-NLS-1$
+	private static String[] fgJava14Keywords= { "assert" }; //$NON-NLS-1$
+	private static String[] fgJava15Keywords= { "enum" }; //$NON-NLS-1$
 	
 	private static String[] fgTypes= { "void", "boolean", "char", "byte", "short", "strictfp", "int", "long", "float", "double" }; //$NON-NLS-1$ //$NON-NLS-5$ //$NON-NLS-7$ //$NON-NLS-6$ //$NON-NLS-8$ //$NON-NLS-9$  //$NON-NLS-10$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-2$
 	
@@ -231,7 +232,8 @@
 		IJavaColorConstants.JAVA_OPERATOR
 	};
 	
-	private VersionedWordMatcher fVersionedWordMatcher;
+	private VersionedWordMatcher fJava14WordMatcher;
+	private VersionedWordMatcher fJava15WordMatcher;
 
 	/**
 	 * Creates a Java code scanner
@@ -273,23 +275,30 @@
 		// Add word rule for new keywords, 4077
 		String version= getPreferenceStore().getString(SOURCE_VERSION);
 		token= getToken(IJavaColorConstants.JAVA_DEFAULT);
-		fVersionedWordMatcher= new VersionedWordMatcher(token, "1.4", true, version); //$NON-NLS-1$
+		fJava14WordMatcher= new VersionedWordMatcher(token, "1.4", true, version); //$NON-NLS-1$
 		
 		token= getToken(IJavaColorConstants.JAVA_KEYWORD);
-		for (int i=0; i<fgNewKeywords.length; i++)
-			fVersionedWordMatcher.addWord(fgNewKeywords[i], token);
+		for (int i=0; i<fgJava14Keywords.length; i++)
+			fJava14WordMatcher.addWord(fgJava14Keywords[i], token);
 
-		combinedWordRule.addWordMatcher(fVersionedWordMatcher);
+		combinedWordRule.addWordMatcher(fJava14WordMatcher);
+
+		token= getToken(IJavaColorConstants.JAVA_DEFAULT);
+		fJava15WordMatcher= new VersionedWordMatcher(token, "1.5", true, version); //$NON-NLS-1$
+		token= getToken(IJavaColorConstants.JAVA_KEYWORD);
+		for (int i=0; i<fgJava15Keywords.length; i++)
+			fJava15WordMatcher.addWord(fgJava15Keywords[i], token);
+
+		combinedWordRule.addWordMatcher(fJava15WordMatcher);
 
 		// Add rule for operators and brackets
 		token= getToken(IJavaColorConstants.JAVA_OPERATOR);
 		rules.add(new OperatorRule(token));
 		
-		
 		// Add word rule for keyword 'return'.
 		CombinedWordRule.WordMatcher returnWordRule= new CombinedWordRule.WordMatcher();
 		token= getToken(IJavaColorConstants.JAVA_KEYWORD_RETURN);
-		returnWordRule.addWord("return", token);  //$NON-NLS-1$
+		returnWordRule.addWord(RETURN, token);  //$NON-NLS-1$
 		combinedWordRule.addWordMatcher(returnWordRule);
 
 		// Add word rule for method names.
@@ -332,8 +341,10 @@
 			if (value instanceof String) {
 				String s= (String) value;
 	
-				if (fVersionedWordMatcher != null)
-					fVersionedWordMatcher.setCurrentVersion(s);			
+				if (fJava14WordMatcher != null)
+					fJava14WordMatcher.setCurrentVersion(s);
+				if (fJava15WordMatcher != null)
+					fJava15WordMatcher.setCurrentVersion(s);
 			}
 			
 		} else if (super.affectsBehavior(event)) {