[geany/geany] b016e1: Java: Report enums and fix parsing them
Colomban Wendling
git-noreply at xxxxx
Mon Jul 15 15:42:00 UTC 2013
Branch: refs/heads/master
Author: Colomban Wendling <ban at herbesfolles.org>
Committer: Colomban Wendling <ban at herbesfolles.org>
Date: Mon, 15 Jul 2013 15:42:00 UTC
Commit: b016e132fd3578c71f3362399b91562e2f6623c8
https://github.com/geany/geany/commit/b016e132fd3578c71f3362399b91562e2f6623c8
Log Message:
-----------
Java: Report enums and fix parsing them
Modified Paths:
--------------
src/symbols.c
tagmanager/ctags/c.c
tests/ctags/enum.java.tags
tests/ctags/java_enum.java
tests/ctags/java_enum.java.tags
Modified: src/symbols.c
1 files changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -905,6 +905,7 @@ static void add_top_level_items(GeanyDocument *doc)
&(tv_iters.tag_class), _("Classes"), "classviewer-class",
&(tv_iters.tag_function), _("Methods"), "classviewer-method",
&(tv_iters.tag_member), _("Members"), "classviewer-member",
+ &(tv_iters.tag_type), _("Enums"), "classviewer-struct",
&(tv_iters.tag_other), _("Other"), "classviewer-other",
NULL);
break;
Modified: tagmanager/ctags/c.c
29 files changed, 21 insertions(+), 8 deletions(-)
===================================================================
@@ -204,6 +204,7 @@
boolean haveQualifyingName; /* do we have a name we are considering? */
boolean gotParenName; /* was a name inside parentheses parsed yet? */
boolean gotArgs; /* was a list of parameters parsed yet? */
+ unsigned int nSemicolons; /* how many semicolons did we see in that statement */
impType implementation; /* abstract or concrete implementation? */
unsigned int tokenIndex; /* currently active token */
tokenInfo* token [((int) NumTokens)];
@@ -327,7 +328,7 @@
{
JK_UNDEFINED = -1,
JK_CLASS, JK_FIELD, JK_INTERFACE, JK_METHOD,
- JK_PACKAGE
+ JK_PACKAGE, JK_ENUMERATOR, JK_ENUMERATION
} javaKind;
static kindOption JavaKinds [] = {
@@ -336,6 +337,8 @@
{ TRUE, 'i', "interface", "interfaces"},
{ TRUE, 'm', "method", "methods"},
{ TRUE, 'p', "package", "packages"},
+ { TRUE, 'e', "enumerator", "enumerators (values inside an enumeration)"},
+ { TRUE, 'g', "enum", "enumeration names"},
};
typedef enum
@@ -940,6 +943,7 @@ static void reinitStatement (statementInfo *const st, const boolean partial)
st->implementation = IMP_DEFAULT;
st->gotArgs = FALSE;
st->gotName = FALSE;
+ st->nSemicolons = 0;
st->haveQualifyingName = FALSE;
st->argEndPosition = 0;
@@ -1089,11 +1093,13 @@ static javaKind javaTagKind (const tagType type)
javaKind result = JK_UNDEFINED;
switch (type)
{
- case TAG_CLASS: result = JK_CLASS; break;
- case TAG_FIELD: result = JK_FIELD; break;
- case TAG_INTERFACE: result = JK_INTERFACE; break;
- case TAG_METHOD: result = JK_METHOD; break;
- case TAG_PACKAGE: result = JK_PACKAGE; break;
+ case TAG_CLASS: result = JK_CLASS; break;
+ case TAG_FIELD: result = JK_FIELD; break;
+ case TAG_INTERFACE: result = JK_INTERFACE; break;
+ case TAG_METHOD: result = JK_METHOD; break;
+ case TAG_PACKAGE: result = JK_PACKAGE; break;
+ case TAG_ENUM: result = JK_ENUMERATION; break;
+ case TAG_ENUMERATOR: result = JK_ENUMERATOR; break;
default: Assert ("Bad Java tag type" == NULL); break;
}
@@ -2786,6 +2792,9 @@ static void nextToken (statementInfo *const st)
}
} while (isType (token, TOKEN_NONE));
+ if (isType (token, TOKEN_SEMICOLON) && st->parent)
+ st->parent->nSemicolons ++;
+
/* We want to know about non-keyword variable types */
if (TOKEN_NONE == st->firstToken->type)
{
@@ -2913,7 +2922,9 @@ static void tagCheck (statementInfo *const st)
{
case TOKEN_NAME:
{
- if (insideEnumBody (st))
+ if (insideEnumBody (st) &&
+ /* Java enumerations can contain members after a semicolon */
+ (! isLanguage(Lang_java) || st->parent->nSemicolons < 1))
qualifyEnumeratorTag (st, token);
break;
}
@@ -3022,7 +3033,9 @@ static void tagCheck (statementInfo *const st)
case TOKEN_SEMICOLON:
case TOKEN_COMMA:
{
- if (insideEnumBody (st))
+ if (insideEnumBody (st) &&
+ /* Java enumerations can contain members after a semicolon */
+ (! isLanguage (Lang_java) || st->parent->nSemicolons < 2))
;
else if (isType (prev, TOKEN_NAME))
{
Modified: tests/ctags/enum.java.tags
10 files changed, 10 insertions(+), 0 deletions(-)
===================================================================
@@ -1,3 +1,13 @@
# format=tagmanager
+A�4�e�0
+B�4�e�0
+C�4�e�0
+D�4�e�0
+E�4�e�0
+F�4�e�0
+e�2�0
getShape�128�()�e�0�public final Shape
getString�128�()�e�0�public String
+shape�8�e�0�Shape
+string�8�e�0�String
+twoKeywordsInARow�8�e�0�boolean
Modified: tests/ctags/java_enum.java
5 files changed, 5 insertions(+), 0 deletions(-)
===================================================================
@@ -12,4 +12,9 @@
void m() {
}
}
+ public enum FancyEnum2 {
+ X, Y;
+ void m2() {
+ }
+ }
}
Modified: tests/ctags/java_enum.java.tags
11 files changed, 11 insertions(+), 0 deletions(-)
===================================================================
@@ -1,4 +1,15 @@
# format=tagmanager
+A�4�C.FancyEnum�0
+B�4�C.FancyEnum�0
C�1�0
+FIRST_VALUE�4�C.TrivialEnum�0
+FancyEnum�2�C�0
FancyEnum�128�(int i)�C.FancyEnum�0
+FancyEnum2�2�C�0
+SECOND_VALUE�4�C.TrivialEnum�0
+TrivialEnum�2�C�0
+X�4�C.FancyEnum2�0
+Y�4�C.FancyEnum2�0
+i�8�C.FancyEnum�0�int
m�128�()�C.FancyEnum�0�void
+m2�128�()�C.FancyEnum2�0�void
--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).
More information about the Commits
mailing list