Lines 2974-2986
Link Here
|
2974 |
name.internalSetIdentifier(new String(fieldDeclaration.name)); |
2974 |
name.internalSetIdentifier(new String(fieldDeclaration.name)); |
2975 |
name.setSourceRange(fieldDeclaration.sourceStart, fieldDeclaration.sourceEnd - fieldDeclaration.sourceStart + 1); |
2975 |
name.setSourceRange(fieldDeclaration.sourceStart, fieldDeclaration.sourceEnd - fieldDeclaration.sourceStart + 1); |
2976 |
variableDeclarationFragment.setName(name); |
2976 |
variableDeclarationFragment.setName(name); |
2977 |
int start = fieldDeclaration.sourceEnd; |
2977 |
int start = fieldDeclaration.sourceEnd + 1; // need the exclusive range for retrieveEndOfPotentialExtendedDimensions |
2978 |
if (fieldDeclaration.initialization != null) { |
2978 |
if (fieldDeclaration.initialization != null) { |
2979 |
final Expression expression = convert(fieldDeclaration.initialization); |
2979 |
final Expression expression = convert(fieldDeclaration.initialization); |
2980 |
variableDeclarationFragment.setInitializer(expression); |
2980 |
variableDeclarationFragment.setInitializer(expression); |
2981 |
start = expression.getStartPosition() + expression.getLength(); |
2981 |
start = expression.getStartPosition() + expression.getLength(); |
2982 |
} |
2982 |
} |
2983 |
int end = retrievePositionBeforeNextCommaOrSemiColon(start, fieldDeclaration.declarationSourceEnd); |
2983 |
int end = retrieveEndOfPotentialExtendedDimensions(start, fieldDeclaration.sourceEnd, fieldDeclaration.declarationSourceEnd); |
2984 |
if (end == -1) { |
2984 |
if (end == -1) { |
2985 |
variableDeclarationFragment.setSourceRange(fieldDeclaration.sourceStart, fieldDeclaration.declarationSourceEnd - fieldDeclaration.sourceStart + 1); |
2985 |
variableDeclarationFragment.setSourceRange(fieldDeclaration.sourceStart, fieldDeclaration.declarationSourceEnd - fieldDeclaration.sourceStart + 1); |
2986 |
variableDeclarationFragment.setFlags(variableDeclarationFragment.getFlags() | ASTNode.MALFORMED); |
2986 |
variableDeclarationFragment.setFlags(variableDeclarationFragment.getFlags() | ASTNode.MALFORMED); |
Lines 3002-3008
Link Here
|
3002 |
name.internalSetIdentifier(new String(localDeclaration.name)); |
3002 |
name.internalSetIdentifier(new String(localDeclaration.name)); |
3003 |
name.setSourceRange(localDeclaration.sourceStart, localDeclaration.sourceEnd - localDeclaration.sourceStart + 1); |
3003 |
name.setSourceRange(localDeclaration.sourceStart, localDeclaration.sourceEnd - localDeclaration.sourceStart + 1); |
3004 |
variableDeclarationFragment.setName(name); |
3004 |
variableDeclarationFragment.setName(name); |
3005 |
int start = localDeclaration.sourceEnd; |
3005 |
int start = localDeclaration.sourceEnd + 1; // need the exclusive range for retrieveEndOfPotentialExtendedDimensions |
3006 |
org.eclipse.jdt.internal.compiler.ast.Expression initialization = localDeclaration.initialization; |
3006 |
org.eclipse.jdt.internal.compiler.ast.Expression initialization = localDeclaration.initialization; |
3007 |
boolean hasInitialization = initialization != null; |
3007 |
boolean hasInitialization = initialization != null; |
3008 |
if (hasInitialization) { |
3008 |
if (hasInitialization) { |
Lines 3010-3016
Link Here
|
3010 |
variableDeclarationFragment.setInitializer(expression); |
3010 |
variableDeclarationFragment.setInitializer(expression); |
3011 |
start = expression.getStartPosition() + expression.getLength(); |
3011 |
start = expression.getStartPosition() + expression.getLength(); |
3012 |
} |
3012 |
} |
3013 |
int end = retrievePositionBeforeNextCommaOrSemiColon(start, localDeclaration.declarationSourceEnd); |
3013 |
int end = retrieveEndOfPotentialExtendedDimensions(start, localDeclaration.sourceEnd, localDeclaration.declarationSourceEnd); |
3014 |
if (end == -1) { |
3014 |
if (end == -1) { |
3015 |
if (hasInitialization) { |
3015 |
if (hasInitialization) { |
3016 |
// the initiazation sourceEnd is modified during convert(initialization) |
3016 |
// the initiazation sourceEnd is modified during convert(initialization) |
Lines 4155-4180
Link Here
|
4155 |
|
4155 |
|
4156 |
/** |
4156 |
/** |
4157 |
* This method is used to retrieve position before the next comma or semi-colon. |
4157 |
* This method is used to retrieve position before the next comma or semi-colon. |
|
|
4158 |
* @param initializerEnd the given initializer end exclusive |
4158 |
* @return int the position found. |
4159 |
* @return int the position found. |
4159 |
*/ |
4160 |
*/ |
4160 |
protected int retrievePositionBeforeNextCommaOrSemiColon(int start, int end) { |
4161 |
protected int retrieveEndOfPotentialExtendedDimensions(int initializerEnd, int nameEnd, int end) { |
4161 |
this.scanner.resetTo(start, end); |
4162 |
this.scanner.resetTo(initializerEnd, end); |
4162 |
try { |
4163 |
try { |
4163 |
int token; |
4164 |
int token; |
4164 |
int balance = 0; |
4165 |
int balance = 0; |
|
|
4166 |
int pos = initializerEnd > nameEnd ? initializerEnd - 1 : nameEnd; |
4165 |
while ((token = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { |
4167 |
while ((token = this.scanner.getNextToken()) != TerminalTokens.TokenNameEOF) { |
4166 |
switch(token) { |
4168 |
switch(token) { |
4167 |
case TerminalTokens.TokenNameLBRACE : |
4169 |
case TerminalTokens.TokenNameLBRACE : |
|
|
4170 |
case TerminalTokens.TokenNameLBRACKET : |
4168 |
balance++; |
4171 |
balance++; |
4169 |
break; |
4172 |
break; |
|
|
4173 |
case TerminalTokens.TokenNameRBRACKET : |
4170 |
case TerminalTokens.TokenNameRBRACE : |
4174 |
case TerminalTokens.TokenNameRBRACE : |
4171 |
balance --; |
4175 |
balance --; |
|
|
4176 |
pos = this.scanner.currentPosition - 1; |
4172 |
break; |
4177 |
break; |
4173 |
case TerminalTokens.TokenNameCOMMA : |
4178 |
case TerminalTokens.TokenNameCOMMA : |
4174 |
if (balance == 0) return this.scanner.startPosition - 1; |
4179 |
if (balance == 0) return pos; |
|
|
4180 |
// case where a missing closing brace doesn't close an array initializer |
4181 |
pos = this.scanner.currentPosition - 1; |
4175 |
break; |
4182 |
break; |
4176 |
case TerminalTokens.TokenNameSEMICOLON : |
4183 |
case TerminalTokens.TokenNameSEMICOLON : |
4177 |
return this.scanner.startPosition - 1; |
4184 |
return pos; |
4178 |
} |
4185 |
} |
4179 |
} |
4186 |
} |
4180 |
} catch(InvalidInputException e) { |
4187 |
} catch(InvalidInputException e) { |