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

changeset 1680
3f3cc8d3f13c
parent 1583
186023614cd3
child 1755
ddb4a2bfcd82
equal deleted inserted replaced
1679:b402b93cbe38 1680:3f3cc8d3f13c
169 endPosTable = newEndPosTable(keepEndPositions); 169 endPosTable = newEndPosTable(keepEndPositions);
170 } 170 }
171 171
172 protected AbstractEndPosTable newEndPosTable(boolean keepEndPositions) { 172 protected AbstractEndPosTable newEndPosTable(boolean keepEndPositions) {
173 return keepEndPositions 173 return keepEndPositions
174 ? new SimpleEndPosTable() 174 ? new SimpleEndPosTable(this)
175 : new EmptyEndPosTable(); 175 : new EmptyEndPosTable(this);
176 } 176 }
177 177
178 protected DocCommentTable newDocCommentTable(boolean keepDocComments, ParserFactory fac) { 178 protected DocCommentTable newDocCommentTable(boolean keepDocComments, ParserFactory fac) {
179 return keepDocComments ? new LazyDocCommentTable(fac) : null; 179 return keepDocComments ? new LazyDocCommentTable(fac) : null;
180 } 180 }
3086 storeEnd(toplevel, S.prevToken().endPos); 3086 storeEnd(toplevel, S.prevToken().endPos);
3087 if (keepDocComments) 3087 if (keepDocComments)
3088 toplevel.docComments = docComments; 3088 toplevel.docComments = docComments;
3089 if (keepLineMap) 3089 if (keepLineMap)
3090 toplevel.lineMap = S.getLineMap(); 3090 toplevel.lineMap = S.getLineMap();
3091 this.endPosTable.setParser(null); // remove reference to parser
3091 toplevel.endPositions = this.endPosTable; 3092 toplevel.endPositions = this.endPosTable;
3092 return toplevel; 3093 return toplevel;
3093 } 3094 }
3094 3095
3095 /** ImportDeclaration = IMPORT [ STATIC ] Ident { "." Ident } [ "." "*" ] ";" 3096 /** ImportDeclaration = IMPORT [ STATIC ] Ident { "." Ident } [ "." "*" ] ";"
4001 } 4002 }
4002 4003
4003 /* 4004 /*
4004 * a functional source tree and end position mappings 4005 * a functional source tree and end position mappings
4005 */ 4006 */
4006 protected class SimpleEndPosTable extends AbstractEndPosTable { 4007 protected static class SimpleEndPosTable extends AbstractEndPosTable {
4007 4008
4008 private final Map<JCTree, Integer> endPosMap; 4009 private final Map<JCTree, Integer> endPosMap;
4009 4010
4010 SimpleEndPosTable() { 4011 SimpleEndPosTable(JavacParser parser) {
4012 super(parser);
4011 endPosMap = new HashMap<JCTree, Integer>(); 4013 endPosMap = new HashMap<JCTree, Integer>();
4012 } 4014 }
4013 4015
4014 protected void storeEnd(JCTree tree, int endpos) { 4016 protected void storeEnd(JCTree tree, int endpos) {
4015 endPosMap.put(tree, errorEndPos > endpos ? errorEndPos : endpos); 4017 endPosMap.put(tree, errorEndPos > endpos ? errorEndPos : endpos);
4016 } 4018 }
4017 4019
4018 protected <T extends JCTree> T to(T t) { 4020 protected <T extends JCTree> T to(T t) {
4019 storeEnd(t, token.endPos); 4021 storeEnd(t, parser.token.endPos);
4020 return t; 4022 return t;
4021 } 4023 }
4022 4024
4023 protected <T extends JCTree> T toP(T t) { 4025 protected <T extends JCTree> T toP(T t) {
4024 storeEnd(t, S.prevToken().endPos); 4026 storeEnd(t, parser.S.prevToken().endPos);
4025 return t; 4027 return t;
4026 } 4028 }
4027 4029
4028 public int getEndPos(JCTree tree) { 4030 public int getEndPos(JCTree tree) {
4029 Integer value = endPosMap.get(tree); 4031 Integer value = endPosMap.get(tree);
4041 } 4043 }
4042 4044
4043 /* 4045 /*
4044 * a default skeletal implementation without any mapping overhead. 4046 * a default skeletal implementation without any mapping overhead.
4045 */ 4047 */
4046 protected class EmptyEndPosTable extends AbstractEndPosTable { 4048 protected static class EmptyEndPosTable extends AbstractEndPosTable {
4049
4050 EmptyEndPosTable(JavacParser parser) {
4051 super(parser);
4052 }
4047 4053
4048 protected void storeEnd(JCTree tree, int endpos) { /* empty */ } 4054 protected void storeEnd(JCTree tree, int endpos) { /* empty */ }
4049 4055
4050 protected <T extends JCTree> T to(T t) { 4056 protected <T extends JCTree> T to(T t) {
4051 return t; 4057 return t;
4063 return Position.NOPOS; 4069 return Position.NOPOS;
4064 } 4070 }
4065 4071
4066 } 4072 }
4067 4073
4068 protected abstract class AbstractEndPosTable implements EndPosTable { 4074 protected static abstract class AbstractEndPosTable implements EndPosTable {
4075 /**
4076 * The current parser.
4077 */
4078 protected JavacParser parser;
4069 4079
4070 /** 4080 /**
4071 * Store the last error position. 4081 * Store the last error position.
4072 */ 4082 */
4073 protected int errorEndPos; 4083 protected int errorEndPos;
4084
4085 public AbstractEndPosTable(JavacParser parser) {
4086 this.parser = parser;
4087 }
4074 4088
4075 /** 4089 /**
4076 * Store ending position for a tree, the value of which is the greater 4090 * Store ending position for a tree, the value of which is the greater
4077 * of last error position and the given ending position. 4091 * of last error position and the given ending position.
4078 * @param tree The tree. 4092 * @param tree The tree.
4104 protected void setErrorEndPos(int errPos) { 4118 protected void setErrorEndPos(int errPos) {
4105 if (errPos > errorEndPos) { 4119 if (errPos > errorEndPos) {
4106 errorEndPos = errPos; 4120 errorEndPos = errPos;
4107 } 4121 }
4108 } 4122 }
4123
4124 protected void setParser(JavacParser parser) {
4125 this.parser = parser;
4126 }
4109 } 4127 }
4110 } 4128 }

mercurial