View | Details | Raw Unified | Return to bug 203579 | Differences between
and this patch

Collapse All | Expand All

(-)dom/org/eclipse/jdt/core/dom/ASTConverter.java (-8 / +15 lines)
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) {

Return to bug 203579