Subject: bug#18378: [Patch] wrong fontification of Java code

From: Jordon Biondo <[email-masked]>
Date: Mon, 1 Sep 2014 15:20:30 -0400

I have a potential solution for this bug, as it has impacted me as well.

Not sure what the best solution would be but I have included a patch that does solve the problem. From what I can tell there are no tests for java fortification but I have not seen any issues arising in my own java projects. The issue was that in java, a “:” can mark the end of a declaration in a foreach, not just a “;” or “,”.

=== modified file 'lisp/ChangeLog'
*** lisp/ChangeLog	2014-09-01 15:03:45 +0000
--- lisp/ChangeLog	2014-09-01 19:11:46 +0000
***************
*** 1,3 ****
--- 1,8 ----
+ 2014-09-01  Jordon Biondo  <[email-masked]>
+ 
+ 	* progmodes/cc-fonts.el (c-font-lock-declarators): Special
+ 	case for declarations inside Java foreach loops (Bug#18378)
+ 
  2014-09-01  Eli Zaretskii  <[email-masked]>
  
  	* ls-lisp.el (ls-lisp-use-string-collate)

=== modified file 'lisp/progmodes/cc-fonts.el'
*** lisp/progmodes/cc-fonts.el	2014-08-24 20:50:11 +0000
--- lisp/progmodes/cc-fonts.el	2014-09-01 19:11:59 +0000
*************** casts and declarations are fontified.  U
*** 1116,1123 ****
  	    ;; initializing brace lists.
  	    (let (found)
  	      (while
! 		  (and (setq found (c-syntactic-re-search-forward
! 			     "[;,]\\|\\s)\\|\\'\\|\\(=\\|\\s(\\)" limit t t))
  		       (eq (char-before) ?\[)
  		       (c-go-up-list-forward))
  		     (setq brackets-after-id t))
--- 1116,1128 ----
  	    ;; initializing brace lists.
  	    (let (found)
  	      (while
!                   (and (setq found (c-syntactic-re-search-forward
!                                     (concat "[;,]\\|\\s)\\|\\'\\|\\(=\\|"
!                                             (if (c-major-mode-is 'java-mode)
!                                                 ":\\|"
!                                               "")
!                                             "\\s(\\)")
!                                     limit t t))
  		       (eq (char-before) ?\[)
  		       (c-go-up-list-forward))
  		     (setq brackets-after-id t))