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

Collapse All | Expand All

(-)dom/org/eclipse/jdt/core/dom/ASTRecoveryPropagator.java (+39 lines)
Lines 11-20 Link Here
11
11
12
package org.eclipse.jdt.core.dom;
12
package org.eclipse.jdt.core.dom;
13
13
14
import java.util.List;
14
import java.util.Vector;
15
import java.util.Vector;
15
16
16
import org.eclipse.jdt.core.compiler.CategorizedProblem;
17
import org.eclipse.jdt.core.compiler.CategorizedProblem;
18
import org.eclipse.jdt.core.compiler.CharOperation;
17
import org.eclipse.jdt.core.compiler.IProblem;
19
import org.eclipse.jdt.core.compiler.IProblem;
20
import org.eclipse.jdt.internal.compiler.parser.RecoveryScanner;
18
import org.eclipse.jdt.internal.compiler.parser.RecoveryScannerData;
21
import org.eclipse.jdt.internal.compiler.parser.RecoveryScannerData;
19
import org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
22
import org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
20
import org.eclipse.jdt.internal.compiler.util.HashtableOfObjectToIntArray;
23
import org.eclipse.jdt.internal.compiler.util.HashtableOfObjectToIntArray;
Lines 335-338 Link Here
335
		}
338
		}
336
		return foundProblems;
339
		return foundProblems;
337
	}
340
	}
341
342
	public void endVisit(ExpressionStatement node) {
343
		endVisitNode(node);
344
		if ((node.getFlags() & ASTNode.RECOVERED) == 0) return; 
345
		Expression expression = node.getExpression();
346
		if (expression.getNodeType() == ASTNode.ASSIGNMENT) {
347
			Assignment assignment = (Assignment) expression;
348
			Expression rightHandSide = assignment.getRightHandSide();
349
			if (rightHandSide.getNodeType() == ASTNode.SIMPLE_NAME) {
350
				SimpleName simpleName = (SimpleName) rightHandSide;
351
				if (CharOperation.equals(RecoveryScanner.FAKE_IDENTIFIER, simpleName.getIdentifier().toCharArray())) {
352
					final Expression expression2 = (Expression) ASTNode.copySubtree(node.getAST(), assignment.getLeftHandSide());
353
					expression2.setFlags(expression2.getFlags() | ASTNode.RECOVERED);
354
					node.setExpression(expression2);
355
				}
356
			}
357
		}
358
	}
359
	
360
	public void endVisit(VariableDeclarationStatement node) {
361
		endVisitNode(node);
362
		List fragments = node.fragments();
363
		for (int i = 0, max = fragments.size(); i <max; i++) {
364
			VariableDeclarationFragment fragment = (VariableDeclarationFragment) fragments.get(i);
365
			Expression expression = fragment.getInitializer();
366
			if (expression == null) continue;
367
			if ((expression.getFlags() & ASTNode.RECOVERED) == 0) continue;
368
			if (expression.getNodeType() == ASTNode.SIMPLE_NAME) {
369
				SimpleName simpleName = (SimpleName) expression;
370
				if (CharOperation.equals(RecoveryScanner.FAKE_IDENTIFIER, simpleName.getIdentifier().toCharArray())) {
371
					fragment.setInitializer(null);
372
					fragment.setFlags(node.getFlags() | ASTNode.RECOVERED);
373
				}			
374
			}
375
		}
376
	}
338
}
377
}

Return to bug 129330