src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java

changeset 1529
950d8195a5a4
parent 1455
75ab654b5cd5
child 1704
ed918a442b83
     1.1 --- a/src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java	Sun Jan 27 19:38:44 2013 +0000
     1.2 +++ b/src/share/classes/com/sun/tools/javac/parser/DocCommentParser.java	Wed Jan 30 09:40:54 2013 -0800
     1.3 @@ -1,5 +1,5 @@
     1.4  /*
     1.5 - * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
     1.6 + * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
     1.7   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     1.8   *
     1.9   * This code is free software; you can redistribute it and/or modify it
    1.10 @@ -279,13 +279,7 @@
    1.11          try {
    1.12              nextChar();
    1.13              if (isIdentifierStart(ch)) {
    1.14 -                int namePos = bp;
    1.15 -                nextChar();
    1.16 -                while (isIdentifierPart(ch))
    1.17 -                    nextChar();
    1.18 -                int nameLen = bp - namePos;
    1.19 -
    1.20 -                Name name = names.fromChars(buf, namePos, nameLen);
    1.21 +                Name name = readIdentifier();
    1.22                  TagParser tp = tagParsers.get(name);
    1.23                  if (tp == null) {
    1.24                      List<DCTree> content = blockContent();
    1.25 @@ -334,14 +328,9 @@
    1.26          try {
    1.27              nextChar();
    1.28              if (isIdentifierStart(ch)) {
    1.29 -                int namePos = bp;
    1.30 -                nextChar();
    1.31 -                while (isIdentifierPart(ch))
    1.32 -                    nextChar();
    1.33 -                int nameLen = bp - namePos;
    1.34 +                Name name = readIdentifier();
    1.35                  skipWhitespace();
    1.36  
    1.37 -                Name name = names.fromChars(buf, namePos, nameLen);
    1.38                  TagParser tp = tagParsers.get(name);
    1.39                  if (tp == null) {
    1.40                      DCTree text = inlineText();
    1.41 @@ -575,10 +564,8 @@
    1.42          int pos = bp;
    1.43  
    1.44          if (isJavaIdentifierStart(ch)) {
    1.45 -            nextChar();
    1.46 -            while (isJavaIdentifierPart(ch))
    1.47 -                nextChar();
    1.48 -            return m.at(pos).Identifier(names.fromChars(buf, pos, bp - pos));
    1.49 +            Name name = readJavaIdentifier();
    1.50 +            return m.at(pos).Identifier(name);
    1.51          }
    1.52  
    1.53          throw new ParseException("dc.identifier.expected");
    1.54 @@ -703,39 +690,36 @@
    1.55      protected DCTree entity() {
    1.56          int p = bp;
    1.57          nextChar();
    1.58 -        int namep = bp;
    1.59 +        Name name = null;
    1.60          boolean checkSemi = false;
    1.61          if (ch == '#') {
    1.62 +            int namep = bp;
    1.63              nextChar();
    1.64              if (isDecimalDigit(ch)) {
    1.65                  nextChar();
    1.66                  while (isDecimalDigit(ch))
    1.67                      nextChar();
    1.68 -                checkSemi = true;
    1.69 +                name = names.fromChars(buf, namep, bp - namep);
    1.70              } else if (ch == 'x' || ch == 'X') {
    1.71                  nextChar();
    1.72                  if (isHexDigit(ch)) {
    1.73                      nextChar();
    1.74                      while (isHexDigit(ch))
    1.75                          nextChar();
    1.76 -                    checkSemi = true;
    1.77 +                    name = names.fromChars(buf, namep, bp - namep);
    1.78                  }
    1.79              }
    1.80          } else if (isIdentifierStart(ch)) {
    1.81 -            nextChar();
    1.82 -            while (isIdentifierPart(ch))
    1.83 -                nextChar();
    1.84 -            checkSemi = true;
    1.85 +            name = readIdentifier();
    1.86          }
    1.87  
    1.88 -        if (checkSemi && ch == ';') {
    1.89 +        if (name == null)
    1.90 +            return erroneous("dc.bad.entity", p);
    1.91 +        else {
    1.92 +            if (ch != ';')
    1.93 +                return erroneous("dc.missing.semicolon", p);
    1.94              nextChar();
    1.95 -            return m.at(p).Entity(names.fromChars(buf, namep, bp - namep - 1));
    1.96 -        } else {
    1.97 -            String code = checkSemi
    1.98 -                    ? "dc.missing.semicolon"
    1.99 -                    : "dc.bad.entity";
   1.100 -            return erroneous(code, p);
   1.101 +            return m.at(p).Entity(name);
   1.102          }
   1.103      }
   1.104  
   1.105 @@ -747,11 +731,7 @@
   1.106          int p = bp;
   1.107          nextChar();
   1.108          if (isIdentifierStart(ch)) {
   1.109 -            int namePos = bp;
   1.110 -            nextChar();
   1.111 -            while (isIdentifierPart(ch))
   1.112 -                nextChar();
   1.113 -            int nameLen = bp - namePos;
   1.114 +            Name name = readIdentifier();
   1.115              List<DCTree> attrs = htmlAttrs();
   1.116              if (attrs != null) {
   1.117                  boolean selfClosing = false;
   1.118 @@ -761,22 +741,16 @@
   1.119                  }
   1.120                  if (ch == '>') {
   1.121                      nextChar();
   1.122 -                    Name name = names.fromChars(buf, namePos, nameLen);
   1.123                      return m.at(p).StartElement(name, attrs, selfClosing);
   1.124                  }
   1.125              }
   1.126          } else if (ch == '/') {
   1.127              nextChar();
   1.128              if (isIdentifierStart(ch)) {
   1.129 -                int namePos = bp;
   1.130 -                nextChar();
   1.131 -                while (isIdentifierPart(ch))
   1.132 -                    nextChar();
   1.133 -                int nameLen = bp - namePos;
   1.134 +                Name name = readIdentifier();
   1.135                  skipWhitespace();
   1.136                  if (ch == '>') {
   1.137                      nextChar();
   1.138 -                    Name name = names.fromChars(buf, namePos, nameLen);
   1.139                      return m.at(p).EndElement(name);
   1.140                  }
   1.141              }
   1.142 @@ -822,10 +796,7 @@
   1.143          loop:
   1.144          while (isIdentifierStart(ch)) {
   1.145              int namePos = bp;
   1.146 -            nextChar();
   1.147 -            while (isIdentifierPart(ch))
   1.148 -                nextChar();
   1.149 -            int nameLen = bp - namePos;
   1.150 +            Name name = readIdentifier();
   1.151              skipWhitespace();
   1.152              List<DCTree> value = null;
   1.153              ValueKind vkind = ValueKind.EMPTY;
   1.154 @@ -862,7 +833,6 @@
   1.155                  skipWhitespace();
   1.156                  value = v.toList();
   1.157              }
   1.158 -            Name name = names.fromChars(buf, namePos, nameLen);
   1.159              DCAttribute attr = m.at(namePos).Attribute(name, vkind, value);
   1.160              attrs.add(attr);
   1.161          }
   1.162 @@ -897,7 +867,7 @@
   1.163      protected DCErroneous erroneous(String code, int pos) {
   1.164          int i = bp - 1;
   1.165          loop:
   1.166 -        while (i > 0) {
   1.167 +        while (i > pos) {
   1.168              switch (buf[i]) {
   1.169                  case '\f': case '\n': case '\r':
   1.170                      newline = true;
   1.171 @@ -926,16 +896,24 @@
   1.172          return Character.isUnicodeIdentifierStart(ch);
   1.173      }
   1.174  
   1.175 -    protected boolean isIdentifierPart(char ch) {
   1.176 -        return Character.isUnicodeIdentifierPart(ch);
   1.177 +    protected Name readIdentifier() {
   1.178 +        int start = bp;
   1.179 +        nextChar();
   1.180 +        while (bp < buflen && Character.isUnicodeIdentifierPart(ch))
   1.181 +            nextChar();
   1.182 +        return names.fromChars(buf, start, bp - start);
   1.183      }
   1.184  
   1.185      protected boolean isJavaIdentifierStart(char ch) {
   1.186          return Character.isJavaIdentifierStart(ch);
   1.187      }
   1.188  
   1.189 -    protected boolean isJavaIdentifierPart(char ch) {
   1.190 -        return Character.isJavaIdentifierPart(ch);
   1.191 +    protected Name readJavaIdentifier() {
   1.192 +        int start = bp;
   1.193 +        nextChar();
   1.194 +        while (bp < buflen && Character.isJavaIdentifierPart(ch))
   1.195 +            nextChar();
   1.196 +        return names.fromChars(buf, start, bp - start);
   1.197      }
   1.198  
   1.199      protected boolean isDecimalDigit(char ch) {

mercurial