Bug 74580 formatting for condition quick assists
3.1 M2 test pass The formatting of conditionals modified by the new quick assists is misleading. Consider the following: if (c1) { one(); } else if (c2) { two(); } else { three(); } translates into: if (!c1) if (c2) { two(); } else { three(); } else { one(); } which is correct, but it is barely visible from the formatting that the last else clause belongs to the first if statement. I would expect this (with or without the braces): if (!c1) if (c2) { two(); } else { three(); } else { one(); }
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/AdvancedQuickAssistProcessor.java
Expression leftCondition = null;
		Expression rightCondition = null;
		Expression currentExpression = infixExpression;
		while (true) {
			if (leftCondition == null) {
				Expression leftOperand = ((InfixExpression) currentExpression).getLeftOperand();
				if (leftOperand instanceof ParenthesizedExpression)
					leftOperand = ((ParenthesizedExpression) leftOperand).getExpression();
				Expression leftPlaceholder = (Expression) rewrite.createCopyTarget(leftOperand);
				leftCondition = leftPlaceholder;
			}
			Expression rightOperand = ((InfixExpression) currentExpression).getRightOperand();
			if (rightCondition == null) {
				if (rightOperand instanceof ParenthesizedExpression)
					rightOperand = ((ParenthesizedExpression) rightOperand).getExpression();
				Expression rightPlaceholder = (Expression) rewrite.createCopyTarget(rightOperand);
				rightCondition = rightPlaceholder;
			} else {
				Expression rightPlaceholder = (Expression) rewrite.createCopyTarget(rightOperand);
				InfixExpression infix = ast.newInfixExpression();
				infix.setOperator(andOperator);
				infix.setLeftOperand(rightCondition);
				infix.setRightOperand(rightPlaceholder);
				rightCondition = infix;
			}
			if (currentExpression.getParent() == ifStatement)
				break;
			currentExpression = (Expression) currentExpression.getParent();
		}