/**
 * This is a sample class, to demonstrate the problems
 * with the Eclipse formatter.
 * @author Adalbert Homa
 * @version 1.0
 */
public class FormatTest2 {

    public void testMethod() {
        for (int i = 0; i < 10; i++) {
            // Next line show the problem
                AccountAccessGroupBean aags = new AccountAccessGroupBean(//
        "a", // groupId
        "b", // groupName 
        "c", // lastModified
        "d" // modifiedFlag
    );
            // The second line is without end of line comments
            AccountAccessGroupBean b =
                new AccountAccessGroupBean("a", "b", "c", "d");
        }
    }

    private static class AccountAccessGroupBean {
        AccountAccessGroupBean(String a, String b, String c, String d) {
        }
    }
}