Java Mode: Fontify identifiers in the presence of annotations.

* lisp/progmodes/cc-engine.el (c-forward-annotation): Tidy up the coding:
Don't move point when the defun fails.
(c-forward-decl-or-cast-1): Correct a usage of match data.

* lisp/progmodes/cc-fonts.el (c-font-lock-maybe-decl-faces): Remove.
(c-font-lock-declarations): Use the new c-maybe-decl-faces in place of the
removed variable.

* lisp/progmodes/cc-langs.el (c-maybe-decl-faces): New language variable.
This commit is contained in:
Alan Mackenzie 2016-01-11 17:46:04 +00:00
parent 36b953947e
commit b51f1ef82f
3 changed files with 32 additions and 23 deletions

View file

@ -6641,16 +6641,22 @@ comment at the start of cc-engine.el for more info."
res))
(defun c-forward-annotation ()
;; Used for Java code only at the moment. Assumes point is on the
;; @, moves forward an annotation. returns nil if there is no
;; annotation at point.
(and (looking-at "@")
(progn (forward-char) t)
(c-forward-type)
(progn (c-forward-syntactic-ws) t)
(if (looking-at "(")
(c-go-list-forward)
t)))
;; Used for Java code only at the moment. Assumes point is on the @, moves
;; forward an annotation and returns t. Leaves point unmoved and returns
;; nil if there is no annotation at point.
(let ((pos (point)))
(or
(and (looking-at "@")
(not (looking-at c-keywords-regexp))
(progn (forward-char) t)
(looking-at c-symbol-key)
(progn (goto-char (match-end 0))
(c-forward-syntactic-ws)
t)
(if (looking-at "(")
(c-go-list-forward)
t))
(progn (goto-char pos) nil))))
(defmacro c-pull-open-brace (ps)
;; Pull the next open brace from PS (which has the form of paren-state),
@ -6959,9 +6965,8 @@ comment at the start of cc-engine.el for more info."
(when (or (looking-at c-prefix-spec-kwds-re) ;FIXME!!! includes auto
(and (c-major-mode-is 'java-mode)
(looking-at "@[A-Za-z0-9]+")))
(save-match-data
(if (looking-at c-typedef-key)
(setq at-typedef t)))
(if (save-match-data (looking-at c-typedef-key))
(setq at-typedef t))
(setq kwd-sym (c-keyword-sym (match-string 1)))
(save-excursion
(c-forward-keyword-clause 1)

View file

@ -1157,15 +1157,6 @@ casts and declarations are fontified. Used on level 2 and higher."
(setq pos (point)))))) ; acts to make the `while' form continue.
nil)
(defconst c-font-lock-maybe-decl-faces
;; List of faces that might be put at the start of a type when
;; `c-font-lock-declarations' runs. This needs to be evaluated to
;; ensure that face name aliases in Emacs are resolved.
(list nil
font-lock-type-face
c-reference-face-name
font-lock-keyword-face))
(defun c-font-lock-declarations (limit)
;; Fontify all the declarations, casts and labels from the point to LIMIT.
;; Assumes that strings and comments have been fontified already.
@ -1256,7 +1247,7 @@ casts and declarations are fontified. Used on level 2 and higher."
(c-find-decl-spots
limit
c-decl-start-re
c-font-lock-maybe-decl-faces
(eval c-maybe-decl-faces)
(lambda (match-pos inside-macro)
;; Note to maintainers: don't use `limit' inside this lambda form;

View file

@ -3251,6 +3251,19 @@ way."
objc t)
(c-lang-defvar c-type-decl-end-used (c-lang-const c-type-decl-end-used))
(c-lang-defconst c-maybe-decl-faces
"List of faces that might be put at the start of a type when
`c-font-lock-declarations' runs. This must be evaluated (with `eval') at
runtime to get the actual list of faces. This ensures that face name
aliases in Emacs are resolved."
t '(list nil
font-lock-type-face
c-reference-face-name
font-lock-keyword-face)
java (append (c-lang-const c-maybe-decl-faces)
'(font-lock-preprocessor-face)))
(c-lang-defvar c-maybe-decl-faces (c-lang-const c-maybe-decl-faces))
;;; Wrap up the `c-lang-defvar' system.