diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java index 9d482eb606d..5dd879706fc 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/DefaultRunSIProvider.java @@ -273,7 +273,8 @@ public class DefaultRunSIProvider implements IExternalScannerInfoProvider { // of the language as long as the encoding is set to UTF-8. // English language is chosen because parser relies on English messages // in the output of the 'gcc -v' command. - props.put("LC_ALL", "en_US.UTF-8"); //$NON-NLS-1$ //$NON-NLS-2$ + props.put("LANGUAGE", "en"); // override for GNU gettext //$NON-NLS-1$ //$NON-NLS-2$ + props.put("LC_ALL", "en_US.UTF-8"); // for other parts of the system libraries //$NON-NLS-1$ //$NON-NLS-2$ return props; } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/astwriter/ASTWriterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/astwriter/ASTWriterTest.java index 29f9781df2a..8eea3e22ddf 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/astwriter/ASTWriterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/astwriter/ASTWriterTest.java @@ -97,7 +97,7 @@ public class ASTWriterTest extends RewriteBaseTest { IScanner scanner = AST2BaseTest.createScanner(codeReader, language, ParserMode.COMPLETE_PARSE, scannerInfo); - ISourceCodeParser parser2 = null; + ISourceCodeParser parser = null; if (language == ParserLanguage.CPP) { ICPPParserExtensionConfiguration config = null; if (useGNUExtensions) { @@ -105,7 +105,7 @@ public class ASTWriterTest extends RewriteBaseTest { } else { config = new ANSICPPParserExtensionConfiguration(); } - parser2 = new GNUCPPSourceParser(scanner, ParserMode.COMPLETE_PARSE, NULL_LOG, config); + parser = new GNUCPPSourceParser(scanner, ParserMode.COMPLETE_PARSE, NULL_LOG, config); } else { ICParserExtensionConfiguration config = null; @@ -115,9 +115,9 @@ public class ASTWriterTest extends RewriteBaseTest { config = new ANSICParserExtensionConfiguration(); } - parser2 = new GNUCSourceParser(scanner, ParserMode.COMPLETE_PARSE, NULL_LOG, config); + parser = new GNUCSourceParser(scanner, ParserMode.COMPLETE_PARSE, NULL_LOG, config); } - return parser2; + return parser; } private boolean getGNUExtension(TestSourceFile file) { diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/astwriter/SourceRewriteTester.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/astwriter/SourceRewriteTester.java index ee1b12a3f24..2abf569e661 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/astwriter/SourceRewriteTester.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/astwriter/SourceRewriteTester.java @@ -15,7 +15,6 @@ import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; -import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -35,18 +34,17 @@ public class SourceRewriteTester extends TestSuite { private static final String codeTypeRegexp = "//%(C|CPP)( GNU)?$"; //$NON-NLS-1$ private static final String resultRegexp = "//=.*$"; //$NON-NLS-1$ - enum MatcherState{skip, inTest, inSource, inExpectedResult} + enum MatcherState { skip, inTest, inSource, inExpectedResult } protected static BufferedReader createReader(String file) throws IOException { Bundle bundle = CTestPlugin.getDefault().getBundle(); Path path = new Path(file); - String file2 = FileLocator.toFileURL(FileLocator.find(bundle, path, null)).getFile(); - return new BufferedReader(new FileReader(file2)); + file = FileLocator.toFileURL(FileLocator.find(bundle, path, null)).getFile(); + return new BufferedReader(new FileReader(file)); } public static Test suite(String name, String file)throws Exception { BufferedReader in = createReader(file); - ArrayList testCases = createTests(in); in.close(); return createSuite(testCases, name); @@ -54,9 +52,7 @@ public class SourceRewriteTester extends TestSuite { private static TestSuite createSuite(ArrayList testCases, String name) { TestSuite suite = new TestSuite(name); - Iterator it = testCases.iterator(); - while (it.hasNext()) { - RewriteBaseTest subject = it.next(); + for (RewriteBaseTest subject : testCases) { suite.addTest(subject); } return suite; @@ -155,7 +151,8 @@ public class SourceRewriteTester extends TestSuite { return ParserLanguage.C; } - private static RewriteBaseTest createTestClass(String testName, ASTWriterTestSourceFile file) throws Exception { + private static RewriteBaseTest createTestClass(String testName, ASTWriterTestSourceFile file) + throws Exception { ASTWriterTest test = new ASTWriterTest(testName, file); TextSelection sel = file.getSelection(); if (sel != null) { diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/AppendTestSuite.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/AppendTestSuite.java index f4cce8ff6e7..01b7186116f 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/AppendTestSuite.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/AppendTestSuite.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.append; @@ -16,13 +16,11 @@ import junit.framework.TestSuite; /** * @author Thomas Corbat - * */ -public class AppendTestSuite{ +public class AppendTestSuite { public static Test suite() throws Exception { - TestSuite suite = new TestSuite("Changegenerator Append Child Tests"); - + TestSuite suite = new TestSuite("ChangeGenerator Append Child Tests"); suite.addTest(ParameterTest.suite()); suite.addTest(ParameterToListTest.suite()); suite.addTest(PointerToParameterTest.suite()); @@ -32,7 +30,6 @@ public class AppendTestSuite{ suite.addTest(ArrayModifierTest.suite()); suite.addTest(ExpressionTest.suite()); suite.addTest(ArraySizeExpressionTest.suite()); - return suite; } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ArrayModifierTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ArrayModifierTest.java index c076cf39eea..5980bd53a73 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ArrayModifierTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ArrayModifierTest.java @@ -49,13 +49,14 @@ public class ArrayModifierTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof IASTArrayDeclarator) { - IASTArrayDeclarator arrayDeclarator = (IASTArrayDeclarator)declarator; + IASTArrayDeclarator arrayDeclarator = (IASTArrayDeclarator) declarator; arrayDeclarator.getArrayModifiers(); IASTArrayModifier newModifier = new CPPASTArrayModifier(); IASTExpression expr = new CPPASTLiteralExpression( IASTLiteralExpression.lk_integer_constant, "3".toCharArray()); //$NON-NLS-1$ newModifier.setConstantExpression(expr); - ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, declarator, newModifier, null); + ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, + declarator, newModifier, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ArraySizeExpressionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ArraySizeExpressionTest.java index 7a382a59501..484f6037c8c 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ArraySizeExpressionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ArraySizeExpressionTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.append; @@ -39,8 +39,7 @@ public class ArraySizeExpressionTest extends ChangeGeneratorTest { } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitExpressions = true; @@ -53,8 +52,9 @@ public class ArraySizeExpressionTest extends ChangeGeneratorTest { IASTTypeId id= newExpression.getTypeId(); IASTArrayDeclarator dtor= (IASTArrayDeclarator) id.getAbstractDeclarator(); IASTArrayModifier[] mods= dtor.getArrayModifiers(); - IASTArrayModifier add= new CPPASTArrayModifier(new CPPASTLiteralExpression(0, "5")); - ASTModification modification = new ASTModification(ASTModification.ModificationKind.APPEND_CHILD, dtor, add, null); + IASTArrayModifier add= new CPPASTArrayModifier(new CPPASTLiteralExpression(0, "5".toCharArray())); + ASTModification modification = new ASTModification(ASTModification.ModificationKind.APPEND_CHILD, + dtor, add, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/CtorChainInitializerTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/CtorChainInitializerTest.java index 52ba71e2ecc..5f785a29d27 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/CtorChainInitializerTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/CtorChainInitializerTest.java @@ -33,14 +33,13 @@ public class CtorChainInitializerTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "TestClass::TestClass(int a, int b):beta(b){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "TestClass::TestClass(int a, int b):beta(b), alpha(a){\n}\n\n"; //$NON-NLS-1$ + source = "TestClass::TestClass(int a, int b) :\n\t\tbeta(b) {\n}\n"; //$NON-NLS-1$ + expectedSource = "TestClass::TestClass(int a, int b) :\n\t\tbeta(b), alpha(a) {\n}\n"; //$NON-NLS-1$ super.setUp(); } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitDeclarations = true; @@ -49,12 +48,13 @@ public class CtorChainInitializerTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclaration decl) { if (decl instanceof CPPASTFunctionDefinition) { - CPPASTFunctionDefinition fdef = (CPPASTFunctionDefinition)decl; + CPPASTFunctionDefinition fdef = (CPPASTFunctionDefinition) decl; CPPASTIdExpression initExpr = new CPPASTIdExpression(new CPPASTName("a".toCharArray())); //$NON-NLS-1$ CPPASTName initName = new CPPASTName("alpha".toCharArray()); //$NON-NLS-1$ ICPPASTConstructorChainInitializer newInitializer = new CPPASTConstructorChainInitializer(initName, null); newInitializer.setInitializerValue(initExpr); - ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, fdef, newInitializer, null); + ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, + fdef, newInitializer, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ExceptionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ExceptionTest.java index 64c10ec2da7..9a9a1d0519a 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ExceptionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ExceptionTest.java @@ -35,8 +35,8 @@ public class ExceptionTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void foo(int parameter){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int parameter) throw (int){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int parameter) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int parameter) throw (int) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -57,7 +57,8 @@ public class ExceptionTest extends ChangeGeneratorTest { exDeclSpec.setType(IASTSimpleDeclSpecifier.t_int); exception.setDeclSpecifier(exDeclSpec); exception.setAbstractDeclarator(exceptionDeclarator); - ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, declarator, exception, null); + ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, + declarator, exception, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ExpressionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ExpressionTest.java index ee3fcf6c906..fe2e6e295be 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ExpressionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ExpressionTest.java @@ -33,8 +33,8 @@ public class ExpressionTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void main(){int s = 0, c = 0, h = 0;\ns = 3, h = 5;}"; //$NON-NLS-1$ - expectedSource = "void main(){int s = 0, c = 0, h = 0;\ns = 3, h = 5, c = 9;}"; //$NON-NLS-1$ + source = "void main() {\n\tint s = 0, c = 0, h = 0;\n\ts = 3, h = 5;\n}"; //$NON-NLS-1$ + expectedSource = "void main() {\n\tint s = 0, c = 0, h = 0;\n\ts = 3, h = 5, c = 9;\n}"; //$NON-NLS-1$ super.setUp(); } @Override @@ -49,18 +49,19 @@ public class ExpressionTest extends ChangeGeneratorTest { if (expression instanceof IASTExpressionList) { IASTExpressionList expressionList = (IASTExpressionList) expression; expressionList.getExpressions(); - CPPASTBinaryExpression binEx = new CPPASTBinaryExpression(IASTBinaryExpression.op_assign, new CPPASTIdExpression(new CPPASTName("c".toCharArray())), new CPPASTLiteralExpression(0, "9")); //$NON-NLS-1$ //$NON-NLS-2$ - ASTModification modification = new ASTModification(ASTModification.ModificationKind.APPEND_CHILD, expressionList, binEx, null); + CPPASTIdExpression idExpression = new CPPASTIdExpression(new CPPASTName("c".toCharArray())); + CPPASTBinaryExpression binEx = new CPPASTBinaryExpression(IASTBinaryExpression.op_assign, + idExpression, new CPPASTLiteralExpression(0, "9".toCharArray())); //$NON-NLS-1$ //$NON-NLS-2$ + ASTModification modification = new ASTModification(ASTModification.ModificationKind.APPEND_CHILD, + expressionList, binEx, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; } - }; } public static Test suite() { return new ExpressionTest(); - } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ParameterTest.java index 82a494a31b7..1133eba9ebb 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ParameterTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.append; @@ -34,8 +34,8 @@ public class ParameterTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void foo(int existing){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int existing, int newParameter){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int existing) {\n}\n"; //$NON-NLS-1$ + expectedSource = "void foo(int existing, int newParameter) {\n}\n"; //$NON-NLS-1$ super.setUp(); } @@ -49,7 +49,7 @@ public class ParameterTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; CPPASTParameterDeclaration insertedParameter = new CPPASTParameterDeclaration(); CPPASTDeclarator parameterDeclarator = new CPPASTDeclarator(); @@ -59,7 +59,8 @@ public class ParameterTest extends ChangeGeneratorTest { CPPASTSimpleDeclSpecifier parameterDeclSpec = new CPPASTSimpleDeclSpecifier(); parameterDeclSpec.setType(IASTSimpleDeclSpecifier.t_int); insertedParameter.setDeclSpecifier(parameterDeclSpec); - ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, functionDeclarator, insertedParameter, null); + ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, + functionDeclarator, insertedParameter, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ParameterToListTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ParameterToListTest.java index 82bfec4dd84..3ebf4630255 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ParameterToListTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/ParameterToListTest.java @@ -34,8 +34,8 @@ public class ParameterToListTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void foo(){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int newParameter){\n}\n\n"; //$NON-NLS-1$ + source = "void foo() {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int newParameter) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -49,7 +49,7 @@ public class ParameterToListTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; CPPASTParameterDeclaration insertedParameter = new CPPASTParameterDeclaration(); CPPASTDeclarator parameterDeclarator = new CPPASTDeclarator(); @@ -59,7 +59,8 @@ public class ParameterToListTest extends ChangeGeneratorTest { CPPASTSimpleDeclSpecifier parameterDeclSpec = new CPPASTSimpleDeclSpecifier(); parameterDeclSpec.setType(IASTSimpleDeclSpecifier.t_int); insertedParameter.setDeclSpecifier(parameterDeclSpec); - ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, functionDeclarator, insertedParameter, null); + ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, + functionDeclarator, insertedParameter, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/PointerToParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/PointerToParameterTest.java index 1daa37a8b59..b80a12b223e 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/PointerToParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/PointerToParameterTest.java @@ -31,8 +31,8 @@ public class PointerToParameterTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void foo(int parameter){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int *parameter){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int parameter) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int *parameter) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -46,12 +46,13 @@ public class PointerToParameterTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTParameterDeclaration[] parameters = functionDeclarator.getParameters(); for (IASTParameterDeclaration curParam : parameters){ if (String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("parameter")){ //$NON-NLS-1$ CPPASTPointer addedPointer = new CPPASTPointer(); - ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, curParam.getDeclarator(), addedPointer, null); + ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, + curParam.getDeclarator(), addedPointer, null); modStore.storeModification(null, modification); } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/PointerToPointerParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/PointerToPointerParameterTest.java index f9c2e1837ca..7e5d9497a3e 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/PointerToPointerParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/append/PointerToPointerParameterTest.java @@ -31,8 +31,8 @@ public class PointerToPointerParameterTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void foo(int *parameter){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int **parameter){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int *parameter) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int **parameter) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -46,12 +46,13 @@ public class PointerToPointerParameterTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTParameterDeclaration[] parameters = functionDeclarator.getParameters(); for (IASTParameterDeclaration curParam : parameters){ if (String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("parameter")){ //$NON-NLS-1$ CPPASTPointer addedPointer = new CPPASTPointer(); - ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, curParam.getDeclarator(), addedPointer, null); + ASTModification modification = new ASTModification(ModificationKind.APPEND_CHILD, + curParam.getDeclarator(), addedPointer, null); modStore.storeModification(null, modification); } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/AddDeclarationBug.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/AddDeclarationBug.java index a4ee61615bd..70289c4204e 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/AddDeclarationBug.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/AddDeclarationBug.java @@ -69,7 +69,8 @@ public class AddDeclarationBug extends ChangeGeneratorTest { returnTyp.setType(IASTSimpleDeclSpecifier.t_int); newDecl.setDeclSpecifier(returnTyp); - IASTStandardFunctionDeclarator declarator = new CPPASTFunctionDeclarator(new CPPASTName("exp".toCharArray())); //$NON-NLS-1$ + IASTStandardFunctionDeclarator declarator = new CPPASTFunctionDeclarator( + new CPPASTName("exp".toCharArray())); //$NON-NLS-1$ IASTSimpleDeclSpecifier paramTyp = new CPPASTSimpleDeclSpecifier(); paramTyp.setType(IASTSimpleDeclSpecifier.t_int); IASTDeclarator decl = new CPPASTDeclarator(new CPPASTName("i".toCharArray())); //$NON-NLS-1$ @@ -77,7 +78,8 @@ public class AddDeclarationBug extends ChangeGeneratorTest { declarator.addParameterDeclaration(param); newDecl.addDeclarator(declarator); - ASTModification mod = new ASTModification(ModificationKind.APPEND_CHILD, classNode, newDecl, null); + ASTModification mod = new ASTModification(ModificationKind.APPEND_CHILD, classNode, + newDecl, null); modStore.storeModification(null, mod); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ArrayModifierTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ArrayModifierTest.java index 68f994fbdeb..06631d32759 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ArrayModifierTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ArrayModifierTest.java @@ -60,7 +60,8 @@ public class ArrayModifierTest extends ChangeGeneratorTest { IASTExpression expr = new CPPASTLiteralExpression(IASTLiteralExpression.lk_integer_constant, "5".toCharArray()); //$NON-NLS-1$ newModifier.setConstantExpression(expr); - ASTModification modification = new ASTModification(ModificationKind.INSERT_BEFORE, modifiers[0], newModifier, null); + ASTModification modification = new ASTModification(ModificationKind.INSERT_BEFORE, + modifiers[0], newModifier, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ArraySizeExpressionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ArraySizeExpressionTest.java index df71239e075..35b4e438051 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ArraySizeExpressionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ArraySizeExpressionTest.java @@ -59,7 +59,8 @@ public class ArraySizeExpressionTest extends ChangeGeneratorTest { IASTArrayModifier[] mods= dtor.getArrayModifiers(); IASTArrayModifier add= new CPPASTArrayModifier( new CPPASTLiteralExpression(IASTLiteralExpression.lk_integer_constant, "6".toCharArray())); - ASTModification modification = new ASTModification(ASTModification.ModificationKind.INSERT_BEFORE, mods[0], add, null); + ASTModification modification = new ASTModification(ASTModification.ModificationKind.INSERT_BEFORE, + mods[0], add, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/CtorChainInitializerTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/CtorChainInitializerTest.java index 983348efcbb..d99d7cb36fb 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/CtorChainInitializerTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/CtorChainInitializerTest.java @@ -60,7 +60,6 @@ public class CtorChainInitializerTest extends ChangeGeneratorTest { newInitializer.setInitializerValue(initExpr); ASTModification modification = new ASTModification(ModificationKind.INSERT_BEFORE, ctorInitializer, newInitializer, null); modStore.storeModification(null, modification); - } return PROCESS_CONTINUE; } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ExceptionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ExceptionTest.java index 4612e5a13fb..2346209def5 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ExceptionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ExceptionTest.java @@ -54,7 +54,7 @@ public class ExceptionTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTTypeId existingException = functionDeclarator.getExceptionSpecification()[0]; IASTTypeId exception = new CPPASTTypeId(); @@ -64,9 +64,9 @@ public class ExceptionTest extends ChangeGeneratorTest { exDeclSpec.setType(IASTSimpleDeclSpecifier.t_int); exception.setDeclSpecifier(exDeclSpec); exception.setAbstractDeclarator(exceptionDeclarator); - ASTModification modification = new ASTModification(ModificationKind.INSERT_BEFORE, existingException, exception, null); + ASTModification modification = new ASTModification(ModificationKind.INSERT_BEFORE, + existingException, exception, null); modStore.storeModification(null, modification); - } return PROCESS_CONTINUE; } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ExpressionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ExpressionTest.java index af06f5d44fb..cd347cb44dc 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ExpressionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/ExpressionTest.java @@ -37,8 +37,8 @@ public class ExpressionTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void main(){int s = 0, c = 0, h = 0;\ns = 3, h = 5;}"; //$NON-NLS-1$ - expectedSource = "void main(){int s = 0, c = 0, h = 0;\ns = 3, c = 9, h = 5;}"; //$NON-NLS-1$ + source = "void main() {\n\tint s = 0, c = 0, h = 0;\n\ts = 3, h = 5;\n}"; //$NON-NLS-1$ + expectedSource = "void main() {\n\tint s = 0, c = 0, h = 0;\n\ts = 3, c = 9, h = 5;\n}"; //$NON-NLS-1$ super.setUp(); } @@ -54,8 +54,11 @@ public class ExpressionTest extends ChangeGeneratorTest { if (expression instanceof IASTExpressionList) { IASTExpressionList expressionList = (IASTExpressionList) expression; IASTExpression[] expressions = expressionList.getExpressions(); - CPPASTBinaryExpression binEx = new CPPASTBinaryExpression(IASTBinaryExpression.op_assign, new CPPASTIdExpression(new CPPASTName("c".toCharArray())), new CPPASTLiteralExpression(0, "9")); //$NON-NLS-1$ //$NON-NLS-2$ - ASTModification modification = new ASTModification(ASTModification.ModificationKind.INSERT_BEFORE, expressions[1], binEx, null); + CPPASTIdExpression idExpression = new CPPASTIdExpression(new CPPASTName("c".toCharArray())); //$NON-NLS-1$ + CPPASTBinaryExpression binEx = new CPPASTBinaryExpression(IASTBinaryExpression.op_assign, + idExpression, new CPPASTLiteralExpression(0, "9".toCharArray())); //$NON-NLS-1$ + ASTModification modification = new ASTModification(ASTModification.ModificationKind.INSERT_BEFORE, + expressions[1], binEx, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/FirstParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/FirstParameterTest.java index 52e3fc5e10d..13db57b275b 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/FirstParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/FirstParameterTest.java @@ -39,8 +39,8 @@ public class FirstParameterTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void foo(int a){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int newParameter, int a){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int a) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int newParameter, int a) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -54,10 +54,10 @@ public class FirstParameterTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTParameterDeclaration[] parameters = functionDeclarator.getParameters(); - for(IASTParameterDeclaration curParam : parameters){ - if(String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("a")){ //$NON-NLS-1$ + for (IASTParameterDeclaration curParam : parameters){ + if (String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("a")){ //$NON-NLS-1$ CPPASTParameterDeclaration insertedParameter = new CPPASTParameterDeclaration(); CPPASTDeclarator parameterDeclarator = new CPPASTDeclarator(); CPPASTName parameterName = new CPPASTName("newParameter".toCharArray()); //$NON-NLS-1$ @@ -66,7 +66,8 @@ public class FirstParameterTest extends ChangeGeneratorTest { CPPASTSimpleDeclSpecifier parameterDeclSpec = new CPPASTSimpleDeclSpecifier(); parameterDeclSpec.setType(IASTSimpleDeclSpecifier.t_int); insertedParameter.setDeclSpecifier(parameterDeclSpec); - ASTModification modification = new ASTModification(ModificationKind.INSERT_BEFORE, curParam, insertedParameter, null); + ASTModification modification = new ASTModification(ModificationKind.INSERT_BEFORE, + curParam, insertedParameter, null); modStore.storeModification(null, modification); } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/MultilineWhitespaceHandlingTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/MultilineWhitespaceHandlingTest.java index fd334b535b6..8384465ad83 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/MultilineWhitespaceHandlingTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/MultilineWhitespaceHandlingTest.java @@ -38,8 +38,8 @@ public class MultilineWhitespaceHandlingTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void foo() {\r\n\r\n\tfor(int i = 0; i < 10; i++) {\r\n\r\n\t}\r\n}\r\n"; //$NON-NLS-1$ - expectedSource = "void foo() {\r\n\r\n\tfor(int i = 0; i < 10; i++) {\r\n\t\tint i;\r\n\t\tint j;\r\n\r\n\t}\r\n}\r\n"; //$NON-NLS-1$ + source = "void foo() {\n\tfor (int i = 0; i < 10; i++) {\n\n\n\t}\n}\n"; //$NON-NLS-1$ + expectedSource = "void foo() {\n\tfor (int i = 0; i < 10; i++) {\n\t\tint i;\n\t\tint j;\n\t}\n}\n"; //$NON-NLS-1$ super.setUp(); } @@ -73,7 +73,8 @@ public class MultilineWhitespaceHandlingTest extends ChangeGeneratorTest { newSimpleDeclaration.addDeclarator(nf.newDeclarator(nf.newName(variableName.toCharArray()))); IASTDeclarationStatement newDeclaration = nf.newDeclarationStatement(newSimpleDeclaration); - ASTModification modification = new ASTModification(ASTModification.ModificationKind.APPEND_CHILD, compoundStatement, newDeclaration, null); + ASTModification modification = new ASTModification(ASTModification.ModificationKind.APPEND_CHILD, + compoundStatement, newDeclaration, null); modStore.storeModification(null, modification); } }; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/PointerParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/PointerParameterTest.java index aebdd2799d6..d71ad4fe2ad 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/PointerParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/PointerParameterTest.java @@ -36,8 +36,8 @@ public class PointerParameterTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void foo(int *parameter){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int **parameter){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int *parameter) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int **parameter) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/SelfInsertionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/SelfInsertionTest.java index ebaf97b3a3c..d93bc36e7a5 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/SelfInsertionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/insertbefore/SelfInsertionTest.java @@ -51,7 +51,8 @@ public class SelfInsertionTest extends ChangeGeneratorTest { IASTForStatement forStatement = (IASTForStatement) statement; IASTCompoundStatement compoundStatement = (IASTCompoundStatement) forStatement.getBody(); - ASTModification modification = new ASTModification(ASTModification.ModificationKind.APPEND_CHILD, compoundStatement, forStatement, null); + ASTModification modification = new ASTModification(ASTModification.ModificationKind.APPEND_CHILD, + compoundStatement, forStatement, null); modStore.storeModification(null, modification); } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/CtorChainInitializerTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/CtorChainInitializerTest.java index d133af89f15..efa059ed979 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/CtorChainInitializerTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/CtorChainInitializerTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.remove; @@ -24,14 +24,14 @@ import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification.ModificationKin public class CtorChainInitializerTest extends ChangeGeneratorTest { - public CtorChainInitializerTest(){ + public CtorChainInitializerTest() { super("Remove Ctor Initializer"); //$NON-NLS-1$ } @Override protected void setUp() throws Exception { - source = "TestClass::TestClass(int a):alpha(a){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "TestClass::TestClass(int a){\n}\n\n"; //$NON-NLS-1$ + source = "TestClass::TestClass(int a):alpha(a) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "TestClass::TestClass(int a) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -40,8 +40,7 @@ public class CtorChainInitializerTest extends ChangeGeneratorTest { } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitDeclarators = true; @@ -50,11 +49,12 @@ public class CtorChainInitializerTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; ICPPASTConstructorChainInitializer[] ctorInitializers = functionDeclarator.getConstructorChain(); - for(ICPPASTConstructorChainInitializer curInitializer : ctorInitializers){ - ASTModification modification = new ASTModification(ModificationKind.REPLACE, curInitializer, null, null); - modStore.storeModification(null, modification); + for (ICPPASTConstructorChainInitializer curInitializer : ctorInitializers){ + ASTModification modification = new ASTModification(ModificationKind.REPLACE, + curInitializer, null, null); + modStore.storeModification(null, modification); } } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/ExceptionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/ExceptionTest.java index d696478de52..c267f02e629 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/ExceptionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/ExceptionTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.remove; @@ -30,8 +30,8 @@ public class ExceptionTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void foo(int parameter) throw (int){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int parameter) throw (){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int parameter) throw (int) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int parameter) throw () {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -40,8 +40,7 @@ public class ExceptionTest extends ChangeGeneratorTest { } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitDeclarators = true; @@ -50,11 +49,12 @@ public class ExceptionTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTTypeId[] exceptions = functionDeclarator.getExceptionSpecification(); - for(IASTTypeId curException : exceptions){ - ASTModification modification = new ASTModification(ModificationKind.REPLACE, curException, null, null); - modStore.storeModification(null, modification); + for (IASTTypeId curException : exceptions) { + ASTModification modification = new ASTModification(ModificationKind.REPLACE, + curException, null, null); + modStore.storeModification(null, modification); } } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/ExpressionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/ExpressionTest.java index 9db30320ffd..80ee20081ae 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/ExpressionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/ExpressionTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.remove; @@ -20,20 +20,16 @@ import org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.ChangeGenerator import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModificationStore; - - - - public class ExpressionTest extends ChangeGeneratorTest { - public ExpressionTest(){ + public ExpressionTest() { super("Remove Expression"); //$NON-NLS-1$ } @Override protected void setUp() throws Exception { - source = "void main(){int s = 0, c = 0, h = 0;\ns = 3, c = 4, h = 5;}"; //$NON-NLS-1$ - expectedSource = "void main(){int s = 0, c = 0, h = 0;\ns = 3, h = 5;}"; //$NON-NLS-1$ + source = "void main() {\n\tint s = 0, c = 0, h = 0;\n\ts = 3, c = 4, h = 5;\n}"; //$NON-NLS-1$ + expectedSource = "void main() {\n\tint s = 0, c = 0, h = 0;\n\ts = 3, h = 5;\n}"; //$NON-NLS-1$ super.setUp(); } @@ -42,8 +38,7 @@ public class ExpressionTest extends ChangeGeneratorTest { } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitExpressions = true; @@ -54,13 +49,12 @@ public class ExpressionTest extends ChangeGeneratorTest { if (expression instanceof IASTExpressionList) { IASTExpressionList expressionList = (IASTExpressionList) expression; IASTExpression[] expressions = expressionList.getExpressions(); - ASTModification modification = new ASTModification(ASTModification.ModificationKind.REPLACE, expressions[1], null, null); + ASTModification modification = new ASTModification(ASTModification.ModificationKind.REPLACE, + expressions[1], null, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; } }; } - - } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/FirstParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/FirstParameterTest.java index ef0eb694f3d..9038843fd12 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/FirstParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/FirstParameterTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.remove; @@ -22,31 +22,25 @@ import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModificationStore; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification.ModificationKind; - - - - public class FirstParameterTest extends ChangeGeneratorTest { - public FirstParameterTest(){ + public FirstParameterTest() { super("Remove First Parameter Node"); //$NON-NLS-1$ } @Override protected void setUp() throws Exception { - source = "void foo(int a, int b, int c){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int b, int c){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int a, int b, int c) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int b, int c) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } public static Test suite() { return new FirstParameterTest(); - } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitDeclarators = true; @@ -55,11 +49,12 @@ public class FirstParameterTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTParameterDeclaration[] parameters = functionDeclarator.getParameters(); - for(IASTParameterDeclaration curParam : parameters){ - if(String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("a")){ //$NON-NLS-1$ - ASTModification modification = new ASTModification(ModificationKind.REPLACE, curParam, null, null); + for (IASTParameterDeclaration curParam : parameters){ + if (String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("a")) { //$NON-NLS-1$ + ASTModification modification = new ASTModification(ModificationKind.REPLACE, + curParam, null, null); modStore.storeModification(null, modification); } } @@ -69,6 +64,4 @@ public class FirstParameterTest extends ChangeGeneratorTest { }; } - - } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/LastParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/LastParameterTest.java index 247af14a7b2..479ded5bc10 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/LastParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/LastParameterTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.remove; @@ -22,18 +22,16 @@ import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModificationStore; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification.ModificationKind; - - public class LastParameterTest extends ChangeGeneratorTest { - public LastParameterTest(){ + public LastParameterTest() { super("Remove Last Parameter Node"); //$NON-NLS-1$ } @Override protected void setUp() throws Exception { - source = "void foo(int a, int b, int c){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int a, int b){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int a, int b, int c) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int a, int b) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -42,8 +40,7 @@ public class LastParameterTest extends ChangeGeneratorTest { } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitDeclarators = true; @@ -52,17 +49,17 @@ public class LastParameterTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTParameterDeclaration[] parameters = functionDeclarator.getParameters(); - for(IASTParameterDeclaration curParam : parameters){ - if(String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("c")){ //$NON-NLS-1$ - ASTModification modification = new ASTModification(ModificationKind.REPLACE, curParam, null, null); + for (IASTParameterDeclaration curParam : parameters){ + if (String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("c")) { //$NON-NLS-1$ + ASTModification modification = new ASTModification(ModificationKind.REPLACE, + curParam, null, null); modStore.storeModification(null, modification); } } } - return PROCESS_CONTINUE; } }; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/MiddleParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/MiddleParameterTest.java index bce8240daa9..04186f85057 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/MiddleParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/MiddleParameterTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.remove; @@ -22,10 +22,6 @@ import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModificationStore; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification.ModificationKind; - - - - public class MiddleParameterTest extends ChangeGeneratorTest { public MiddleParameterTest(){ @@ -34,8 +30,8 @@ public class MiddleParameterTest extends ChangeGeneratorTest { @Override protected void setUp() throws Exception { - source = "void foo(int a, int b, int c){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int a, int c){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int a, int b, int c) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int a, int c) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -44,10 +40,8 @@ public class MiddleParameterTest extends ChangeGeneratorTest { return new MiddleParameterTest(); } - @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitDeclarators = true; @@ -56,11 +50,12 @@ public class MiddleParameterTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTParameterDeclaration[] parameters = functionDeclarator.getParameters(); - for(IASTParameterDeclaration curParam : parameters){ - if(String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("b")){ //$NON-NLS-1$ - ASTModification modification = new ASTModification(ModificationKind.REPLACE, curParam, null, null); + for (IASTParameterDeclaration curParam : parameters){ + if (String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("b")) { //$NON-NLS-1$ + ASTModification modification = new ASTModification(ModificationKind.REPLACE, + curParam, null, null); modStore.storeModification(null, modification); } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/PointerInParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/PointerInParameterTest.java index 40345c68d49..c1b61f6d94b 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/PointerInParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/PointerInParameterTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.remove; @@ -25,25 +25,23 @@ import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification.ModificationKin public class PointerInParameterTest extends ChangeGeneratorTest { - public PointerInParameterTest(){ + public PointerInParameterTest() { super("Remove Pointer in Parameter"); //$NON-NLS-1$ } @Override protected void setUp() throws Exception { - source = "void foo(int *parameter){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int parameter){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int *parameter) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int parameter) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } - public static Test suite() { return new PointerInParameterTest(); } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitDeclarators = true; @@ -52,18 +50,18 @@ public class PointerInParameterTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTParameterDeclaration[] parameters = functionDeclarator.getParameters(); - for(IASTParameterDeclaration curParam : parameters){ - if(String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("parameter")){ //$NON-NLS-1$ + for (IASTParameterDeclaration curParam : parameters){ + if (String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("parameter")){ //$NON-NLS-1$ IASTPointerOperator pointer = curParam.getDeclarator().getPointerOperators()[0]; - ASTModification modification = new ASTModification(ModificationKind.REPLACE, pointer, null, null); + ASTModification modification = new ASTModification(ModificationKind.REPLACE, + pointer, null, null); modStore.storeModification(null, modification); } } } - return PROCESS_CONTINUE; } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/RemoveTestSuite.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/RemoveTestSuite.java index be547e43068..2cdc0314d3a 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/RemoveTestSuite.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/RemoveTestSuite.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.remove; @@ -16,13 +16,11 @@ import junit.framework.TestSuite; /** * @author Thomas Corbat - * */ -public class RemoveTestSuite{ +public class RemoveTestSuite { public static Test suite() throws Exception { - TestSuite suite = new TestSuite("Changegenerator Remove Tests"); - + TestSuite suite = new TestSuite("ChangeGenerator Remove Tests"); suite.addTest(DeclarationTest.suite()); suite.addTest(FirstParameterTest.suite()); suite.addTest(MiddleParameterTest.suite()); @@ -36,7 +34,6 @@ public class RemoveTestSuite{ suite.addTest(ArraySizeExpressionTest.suite()); suite.addTest(NewInitializerExpressionTest.suite()); suite.addTest(StatementTest.suite()); - return suite; } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/SingleParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/SingleParameterTest.java index 4d86c479b3e..0ac211f999e 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/SingleParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/remove/SingleParameterTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.remove; @@ -24,25 +24,23 @@ import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification.ModificationKin public class SingleParameterTest extends ChangeGeneratorTest { - public SingleParameterTest(){ + public SingleParameterTest() { super("Remove The Only Parameter Node"); //$NON-NLS-1$ } @Override protected void setUp() throws Exception { - source = "void foo(int parameter){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int parameter) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo() {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } - public static Test suite() { return new SingleParameterTest(); } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitDeclarators = true; @@ -51,11 +49,12 @@ public class SingleParameterTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTParameterDeclaration[] parameters = functionDeclarator.getParameters(); - for(IASTParameterDeclaration curParam : parameters){ - if(String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("parameter")){ //$NON-NLS-1$ - ASTModification modification = new ASTModification(ModificationKind.REPLACE, curParam, null, null); + for (IASTParameterDeclaration curParam : parameters){ + if (String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("parameter")){ //$NON-NLS-1$ + ASTModification modification = new ASTModification(ModificationKind.REPLACE, + curParam, null, null); modStore.storeModification(null, modification); } } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ExceptionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ExceptionTest.java index 2ba4ce83dc7..7d14200d15e 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ExceptionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ExceptionTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.replace; @@ -29,15 +29,14 @@ import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification.ModificationKin public class ExceptionTest extends ChangeGeneratorTest { - public ExceptionTest(){ super("Remove Exception Declaration"); //$NON-NLS-1$ } @Override protected void setUp() throws Exception { - source = "void foo(int parameter) throw (float){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int parameter) throw (int){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int parameter) throw (float) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int parameter) throw (int) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -46,8 +45,7 @@ public class ExceptionTest extends ChangeGeneratorTest { } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitDeclarators = true; @@ -56,7 +54,7 @@ public class ExceptionTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTTypeId existingException = functionDeclarator.getExceptionSpecification()[0]; IASTTypeId exception = new CPPASTTypeId(); @@ -66,13 +64,12 @@ public class ExceptionTest extends ChangeGeneratorTest { exDeclSpec.setType(IASTSimpleDeclSpecifier.t_int); exception.setDeclSpecifier(exDeclSpec); exception.setAbstractDeclarator(exceptionDeclarator); - ASTModification modification = new ASTModification(ModificationKind.REPLACE, existingException, exception, null); + ASTModification modification = new ASTModification(ModificationKind.REPLACE, + existingException, exception, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; } }; } - - } diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ExpressionTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ExpressionTest.java index 5d86fa5eef5..63ab2dc63cf 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ExpressionTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ExpressionTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.replace; @@ -25,20 +25,16 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModificationStore; - - - - public class ExpressionTest extends ChangeGeneratorTest { - public ExpressionTest(){ + public ExpressionTest() { super("Replace Expression"); //$NON-NLS-1$ } @Override protected void setUp() throws Exception { - source = "void main(){int s = 0, c = 0, h = 0;\ns = 3, c = 4, h = 5;}"; //$NON-NLS-1$ - expectedSource = "void main(){int s = 0, c = 0, h = 0;\ns = 3, c = 9, h = 5;}"; //$NON-NLS-1$ + source = "void main() {\n\tint s = 0, c = 0, h = 0;\n\ts = 3, c = 4, h = 5;\n}"; //$NON-NLS-1$ + expectedSource = "void main() {\n\tint s = 0, c = 0, h = 0;\n\ts = 3, c = 9, h = 5;\n}"; //$NON-NLS-1$ super.setUp(); } @@ -46,10 +42,8 @@ public class ExpressionTest extends ChangeGeneratorTest { return new ExpressionTest(); } - @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitExpressions = true; @@ -60,8 +54,11 @@ public class ExpressionTest extends ChangeGeneratorTest { if (expression instanceof IASTExpressionList) { IASTExpressionList expressionList = (IASTExpressionList) expression; IASTExpression[] expressions = expressionList.getExpressions(); - CPPASTBinaryExpression binEx = new CPPASTBinaryExpression(IASTBinaryExpression.op_assign, new CPPASTIdExpression(new CPPASTName("c".toCharArray())), new CPPASTLiteralExpression(0, "9")); //$NON-NLS-1$ //$NON-NLS-2$ - ASTModification modification = new ASTModification(ASTModification.ModificationKind.REPLACE, expressions[1], binEx, null); + CPPASTBinaryExpression binEx = new CPPASTBinaryExpression(IASTBinaryExpression.op_assign, + new CPPASTIdExpression(new CPPASTName("c".toCharArray())), //$NON-NLS-1$ + new CPPASTLiteralExpression(0, "9".toCharArray())); //$NON-NLS-1$ + ASTModification modification = new ASTModification(ASTModification.ModificationKind.REPLACE, + expressions[1], binEx, null); modStore.storeModification(null, modification); } return PROCESS_CONTINUE; diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/PointerInParameterTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/PointerInParameterTest.java index da04057e0ae..86936d0effb 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/PointerInParameterTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/PointerInParameterTest.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.replace; @@ -26,14 +26,14 @@ import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification.ModificationKin public class PointerInParameterTest extends ChangeGeneratorTest { - public PointerInParameterTest(){ + public PointerInParameterTest() { super("Replace Pointer for Parameter"); //$NON-NLS-1$ } @Override protected void setUp() throws Exception { - source = "void foo(int ¶meter){\n}\n\n"; //$NON-NLS-1$ - expectedSource = "void foo(int *parameter){\n}\n\n"; //$NON-NLS-1$ + source = "void foo(int ¶meter) {\n}\n\n"; //$NON-NLS-1$ + expectedSource = "void foo(int *parameter) {\n}\n\n"; //$NON-NLS-1$ super.setUp(); } @@ -42,8 +42,7 @@ public class PointerInParameterTest extends ChangeGeneratorTest { } @Override - protected ASTVisitor createModificator( - final ASTModificationStore modStore) { + protected ASTVisitor createModificator(final ASTModificationStore modStore) { return new ASTVisitor() { { shouldVisitDeclarators = true; @@ -52,10 +51,10 @@ public class PointerInParameterTest extends ChangeGeneratorTest { @Override public int visit(IASTDeclarator declarator) { if (declarator instanceof CPPASTFunctionDeclarator) { - CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator)declarator; + CPPASTFunctionDeclarator functionDeclarator = (CPPASTFunctionDeclarator) declarator; IASTParameterDeclaration[] parameters = functionDeclarator.getParameters(); - for(IASTParameterDeclaration curParam : parameters){ - if(String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("parameter")){ //$NON-NLS-1$ + for (IASTParameterDeclaration curParam : parameters){ + if (String.valueOf(curParam.getDeclarator().getName().toCharArray()).equals("parameter")) { //$NON-NLS-1$ IASTPointerOperator pointer = curParam.getDeclarator().getPointerOperators()[0]; CPPASTPointer newPointer = new CPPASTPointer(); ASTModification modification = new ASTModification(ModificationKind.REPLACE, pointer, newPointer, null); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ReplaceTestSuite.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ReplaceTestSuite.java index a2a46caf25e..e0c52e5d88c 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ReplaceTestSuite.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/changegenerator/replace/ReplaceTestSuite.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.changegenerator.replace; @@ -16,12 +16,11 @@ import junit.framework.TestSuite; /** * @author Thomas Corbat - * */ -public class ReplaceTestSuite{ +public class ReplaceTestSuite { public static Test suite() throws Exception { - TestSuite suite = new TestSuite("ChangegeneratorReplaceTests"); + TestSuite suite = new TestSuite("ChangeGeneratorReplaceTests"); suite.addTest(NameTest.suite()); suite.addTest(MoveTest.suite()); diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/comenthandler/CommentHandlingTest.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/comenthandler/CommentHandlingTest.java index 067a29f8f28..afbdb321098 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/comenthandler/CommentHandlingTest.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/rewrite/comenthandler/CommentHandlingTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik + * Copyright (c) 2008, 2011 Institute for Software, HSR Hochschule fuer Technik * Rapperswil, University of applied sciences and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -11,9 +11,9 @@ ******************************************************************************/ package org.eclipse.cdt.core.parser.tests.rewrite.comenthandler; -import java.util.ArrayList; import java.util.Comparator; -import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.TreeSet; import java.util.Vector; import java.util.regex.Matcher; @@ -74,7 +74,6 @@ import org.eclipse.core.runtime.CoreException; * @author Guido Zgraggen IFS, Lukas Felber IFS */ public class CommentHandlingTest extends RewriteBaseTest { - private static final String ANY_CHAR_REGEXP = "(.*)"; //$NON-NLS-1$ private static final String SEPARATOR = System.getProperty("line.separator"); //$NON-NLS-1$ @@ -92,7 +91,7 @@ public class CommentHandlingTest extends RewriteBaseTest { @Override protected void runTest() throws Throwable { - if (fileMap.size() == 0) { + if (fileMap.isEmpty()) { fail("No file for testing"); //$NON-NLS-1$ } @@ -140,12 +139,12 @@ public class CommentHandlingTest extends RewriteBaseTest { return actualResultBuilder; } - private String getCommentMapResult(HashMap> map) { + private String getCommentMapResult(Map> map) { TreeSet keyTree = new TreeSet(new NodeOffsetComparator()); keyTree.addAll(map.keySet()); StringBuilder output = new StringBuilder(); for (IASTNode actNode : keyTree) { - ArrayList comments = map.get(actNode); + List comments = map.get(actNode); output.append(getSignature(actNode) + " = "); //$NON-NLS-1$ boolean first = true; for (IASTComment actComment : comments) { diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java index 7fb8c90d832..b6eda1977bf 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java @@ -12,7 +12,6 @@ *******************************************************************************/ package org.eclipse.cdt.core.model; - import java.net.URI; import org.eclipse.cdt.core.CCProjectNature; @@ -1425,7 +1424,7 @@ public class CoreModel { } /** - * forces the cached data of the specified projects to be re-calculated. + * Forces the cached data of the specified projects to be re-calculated. * if the projects argument is null al projects * within the workspace are updated * @@ -1438,14 +1437,14 @@ public class CoreModel { } /** - * answers whether the given project is a new-style project, i.e. CConfigurationDataProvider-driven + * Answers whether the given project is a new-style project, i.e. CConfigurationDataProvider-driven */ public boolean isNewStyleProject(IProject project){ return descriptionManager.isNewStyleProject(project); } /** - * answers whether the given project is a new-style project, i.e. CConfigurationDataProvider-driven + * Answers whether the given project is a new-style project, i.e. CConfigurationDataProvider-driven */ public boolean isNewStyleProject(ICProjectDescription des){ return descriptionManager.isNewStyleProject(des); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTExpressionList.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTExpressionList.java index a015ce755d4..f61b4791069 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTExpressionList.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTExpressionList.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * John Camelon (IBM Rational Software) - Initial API and implementation + * John Camelon (IBM Rational Software) - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.dom.ast; @@ -44,10 +44,12 @@ public interface IASTExpressionList extends IASTExpression { /** * @since 5.1 */ + @Override public IASTExpressionList copy(); /** * @since 5.3 */ + @Override public IASTExpressionList copy(CopyStyle style); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTParameterDeclaration.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTParameterDeclaration.java index 979c575ab60..4808e3e4ea4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTParameterDeclaration.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTParameterDeclaration.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Doug Schaefer (IBM) - Initial API and implementation + * Doug Schaefer (IBM) - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.dom.ast; @@ -20,7 +20,7 @@ public interface IASTParameterDeclaration extends IASTNode { /** * Constant/sentinel. */ - public static final IASTParameterDeclaration[] EMPTY_PARAMETERDECLARATION_ARRAY = new IASTParameterDeclaration[0]; + public static final IASTParameterDeclaration[] EMPTY_PARAMETERDECLARATION_ARRAY = {}; /** * DECL_SPECIFIER represents the relationship between an @@ -71,10 +71,12 @@ public interface IASTParameterDeclaration extends IASTNode { /** * @since 5.1 */ + @Override public IASTParameterDeclaration copy(); /** * @since 5.3 */ + @Override public IASTParameterDeclaration copy(CopyStyle style); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTStandardFunctionDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTStandardFunctionDeclarator.java index 0984c720893..fed5711419b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTStandardFunctionDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/IASTStandardFunctionDeclarator.java @@ -6,8 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Doug Schaefer (IBM) - Initial API and implementation - * Markus Schorn (Wind River Systems) + * Doug Schaefer (IBM) - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.dom.ast; @@ -18,7 +18,6 @@ package org.eclipse.cdt.core.dom.ast; * @noimplement This interface is not intended to be implemented by clients. */ public interface IASTStandardFunctionDeclarator extends IASTFunctionDeclarator { - /** * FUNCTION_PARAMETER represents the relationship between an * IASTStandardFunctionDeclarator and it's nested @@ -67,10 +66,12 @@ public interface IASTStandardFunctionDeclarator extends IASTFunctionDeclarator { /** * @since 5.1 */ + @Override public IASTStandardFunctionDeclarator copy(); /** * @since 5.3 */ + @Override public IASTStandardFunctionDeclarator copy(CopyStyle style); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTCatchHandler.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTCatchHandler.java index 8ace8e3ecad..219a1889040 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTCatchHandler.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTCatchHandler.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM - Initial API and implementation + * IBM - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.dom.ast.cpp; @@ -24,8 +24,7 @@ import org.eclipse.cdt.core.dom.ast.IScope; * @noimplement This interface is not intended to be implemented by clients. */ public interface ICPPASTCatchHandler extends IASTStatement { - - public static final ICPPASTCatchHandler[] EMPTY_CATCHHANDLER_ARRAY = new ICPPASTCatchHandler[0]; + public static final ICPPASTCatchHandler[] EMPTY_CATCHHANDLER_ARRAY = {}; /** * DECLARATION represents the nested declaration within the catch handler. @@ -78,10 +77,12 @@ public interface ICPPASTCatchHandler extends IASTStatement { /** * @since 5.1 */ + @Override public ICPPASTCatchHandler copy(); /** * @since 5.3 */ + @Override public ICPPASTCatchHandler copy(CopyStyle style); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionDeclarator.java index 2bf8d6104d5..f2ad2f402e9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionDeclarator.java @@ -6,8 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM - Initial API and implementation - * Markus Schorn (Wind River Systems) + * IBM - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.dom.ast.cpp; @@ -22,7 +22,6 @@ import org.eclipse.cdt.core.dom.ast.IASTTypeId; * @noextend This interface is not intended to be extended by clients. */ public interface ICPPASTFunctionDeclarator extends IASTStandardFunctionDeclarator, ICPPASTDeclarator { - /** * Used as return value for {@link #getExceptionSpecification()}. * @since 5.1 @@ -80,6 +79,7 @@ public interface ICPPASTFunctionDeclarator extends IASTStandardFunctionDeclarato /** * @since 5.2 */ + @Override public ICPPASTParameterDeclaration[] getParameters(); /** @@ -117,6 +117,7 @@ public interface ICPPASTFunctionDeclarator extends IASTStandardFunctionDeclarato * Get function scope this node represents. Returns null, if this declarator does not * declare a function-prototype or function-definition. */ + @Override public ICPPFunctionScope getFunctionScope(); @@ -136,10 +137,12 @@ public interface ICPPASTFunctionDeclarator extends IASTStandardFunctionDeclarato /** * @since 5.1 */ + @Override public ICPPASTFunctionDeclarator copy(); /** * @since 5.3 */ + @Override public ICPPASTFunctionDeclarator copy(CopyStyle style); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionDefinition.java index bb77771f525..00453b7d61d 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionDefinition.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.dom.ast.cpp; @@ -42,11 +42,13 @@ public interface ICPPASTFunctionDefinition extends IASTFunctionDefinition { /** * @since 5.1 */ + @Override public ICPPASTFunctionDefinition copy(); /** * @since 5.3 */ + @Override public ICPPASTFunctionDefinition copy(CopyStyle style); /** diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionWithTryBlock.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionWithTryBlock.java index 13be9a177f8..3ea27afa6ab 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionWithTryBlock.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTFunctionWithTryBlock.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.core.dom.ast.cpp; @@ -23,7 +23,6 @@ import org.eclipse.cdt.core.dom.ast.ASTNodeProperty; * @noimplement This interface is not intended to be implemented by clients. */ public interface ICPPASTFunctionWithTryBlock extends ICPPASTFunctionDefinition { - /** * A CATCH_HANDLER is the role of an ICPPASTCatchHandler in * this interface. @@ -44,6 +43,6 @@ public interface ICPPASTFunctionWithTryBlock extends ICPPASTFunctionDefinition { /** * @since 5.1 */ + @Override public ICPPASTFunctionWithTryBlock copy(); - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTNamespaceDefinition.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTNamespaceDefinition.java index 722c8049af4..59e0de8d438 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTNamespaceDefinition.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/core/dom/ast/cpp/ICPPASTNamespaceDefinition.java @@ -6,8 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * John Camelon (IBM) - Initial API and implementation - * Markus Schorn (Wind River Systems) + * John Camelon (IBM) - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.core.dom.ast.cpp; @@ -25,7 +25,6 @@ import org.eclipse.cdt.core.dom.ast.IScope; * @noimplement This interface is not intended to be implemented by clients. */ public interface ICPPASTNamespaceDefinition extends IASTDeclaration, IASTNameOwner, IASTDeclarationListOwner { - /** * OWNED_DECLARATION is the role served by all the nested * declarations. @@ -68,22 +67,22 @@ public interface ICPPASTNamespaceDefinition extends IASTDeclaration, IASTNameOwn public boolean isInline(); /** - * A translation unit contains an ordered sequence of declarations. + * A namespace contains an ordered sequence of declarations. * - * @return IASTDeclaration [] + * @return an array of declarations contained in the namespace */ public IASTDeclaration[] getDeclarations(); /** - * Add a declaration to the namespace. + * Adds a declaration to the namespace. * - * @param declaration - * IASTDeclaration + * @param declaration IASTDeclaration */ + @Override public void addDeclaration(IASTDeclaration declaration); /** - * Get the scope object represented by this construct. + * Returns the scope object represented by this construct. * * @return IScope */ @@ -92,10 +91,12 @@ public interface ICPPASTNamespaceDefinition extends IASTDeclaration, IASTNameOwn /** * @since 5.1 */ + @Override public ICPPASTNamespaceDefinition copy(); /** * @since 5.3 */ + @Override public ICPPASTNamespaceDefinition copy(CopyStyle style); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTCopyLocation.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTCopyLocation.java index 0d72769cb64..46b8141eb5f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTCopyLocation.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTCopyLocation.java @@ -7,7 +7,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software (IFS)- initial API and implementation + * Institute for Software (IFS)- initial API and implementation ******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -17,32 +17,31 @@ import org.eclipse.cdt.core.dom.ast.IASTNode; /** * @author Emanuel Graf IFS - * */ public class ASTCopyLocation implements IASTCopyLocation { - private IASTNode originalNode; - - public ASTCopyLocation(IASTNode originalNode) { this.originalNode = originalNode; } + @Override public int getNodeOffset() { return 0; } + @Override public int getNodeLength() { return 0; } + @Override public IASTFileLocation asFileLocation() { return null; } + @Override public IASTNode getOriginalNode() { return originalNode; } - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java index 7e1e9020386..32335283083 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEnumerator.java @@ -40,6 +40,7 @@ public abstract class ASTEnumerator extends ASTNode implements IASTEnumerator, I copy.setOffsetAndLength(this); } + @Override public void setName(IASTName name) { assertNotFrozen(); this.name = name; @@ -49,11 +50,13 @@ public abstract class ASTEnumerator extends ASTNode implements IASTEnumerator, I } } - public IASTName getName() { + @Override + public IASTName getName() { return name; } - public void setValue(IASTExpression expression) { + @Override + public void setValue(IASTExpression expression) { assertNotFrozen(); this.value = expression; if (expression != null) { @@ -62,7 +65,8 @@ public abstract class ASTEnumerator extends ASTNode implements IASTEnumerator, I } } - public IASTExpression getValue() { + @Override + public IASTExpression getValue() { return value; } @@ -87,6 +91,7 @@ public abstract class ASTEnumerator extends ASTNode implements IASTEnumerator, I return true; } + @Override public int getRoleForName(IASTName n) { if (n == name) return r_definition; @@ -94,7 +99,8 @@ public abstract class ASTEnumerator extends ASTNode implements IASTEnumerator, I return r_reference; } - public void replace(IASTNode child, IASTNode other) { + @Override + public void replace(IASTNode child, IASTNode other) { if (child == value) { other.setPropertyInParent(child.getPropertyInParent()); other.setParent(child.getParent()); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEqualsInitializer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEqualsInitializer.java index 65c5803578d..55a4b27c635 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEqualsInitializer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTEqualsInitializer.java @@ -6,8 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * John Camelon (IBM) - Initial API and implementation - * Markus Schorn (Wind River Systems) + * John Camelon (IBM) - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -32,11 +32,13 @@ public abstract class ASTEqualsInitializer extends ASTNode implements IASTEquals setInitializerClause(arg); } + @Override public IASTInitializerClause getInitializerClause() { return fArgument; } - public void setInitializerClause(IASTInitializerClause clause) { + @Override + public void setInitializerClause(IASTInitializerClause clause) { assertNotFrozen(); fArgument = clause; if (clause != null) { @@ -64,6 +66,7 @@ public abstract class ASTEqualsInitializer extends ASTNode implements IASTEquals return true; } + @Override public void replace(IASTNode child, IASTNode other) { if (child == fArgument) { other.setPropertyInParent(child.getPropertyInParent()); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java index 25de5bcb568..c3d79aa6247 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNode.java @@ -6,8 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * John Camelon - Initial API and implementation - * Markus Schorn (Wind River Systems) + * John Camelon - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -42,23 +42,29 @@ public abstract class ASTNode implements IASTNode { private int length; private int offset; + private IASTNodeLocation[] locations; + private IASTFileLocation fileLocation; private boolean frozen = false; private boolean active = true; - public IASTNode getParent() { + @Override + public IASTNode getParent() { return parent; } + @Override public IASTNode[] getChildren() { ChildCollector collector= new ChildCollector(this); return collector.getChildren(); } + @Override public boolean isFrozen() { return frozen; } + @Override public boolean isActive() { return active; } @@ -78,16 +84,19 @@ public abstract class ASTNode implements IASTNode { throw new IllegalStateException("attempt to modify frozen AST node"); //$NON-NLS-1$ } - public void setParent(IASTNode node) { + @Override + public void setParent(IASTNode node) { assertNotFrozen(); this.parent = node; } - public ASTNodeProperty getPropertyInParent() { + @Override + public ASTNodeProperty getPropertyInParent() { return property; } - public void setPropertyInParent(ASTNodeProperty property) { + @Override + public void setPropertyInParent(ASTNodeProperty property) { assertNotFrozen(); this.property = property; } @@ -120,10 +129,8 @@ public abstract class ASTNode implements IASTNode { setOffsetAndLength(node.getOffset(), node.getLength()); } - private IASTNodeLocation[] locations = null; - private IASTFileLocation fileLocation = null; - - public IASTNodeLocation[] getNodeLocations() { + @Override + public IASTNodeLocation[] getNodeLocations() { if (locations != null) return locations; if (length == 0) { @@ -163,11 +170,13 @@ public abstract class ASTNode implements IASTNode { return CharArrayUtils.EMPTY; } - public String getRawSignature() { + @Override + public String getRawSignature() { return new String(getRawSignatureChars()); } - public String getContainingFilename() { + @Override + public String getContainingFilename() { if (offset <= 0 && (length == 0 || offset < 0)) { final IASTNode parent = getParent(); if (parent == null) { @@ -181,7 +190,8 @@ public abstract class ASTNode implements IASTNode { return getTranslationUnit().getContainingFilename(offset); } - public IASTFileLocation getFileLocation() { + @Override + public IASTFileLocation getFileLocation() { if (fileLocation != null) return fileLocation; // TODO(sprigogin): The purpose of offset == 0 && length == 0 condition is not clear to me. @@ -201,7 +211,8 @@ public abstract class ASTNode implements IASTNode { return fileLocation; } - public boolean isPartOfTranslationUnitFile() { + @Override + public boolean isPartOfTranslationUnitFile() { IASTTranslationUnit ast = getTranslationUnit(); if (ast != null) { ILocationResolver lr= (ILocationResolver) ast.getAdapter(ILocationResolver.class); @@ -223,15 +234,18 @@ public abstract class ASTNode implements IASTNode { return false; } - public IASTTranslationUnit getTranslationUnit() { + @Override + public IASTTranslationUnit getTranslationUnit() { return parent != null ? parent.getTranslationUnit() : null; } - public boolean accept(ASTVisitor visitor) { + @Override + public boolean accept(ASTVisitor visitor) { return true; } - public boolean contains(IASTNode node) { + @Override + public boolean contains(IASTNode node) { if (node instanceof ASTNode) { ASTNode astNode= (ASTNode) node; return offset <= astNode.offset && @@ -240,15 +254,18 @@ public abstract class ASTNode implements IASTNode { return false; } + @Override public IToken getSyntax() throws ExpansionOverlapsBoundaryException { return getSyntax(offset, offset+length, 0); } + @Override public IToken getLeadingSyntax() throws ExpansionOverlapsBoundaryException { int left= getBoundary(-1); return getSyntax(left, offset, -1); } + @Override public IToken getTrailingSyntax() throws ExpansionOverlapsBoundaryException { int right= getBoundary(1); return getSyntax(offset+length, right, 1); @@ -346,5 +363,4 @@ public abstract class ASTNode implements IASTNode { protected void setCopyLocation(IASTNode originalNode) { locations = new IASTNodeLocation[] {new ASTCopyLocation(originalNode)}; } - } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNodeSelector.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNodeSelector.java index ad7512b0d2e..b8e028975df 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNodeSelector.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNodeSelector.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -24,7 +24,6 @@ import org.eclipse.cdt.internal.core.parser.scanner.ILocationResolver; * @since 5.0 */ public class ASTNodeSelector implements IASTNodeSelector { - private ASTTranslationUnit fTu; private ILocationResolver fLocationResolver; private String fFilePath; @@ -74,7 +73,7 @@ public class ASTNodeSelector implements IASTNodeSelector { sequenceLength= 0; if (offsetInFile > 0) { altSequenceNumber= fLocationResolver.getSequenceNumberForFileOffset(fFilePath, offsetInFile-1); - if (altSequenceNumber+1 == sequenceNumber) { + if (altSequenceNumber + 1 == sequenceNumber) { altSequenceNumber= -1; } else { // we are on a context boundary and we need to check the variant to the left and @@ -118,55 +117,67 @@ public class ASTNodeSelector implements IASTNodeSelector { return nodeSpec.getBestNode(); } - + @Override public IASTNode findFirstContainedNode(int offset, int length) { return findNode(offset, length, Relation.FIRST_CONTAINED, IASTNode.class); } + @Override public IASTNode findNode(int offset, int length) { return findNode(offset, length, Relation.EXACT_MATCH, IASTNode.class); } + @Override public IASTNode findEnclosingNode(int offset, int length) { return findNode(offset, length, Relation.ENCLOSING, IASTNode.class); } + @Override public IASTNode findStrictlyEnclosingNode(int offset, int length) { return findNode(offset, length, Relation.STRICTLY_ENCLOSING, IASTNode.class); } + @Override public IASTNode findFirstContainedNodeInExpansion(int offset, int length) { return findNode(offset, length, Relation.FIRST_CONTAINED, IASTNode.class, true); } + @Override public IASTNode findNodeInExpansion(int offset, int length) { return findNode(offset, length, Relation.EXACT_MATCH, IASTNode.class, true); } + @Override public IASTNode findEnclosingNodeInExpansion(int offset, int length) { return findNode(offset, length, Relation.ENCLOSING, IASTNode.class, true); } + @Override public IASTName findFirstContainedName(int offset, int length) { return findNode(offset, length, Relation.FIRST_CONTAINED, IASTName.class); } + @Override public IASTName findName(int offset, int length) { return findNode(offset, length, Relation.EXACT_MATCH, IASTName.class); } + @Override public IASTName findEnclosingName(int offset, int length) { return findNode(offset, length, Relation.ENCLOSING, IASTName.class); } + @Override public IASTImplicitName findImplicitName(int offset, int length) { return findNode(offset, length, Relation.EXACT_MATCH, IASTImplicitName.class); } + @Override public IASTImplicitName findEnclosingImplicitName(int offset, int length) { return findNode(offset, length, Relation.ENCLOSING, IASTImplicitName.class); } + @Override public IASTPreprocessorMacroExpansion findEnclosingMacroExpansion(int offset, int length) { return findNode(offset, length, Relation.ENCLOSING, IASTPreprocessorMacroExpansion.class); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNodeSpecification.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNodeSpecification.java index a269c788ed2..b3f438cd6b9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNodeSpecification.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTNodeSpecification.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -41,12 +41,12 @@ public class ASTNodeSpecification { fRelation= relation; fClass= clazz; fFileOffset= fileOffset; - fFileEndOffset= fileOffset+fileLength; + fFileEndOffset= fileOffset + fileLength; } public void setRangeInSequence(int offsetInSeq, int lengthInSeq) { fSeqNumber= offsetInSeq; - fSeqEndNumber= offsetInSeq+lengthInSeq; + fSeqEndNumber= offsetInSeq + lengthInSeq; } public void setRangeInSequence(int offsetInSeq, int lengthInSeq, boolean zeroRangeToLeft) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTProblem.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTProblem.java index 660b320d26c..1c24b726ce6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTProblem.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTProblem.java @@ -6,9 +6,9 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM - Initial API and implementation - * Anton Leherbauer (Wind River Systems) - * Markus Schorn (Wind River Systems) + * IBM - Initial API and implementation + * Anton Leherbauer (Wind River Systems) + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -23,95 +23,10 @@ import org.eclipse.cdt.internal.core.parser.ParserMessages; import com.ibm.icu.text.MessageFormat; - /** * Models problems, all problems should derive from this class. */ public class ASTProblem extends ASTNode implements IASTProblem { - - private final int id; - private final char[] arg; - private boolean isError= false; - - public ASTProblem(IASTNode parent, ASTNodeProperty property, int id, char[] arg, boolean isError, int startNumber, int endNumber) { - setParent(parent); - setPropertyInParent(property); - setOffset(startNumber); - setLength(endNumber-startNumber); - - this.isError= isError; - this.id = id; - this.arg = arg; - } - - public ASTProblem(int id, char[] arg, boolean isError) { - this.id = id; - this.arg = arg; - this.isError= isError; - } - - public ASTProblem copy() { - return copy(CopyStyle.withoutLocations); - } - - public ASTProblem copy(CopyStyle style) { - ASTProblem problem = new ASTProblem(id, arg == null ? null : arg.clone(), isError); - problem.setOffsetAndLength(this); - if (style == CopyStyle.withLocations) { - problem.setCopyLocation(this); - } - return problem; - } - - public int getID() { - return id; - } - - public boolean isError() { - return isError; - } - - public boolean isWarning() { - return !isError; - } - - public String getMessageWithLocation() { - String msg= getMessage(); - - char[] file= getOriginatingFileName(); - int line= getSourceLineNumber(); - Object[] args = new Object[] { msg, new String(file), new Integer(line) }; - return ParserMessages.getFormattedString("BaseProblemFactory.problemPattern", args); //$NON-NLS-1$ - } - - public static String getMessage(int id, String arg) { - String msg = errorMessages.get(new Integer(id)); - if (msg == null) - msg = ""; //$NON-NLS-1$ - - if (arg != null) { - return MessageFormat.format(msg, new Object[] {arg}); - } - return msg; - } - - public String getMessage() { - return getMessage(id, arg == null ? null : new String(arg)); - } - - public boolean checkCategory(int bitmask) { - return ((id & bitmask) != 0); - } - - public String[] getArguments() { - return arg == null ? new String[0] : new String[] {new String(arg)}; - } - - public char[] getArgument() { - return arg; - } - - protected static final Map errorMessages; static { errorMessages = new HashMap(); @@ -179,16 +94,104 @@ public class ASTProblem extends ASTNode implements IASTProblem { ParserMessages.getString("ParserProblemFactory.error.syntax.missingSemicolon")); //$NON-NLS-1$ } - /* - * @see org.eclipse.cdt.core.parser.IProblem#getOriginatingFileName() - */ + private final int id; + private final char[] arg; + private boolean isError; + + public ASTProblem(IASTNode parent, ASTNodeProperty property, int id, char[] arg, boolean isError, + int startNumber, int endNumber) { + setParent(parent); + setPropertyInParent(property); + setOffset(startNumber); + setLength(endNumber-startNumber); + + this.isError= isError; + this.id = id; + this.arg = arg; + } + + public ASTProblem(int id, char[] arg, boolean isError) { + this.id = id; + this.arg = arg; + this.isError= isError; + } + + @Override + public ASTProblem copy() { + return copy(CopyStyle.withoutLocations); + } + + @Override + public ASTProblem copy(CopyStyle style) { + ASTProblem problem = new ASTProblem(id, arg == null ? null : arg.clone(), isError); + problem.setOffsetAndLength(this); + if (style == CopyStyle.withLocations) { + problem.setCopyLocation(this); + } + return problem; + } + + @Override + public int getID() { + return id; + } + + @Override + public boolean isError() { + return isError; + } + + @Override + public boolean isWarning() { + return !isError; + } + + @Override + public String getMessageWithLocation() { + String msg= getMessage(); + + char[] file= getOriginatingFileName(); + int line= getSourceLineNumber(); + Object[] args = new Object[] { msg, new String(file), new Integer(line) }; + return ParserMessages.getFormattedString("BaseProblemFactory.problemPattern", args); //$NON-NLS-1$ + } + + public static String getMessage(int id, String arg) { + String msg = errorMessages.get(new Integer(id)); + if (msg == null) + msg = ""; //$NON-NLS-1$ + + if (arg != null) { + return MessageFormat.format(msg, new Object[] {arg}); + } + return msg; + } + + @Override + public String getMessage() { + return getMessage(id, arg == null ? null : new String(arg)); + } + + @Override + public boolean checkCategory(int bitmask) { + return (id & bitmask) != 0; + } + + @Override + public String[] getArguments() { + return arg == null ? new String[0] : new String[] { new String(arg) }; + } + + public char[] getArgument() { + return arg; + } + + @Override public char[] getOriginatingFileName() { return getContainingFilename().toCharArray(); } - /* - * @see org.eclipse.cdt.core.parser.IProblem#getSourceEnd() - */ + @Override public int getSourceEnd() { final IASTFileLocation location= getFileLocation(); if (location != null) { @@ -197,9 +200,7 @@ public class ASTProblem extends ASTNode implements IASTProblem { return INT_VALUE_NOT_PROVIDED; } - /* - * @see org.eclipse.cdt.core.parser.IProblem#getSourceLineNumber() - */ + @Override public int getSourceLineNumber() { final IASTFileLocation location= getFileLocation(); if (location != null) { @@ -208,9 +209,7 @@ public class ASTProblem extends ASTNode implements IASTProblem { return INT_VALUE_NOT_PROVIDED; } - /* - * @see org.eclipse.cdt.core.parser.IProblem#getSourceStart() - */ + @Override public int getSourceStart() { final IASTFileLocation location= getFileLocation(); if (location != null) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTypeIdInitializerExpression.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTypeIdInitializerExpression.java index fcdac6f06b7..34383d64d22 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTypeIdInitializerExpression.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ASTTypeIdInitializerExpression.java @@ -6,9 +6,9 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * John Camelon (IBM Rational Software) - Initial API and implementation - * Yuan Zhang / Beth Tibbitts (IBM Research) - * Markus Schorn (Wind River Systems) + * John Camelon (IBM Rational Software) - Initial API and implementation + * Yuan Zhang / Beth Tibbitts (IBM Research) + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -41,11 +41,13 @@ public abstract class ASTTypeIdInitializerExpression extends ASTNode implements } } + @Override public IASTTypeId getTypeId() { return typeId; } - public void setTypeId(IASTTypeId typeId) { + @Override + public void setTypeId(IASTTypeId typeId) { assertNotFrozen(); this.typeId = typeId; if (typeId != null) { @@ -54,11 +56,13 @@ public abstract class ASTTypeIdInitializerExpression extends ASTNode implements } } - public IASTInitializer getInitializer() { + @Override + public IASTInitializer getInitializer() { return initializer; } - public void setInitializer(IASTInitializer initializer) { + @Override + public void setInitializer(IASTInitializer initializer) { assertNotFrozen(); this.initializer = initializer; if (initializer != null) { @@ -68,32 +72,34 @@ public abstract class ASTTypeIdInitializerExpression extends ASTNode implements } @Override - public boolean accept( ASTVisitor action ){ - if( action.shouldVisitExpressions ){ - switch( action.visit( this ) ){ - case ASTVisitor.PROCESS_ABORT : return false; - case ASTVisitor.PROCESS_SKIP : return true; - default : break; + public boolean accept(ASTVisitor action) { + if (action.shouldVisitExpressions) { + switch(action.visit(this)) { + case ASTVisitor.PROCESS_ABORT: return false; + case ASTVisitor.PROCESS_SKIP: return true; + default: break; } } - if( typeId != null ) if( !typeId.accept( action ) ) return false; - if( initializer != null ) if( !initializer.accept( action ) ) return false; + if (typeId != null && !typeId.accept(action)) return false; + if (initializer != null && !initializer.accept(action)) return false; - if( action.shouldVisitExpressions ){ - switch( action.leave( this ) ){ - case ASTVisitor.PROCESS_ABORT : return false; - case ASTVisitor.PROCESS_SKIP : return true; - default : break; + if (action.shouldVisitExpressions) { + switch(action.leave(this)) { + case ASTVisitor.PROCESS_ABORT: return false; + case ASTVisitor.PROCESS_SKIP: return true; + default: break; } } return true; } + @Override public final boolean isLValue() { return false; } + @Override public final ValueCategory getValueCategory() { return ValueCategory.PRVALUE; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ChildCollector.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ChildCollector.java index 5aaa1af5fac..99c7bb8ccd6 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ChildCollector.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ChildCollector.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -20,7 +20,6 @@ import org.eclipse.cdt.core.dom.ast.IASTNode; * Collector to find all children for an ast-node. */ class ChildCollector extends ASTGenericVisitor { - private final IASTNode fNode; private List fNodes; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java deleted file mode 100644 index 4571218c648..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/EmptyCodeReaderCache.java +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2005, 2009 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM Corporation - initial API and implementation - *******************************************************************************/ -package org.eclipse.cdt.internal.core.dom.parser; - -import java.io.IOException; - -import org.eclipse.cdt.core.index.IIndexFileLocation; -import org.eclipse.cdt.core.parser.CodeReader; -import org.eclipse.cdt.core.parser.ICodeReaderCache; -import org.eclipse.cdt.internal.core.parser.InternalParserUtil; -import org.eclipse.core.runtime.CoreException; - -/** - * This is an empty implementation of the ICodeReaderCache interface. It is used to implement a - * cache for the interface that isn't actually a cache, but rather always creates new CodeReaders - * every time a CodeReader is retrieved. - * - * This cache is not optimized to be run from within Eclipse (i.e. it ignores IResources). - * @deprecated - */ -@Deprecated -public class EmptyCodeReaderCache implements ICodeReaderCache { - - /** - * Creates a new CodeReader for the given file location. - */ - public CodeReader get(String location) { - try { - return new CodeReader(location); - } catch (IOException e) { - } - return null; - } - - public CodeReader get(String key, IIndexFileLocation ifl) throws CoreException, IOException { - return InternalParserUtil.createCodeReader(ifl, null); - } - - /** - * Returns null. - */ - public CodeReader remove(String key) { - return null; - } - - /** - * Returns 0. - */ - public int getCurrentSpace() { - return 0; - } - - public void flush() { - // nothing to do - - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java index 5f1b30e39a3..461a2afa83f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/GCCBuiltinSymbolProvider.java @@ -6,10 +6,10 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM - Initial API and implementation - * Markus Schorn (Wind River Systems) - * Anton Leherbauer (Wind River Systems) - * Sergey Prigogin (Google) + * IBM - Initial API and implementation + * Markus Schorn (Wind River Systems) + * Anton Leherbauer (Wind River Systems) + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -63,7 +63,7 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider { private static final Map CHAR_ARRAYS = new HashMap(); private IBinding[] fBindings; - private IScope fScope= null; + private IScope fScope; private final boolean fCpp; private final boolean fGnu; @@ -75,6 +75,7 @@ public class GCCBuiltinSymbolProvider implements IBuiltinBindingsProvider { fGnu= supportGnuSymbols; } + @Override public IBinding[] getBuiltinBindings(IScope scope) { fScope= scope; initialize(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTInternalEnumerationSpecifier.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTInternalEnumerationSpecifier.java index 8a7bcfc5dd1..0acd5ec5b71 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTInternalEnumerationSpecifier.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/IASTInternalEnumerationSpecifier.java @@ -6,29 +6,31 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier; /** - * Internal interface for c- or c++ enumeration specifiers. + * Internal interface for C or C++ enumeration specifiers. */ public interface IASTInternalEnumerationSpecifier extends IASTEnumerationSpecifier { /** - * Notifies that the value computation for the enumeration is started. Returns whether this is the - * first attempt to do so. + * Notifies that the value computation for the enumeration is started. Returns whether this is + * the first attempt to do so. */ boolean startValueComputation(); /** * @since 5.1 */ + @Override public IASTInternalEnumerationSpecifier copy(); /** * @since 5.3 */ + @Override public IASTInternalEnumerationSpecifier copy(CopyStyle style); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/NodeFactory.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/NodeFactory.java index bcc6d2caeef..04ba0b9aa95 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/NodeFactory.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/NodeFactory.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -18,15 +18,18 @@ import org.eclipse.cdt.core.dom.ast.INodeFactory; */ public abstract class NodeFactory implements INodeFactory { + @Override public final void setOffsets(IASTNode node, int offset, int endOffset) { ((ASTNode) node).setOffsetAndLength(offset, endOffset-offset); } + @Override public final void setEndOffset(IASTNode node, int endOffset) { ASTNode a= (ASTNode) node; a.setLength(endOffset - a.getOffset()); } + @Override public final void setEndOffset(IASTNode node, IASTNode endNode) { ASTNode a= (ASTNode) node; ASTNode e= (ASTNode) endNode; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemFunctionType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemFunctionType.java index d68c6eb596f..590220e76c1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemFunctionType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemFunctionType.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -36,26 +36,32 @@ public class ProblemFunctionType extends ProblemType implements ICPPFunctionType return new ProblemFunctionType(buffer.getShort()); } + @Override public IType getReturnType() { return new ProblemType(getID()); } + @Override public IType[] getParameterTypes() { return new IType[] {new ProblemType(getID())}; } + @Override public boolean isConst() { return false; } + @Override public boolean isVolatile() { return false; } + @Override public boolean takesVarArgs() { return false; } + @Override public IPointerType getThisType() { return new CPPPointerType(new ProblemType(getID())); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemType.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemType.java index 4172ddaf9a0..b125d1f5ae1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemType.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/ProblemType.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser; @@ -15,7 +15,6 @@ import org.eclipse.cdt.core.dom.ast.IType; import org.eclipse.cdt.internal.core.parser.ParserMessages; import org.eclipse.core.runtime.CoreException; - /** * Implementation of problem types. */ @@ -28,14 +27,17 @@ public class ProblemType implements IProblemType, ISerializableType { fID= id; } + @Override public int getID() { return fID; } + @Override public String getMessage() { return ParserMessages.getProblemPattern(this); } + @Override public boolean isSameType(IType type) { return type == this; } @@ -49,6 +51,7 @@ public class ProblemType implements IProblemType, ISerializableType { } } + @Override public void marshal(ITypeMarshalBuffer buffer) throws CoreException { buffer.putByte(ITypeMarshalBuffer.PROBLEM_TYPE); buffer.putShort((short) getID()); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCatchHandler.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCatchHandler.java index 965e07a3012..1cf869e278c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCatchHandler.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTCatchHandler.java @@ -6,8 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM - Initial API and implementation - * Markus Schorn (Wind River Systems) + * IBM - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; @@ -24,7 +24,6 @@ import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguityParent; * @author jcamelon */ public class CPPASTCatchHandler extends ASTNode implements ICPPASTCatchHandler, IASTAmbiguityParent { - private boolean isCatchAll; private IASTStatement body; private IASTDeclaration declaration; @@ -38,10 +37,12 @@ public class CPPASTCatchHandler extends ASTNode implements ICPPASTCatchHandler, setDeclaration(declaration); } + @Override public CPPASTCatchHandler copy() { return copy(CopyStyle.withoutLocations); } + @Override public CPPASTCatchHandler copy(CopyStyle style) { CPPASTCatchHandler copy = new CPPASTCatchHandler(); copy.setDeclaration(declaration == null ? null : declaration.copy(style)); @@ -54,16 +55,19 @@ public class CPPASTCatchHandler extends ASTNode implements ICPPASTCatchHandler, return copy; } + @Override public void setIsCatchAll(boolean isEllipsis) { assertNotFrozen(); isCatchAll = isEllipsis; } - public boolean isCatchAll() { + @Override + public boolean isCatchAll() { return isCatchAll; } - public void setCatchBody(IASTStatement compoundStatement) { + @Override + public void setCatchBody(IASTStatement compoundStatement) { assertNotFrozen(); body = compoundStatement; if (compoundStatement != null) { @@ -72,11 +76,13 @@ public class CPPASTCatchHandler extends ASTNode implements ICPPASTCatchHandler, } } - public IASTStatement getCatchBody() { + @Override + public IASTStatement getCatchBody() { return body; } - public void setDeclaration(IASTDeclaration decl) { + @Override + public void setDeclaration(IASTDeclaration decl) { assertNotFrozen(); declaration = decl; if (decl != null) { @@ -85,48 +91,48 @@ public class CPPASTCatchHandler extends ASTNode implements ICPPASTCatchHandler, } } - public IASTDeclaration getDeclaration() { + @Override + public IASTDeclaration getDeclaration() { return declaration; } @Override - public boolean accept( ASTVisitor action ){ - if( action.shouldVisitStatements ){ - switch( action.visit( this ) ){ - case ASTVisitor.PROCESS_ABORT : return false; - case ASTVisitor.PROCESS_SKIP : return true; - default : break; + public boolean accept(ASTVisitor action) { + if (action.shouldVisitStatements) { + switch (action.visit(this)) { + case ASTVisitor.PROCESS_ABORT: return false; + case ASTVisitor.PROCESS_SKIP: return true; + default: break; } } - if( declaration != null ) if( !declaration.accept( action ) ) return false; - if( body != null ) if( !body.accept( action ) ) return false; + if (declaration != null && !declaration.accept(action)) return false; + if (body != null && !body.accept(action)) return false; - if( action.shouldVisitStatements ){ - switch( action.leave( this ) ){ - case ASTVisitor.PROCESS_ABORT : return false; - case ASTVisitor.PROCESS_SKIP : return true; - default : break; + if (action.shouldVisitStatements) { + switch (action.leave(this)) { + case ASTVisitor.PROCESS_ABORT: return false; + case ASTVisitor.PROCESS_SKIP: return true; + default: break; } } return true; } - public void replace(IASTNode child, IASTNode other) { - if( body == child ) - { - other.setPropertyInParent( child.getPropertyInParent() ); - other.setParent( child.getParent() ); + @Override + public void replace(IASTNode child, IASTNode other) { + if (body == child) { + other.setPropertyInParent(child.getPropertyInParent()); + other.setParent(child.getParent()); body = (IASTStatement) other; } - if( declaration == child ) - { - other.setParent( child.getParent() ); - other.setPropertyInParent( child.getPropertyInParent() ); + if (declaration == child) { + other.setParent(child.getParent()); + other.setPropertyInParent(child.getPropertyInParent()); declaration = (IASTDeclaration) other; } - } + @Override public IScope getScope() { if (scope == null) { scope = new CPPBlockScope(this); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDeclarator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDeclarator.java index dd68669d0dc..760aa746449 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDeclarator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionDeclarator.java @@ -6,8 +6,8 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * IBM - Initial API and implementation - * Markus Schorn (Wind River Systems) + * IBM - Initial API and implementation + * Markus Schorn (Wind River Systems) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; @@ -77,6 +77,7 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS return copy; } + @Override public ICPPASTParameterDeclaration[] getParameters() { if (parameters == null) return ICPPASTParameterDeclaration.EMPTY_CPPPARAMETERDECLARATION_ARRAY; @@ -84,7 +85,8 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS return parameters= ArrayUtil.trim(parameters); } - public void addParameterDeclaration(IASTParameterDeclaration parameter) { + @Override + public void addParameterDeclaration(IASTParameterDeclaration parameter) { assertNotFrozen(); if (parameter != null) { parameter.setParent(this); @@ -93,52 +95,63 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS } } - public boolean takesVarArgs() { + @Override + public boolean takesVarArgs() { return varArgs; } - public void setVarArgs(boolean value) { + @Override + public void setVarArgs(boolean value) { assertNotFrozen(); varArgs = value; } - public boolean isConst() { + @Override + public boolean isConst() { return isConst; } - public void setConst(boolean value) { + @Override + public void setConst(boolean value) { assertNotFrozen(); this.isConst = value; } - public boolean isVolatile() { + @Override + public boolean isVolatile() { return isVolatile; } - public void setVolatile(boolean value) { + @Override + public void setVolatile(boolean value) { assertNotFrozen(); this.isVolatile = value; } - public boolean isMutable() { + @Override + public boolean isMutable() { return isMutable; } - public void setMutable(boolean value) { + @Override + public void setMutable(boolean value) { assertNotFrozen(); this.isMutable = value; } - public IASTTypeId[] getExceptionSpecification() { + @Override + public IASTTypeId[] getExceptionSpecification() { return typeIds= ArrayUtil.trim(typeIds); } - public void setEmptyExceptionSpecification() { + @Override + public void setEmptyExceptionSpecification() { assertNotFrozen(); typeIds= IASTTypeId.EMPTY_TYPEID_ARRAY; } - public void addExceptionSpecificationTypeId(IASTTypeId typeId) { + @Override + public void addExceptionSpecificationTypeId(IASTTypeId typeId) { assertNotFrozen(); if (typeId != null) { assert typeIds != null; @@ -147,12 +160,13 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS typeId.setPropertyInParent(EXCEPTION_TYPEID); } } - - public IASTTypeId getTrailingReturnType() { + @Override + public IASTTypeId getTrailingReturnType() { return trailingReturnType; } + @Override public void setTrailingReturnType(IASTTypeId typeId) { assertNotFrozen(); trailingReturnType= typeId; @@ -162,20 +176,23 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS } } + @Override public boolean isPureVirtual() { return pureVirtual; } - public void setPureVirtual(boolean isPureVirtual) { + @Override + public void setPureVirtual(boolean isPureVirtual) { assertNotFrozen(); this.pureVirtual = isPureVirtual; } - @Deprecated + @Override + @Deprecated public org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer[] getConstructorChain() { if (ASTQueries.findTypeRelevantDeclarator(this) == this) { IASTNode parent= getParent(); - while(!(parent instanceof IASTDeclaration)) { + while (!(parent instanceof IASTDeclaration)) { if (parent == null) break; parent= parent.getParent(); @@ -187,18 +204,20 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS return org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer.EMPTY_CONSTRUCTORCHAININITIALIZER_ARRAY; } - @Deprecated + @Override + @Deprecated public void addConstructorToChain(org.eclipse.cdt.core.dom.ast.cpp.ICPPASTConstructorChainInitializer initializer) { assertNotFrozen(); } - public ICPPFunctionScope getFunctionScope() { + @Override + public ICPPFunctionScope getFunctionScope() { if (scope != null) return scope; // introduce a scope for function declarations and definitions, only. IASTNode node= getParent(); - while(!(node instanceof IASTDeclaration)) { + while (!(node instanceof IASTDeclaration)) { if (node==null) return null; node= node.getParent(); @@ -232,6 +251,7 @@ public class CPPASTFunctionDeclarator extends CPPASTDeclarator implements ICPPAS return super.postAccept(action); } + @Override public void replace(IASTNode child, IASTNode other) { if (parameters != null) { for (int i = 0; i < parameters.length; ++i) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionWithTryBlock.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionWithTryBlock.java index 9300b41cf31..c555f9d0c4c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionWithTryBlock.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTFunctionWithTryBlock.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; @@ -24,7 +24,9 @@ import org.eclipse.cdt.core.parser.util.ArrayUtil; * @see ICPPASTFunctionWithTryBlock */ public class CPPASTFunctionWithTryBlock extends CPPASTFunctionDefinition implements ICPPASTFunctionWithTryBlock { - + private ICPPASTCatchHandler[] catchHandlers; + private int catchHandlersPos= -1; + public CPPASTFunctionWithTryBlock() { } @@ -49,10 +51,12 @@ public class CPPASTFunctionWithTryBlock extends CPPASTFunctionDefinition impleme copy.setDeclarator(declarator == null ? null : declarator.copy(style)); copy.setBody(bodyStatement == null ? null : bodyStatement.copy(style)); - for (ICPPASTConstructorChainInitializer initializer : getMemberInitializers()) + for (ICPPASTConstructorChainInitializer initializer : getMemberInitializers()) { copy.addMemberInitializer(initializer == null ? null : initializer.copy(style)); - for (ICPPASTCatchHandler handler : getCatchHandlers()) + } + for (ICPPASTCatchHandler handler : getCatchHandlers()) { copy.addCatchHandler(handler == null ? null : handler.copy(style)); + } copy.setOffsetAndLength(this); if (style == CopyStyle.withLocations) { @@ -61,29 +65,27 @@ public class CPPASTFunctionWithTryBlock extends CPPASTFunctionDefinition impleme return copy; } + @Override public void addCatchHandler(ICPPASTCatchHandler statement) { assertNotFrozen(); if (statement != null) { - catchHandlers = (ICPPASTCatchHandler[]) ArrayUtil.append( ICPPASTCatchHandler.class, catchHandlers, ++catchHandlersPos, statement ); + catchHandlers = (ICPPASTCatchHandler[]) ArrayUtil.append(ICPPASTCatchHandler.class, catchHandlers, ++catchHandlersPos, statement); statement.setParent(this); statement.setPropertyInParent(CATCH_HANDLER); } } - public ICPPASTCatchHandler [] getCatchHandlers() { - if( catchHandlers == null ) return ICPPASTCatchHandler.EMPTY_CATCHHANDLER_ARRAY; - catchHandlers = (ICPPASTCatchHandler[]) ArrayUtil.removeNullsAfter( ICPPASTCatchHandler.class, catchHandlers, catchHandlersPos ); + @Override + public ICPPASTCatchHandler[] getCatchHandlers() { + if (catchHandlers == null) return ICPPASTCatchHandler.EMPTY_CATCHHANDLER_ARRAY; + catchHandlers = (ICPPASTCatchHandler[]) ArrayUtil.removeNullsAfter(ICPPASTCatchHandler.class, catchHandlers, catchHandlersPos); return catchHandlers; } - - private ICPPASTCatchHandler [] catchHandlers = null; - private int catchHandlersPos=-1; - @Override - protected boolean acceptCatchHandlers( ASTVisitor action ){ - final ICPPASTCatchHandler [] handlers = getCatchHandlers(); - for (int i=0; i> fModifications= new HashMap>(); + private final Map> fModifications= new HashMap>(); /** * Adds a modification to this modification map. */ public void addModification(ASTModification mod) { - final IASTNode targetNode = mod.getKind() == ASTModification.ModificationKind.INSERT_BEFORE ? - mod.getTargetNode().getParent() : mod.getTargetNode(); + IASTNode targetNode = mod.getTargetNode(); List mods= fModifications.get(targetNode); if (mods == null || mods.isEmpty()) { mods= new ArrayList(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriter.java index 5b7229e5de9..dc19453bfbc 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriter.java @@ -14,9 +14,13 @@ package org.eclipse.cdt.internal.core.dom.rewrite.astwriter; import org.eclipse.cdt.core.dom.ast.IASTASMDeclaration; import org.eclipse.cdt.core.dom.ast.IASTCompoundStatement; +import org.eclipse.cdt.core.dom.ast.IASTDeclarator; +import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.IASTIfStatement; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IASTPreprocessorIncludeStatement; +import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration; import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; @@ -34,7 +38,6 @@ import org.eclipse.cdt.internal.core.dom.rewrite.commenthandler.NodeCommentMap; */ public class ASTWriter { private ASTModificationStore modificationStore = new ASTModificationStore(); - private String givenIndentation = ""; //$NON-NLS-1$ /** * Creates a ASTWriter. @@ -43,16 +46,6 @@ public class ASTWriter { super(); } - /** - * Creates a ASTWriter that indents the code. - * - * @param givenIndentation The indentation added to each line - */ - public ASTWriter(String givenIndentation) { - super(); - this.givenIndentation = givenIndentation; - } - /** * Generates the source code representing this node. * @@ -75,10 +68,9 @@ public class ASTWriter { * * @see ASTCommenter#getCommentedNodeMap(org.eclipse.cdt.core.dom.ast.IASTTranslationUnit) */ - public String write(IASTNode rootNode, NodeCommentMap commentMap) - throws ProblemRuntimeException { + public String write(IASTNode rootNode, NodeCommentMap commentMap) throws ProblemRuntimeException { ChangeGeneratorWriterVisitor writer = new ChangeGeneratorWriterVisitor( - modificationStore, givenIndentation, null, commentMap); + modificationStore, null, commentMap); if (rootNode != null) { rootNode.accept(writer); } @@ -152,10 +144,35 @@ public class ASTWriter { * @return true if the blank line between the nodes is needed. */ public static boolean requireBlankLineInBetween(IASTNode node1, IASTNode node2) { - if (requiresTrailingBlankLine(node1)) + if (node1 instanceof ICPPASTVisibilityLabel && node2 instanceof ICPPASTVisibilityLabel) { return true; + } + if (suppressesTrailingBlankLine(node1)) { + return false; + } + if (node1 instanceof IASTPreprocessorIncludeStatement != + node2 instanceof IASTPreprocessorIncludeStatement) { + return true; + } + if (isFunctionDeclaration(node1) != isFunctionDeclaration(node2)) { + return true; + } + if (requiresTrailingBlankLine(node1)) { + return true; + } - return !suppressesTrailingBlankLine(node1) && requiresLeadingBlankLine(node2); + return requiresLeadingBlankLine(node2); + } + + private static boolean isFunctionDeclaration(IASTNode node) { + if (!(node instanceof IASTSimpleDeclaration)) { + return false; + } + for (IASTDeclarator declarator : ((IASTSimpleDeclaration) node).getDeclarators()) { + if (declarator instanceof IASTFunctionDeclarator) + return true; + } + return false; } /** diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java index 16f9325785f..4ff5321d55a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/ASTWriterVisitor.java @@ -13,7 +13,7 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.astwriter; -import java.util.ArrayList; +import java.util.List; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTArrayModifier; @@ -29,6 +29,7 @@ import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTNodeLocation; import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTPointerOperator; import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; @@ -62,28 +63,25 @@ public class ASTWriterVisitor extends ASTVisitor { private boolean spaceNeededBeforeName; { - shouldVisitExpressions = true; - shouldVisitStatements = true; - shouldVisitNames = true; - shouldVisitDeclarations = true; - shouldVisitDeclSpecifiers = true; - shouldVisitDeclarators = true; - shouldVisitArrayModifiers= true; - shouldVisitInitializers = true; + shouldVisitArrayModifiers = true; shouldVisitBaseSpecifiers = true; + shouldVisitDeclarations = true; + shouldVisitDeclarators = true; + shouldVisitDeclSpecifiers = true; + shouldVisitExpressions = true; + shouldVisitInitializers = true; + shouldVisitNames = true; shouldVisitNamespaces = true; - shouldVisitTemplateParameters = true; shouldVisitParameterDeclarations = true; + shouldVisitPointerOperators = true; + shouldVisitStatements = true; + shouldVisitTemplateParameters = true; shouldVisitTranslationUnit = true; + shouldVisitTypeIds = true; } public ASTWriterVisitor(NodeCommentMap commentMap) { - this("", commentMap); //$NON-NLS-1$ - } - - public ASTWriterVisitor(String givenIndentation, NodeCommentMap commentMap) { super(); - scribe.setGivenIndentation(givenIndentation); init(commentMap); this.commentMap = commentMap; this.suppressLeadingBlankLine = true; @@ -123,8 +121,8 @@ public class ASTWriterVisitor extends ASTVisitor { } } - private ArrayList getLeadingComments(IASTNode node) { - ArrayList leadingComments = commentMap.getLeadingCommentsForNode(node); + private List getLeadingComments(IASTNode node) { + List leadingComments = commentMap.getLeadingCommentsForNode(node); IASTNodeLocation[] locs = node.getNodeLocations(); if (locs != null && locs.length > 0 && locs[0] instanceof IASTCopyLocation) { IASTCopyLocation copyLoc = (IASTCopyLocation) locs[0]; @@ -240,6 +238,15 @@ public class ASTWriterVisitor extends ASTVisitor { return ASTVisitor.PROCESS_SKIP; } + @Override + public int visit(IASTPointerOperator pointerOperator) { + writeLeadingComments(pointerOperator); + if (!macroHandler.checkisMacroExpansionNode(pointerOperator)) { + declaratorWriter.writePointerOperator(pointerOperator); + } + return ASTVisitor.PROCESS_SKIP; + } + protected IASTName getParameterName(IASTDeclarator declarator) { return declarator.getName(); } @@ -303,6 +310,10 @@ public class ASTWriterVisitor extends ASTVisitor { this.spaceNeededBeforeName = value; } + public Scribe getScribe() { + return scribe; + } + public void newLine() { scribe.newLine(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java index ba7fb2e8623..66d25dd9378 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclSpecWriter.java @@ -267,7 +267,7 @@ public class DeclSpecWriter extends NodeWriter { } if (hasFreestandingComments(compDeclSpec)) { - writeFreeStandingComments(compDeclSpec); + writeFreestandingComments(compDeclSpec); } scribe.decrementIndentationLevel(); scribe.print('}'); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclarationWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclarationWriter.java index 41ed66fc643..29e21800a75 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclarationWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclarationWriter.java @@ -98,17 +98,12 @@ public class DeclarationWriter extends NodeWriter { writeVisibilityLabel((ICPPASTVisibilityLabel) declaration); } - if (hasTrailingComments(declaration)) { - writeTrailingComments(declaration, false); - } - if (addNewLine) { - scribe.newLine(); - } + writeTrailingComments(declaration, addNewLine); if (hasFreestandingComments(declaration)) { if (declaration instanceof IASTFunctionDefinition) { scribe.newLine(); } - writeFreeStandingComments(declaration); + writeFreestandingComments(declaration); } } @@ -186,7 +181,7 @@ public class DeclarationWriter extends NodeWriter { scribe.newLine(2); writeDeclarationsInNamespace(namespaceDefinition, namespaceDefinition.getDeclarations()); if (hasFreestandingComments(namespaceDefinition)) { - writeFreeStandingComments(namespaceDefinition); + writeFreestandingComments(namespaceDefinition); } scribe.newLine(); scribe.print('}'); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclaratorWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclaratorWriter.java index 4a9a8af3852..7d3fdf05c10 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclaratorWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/DeclaratorWriter.java @@ -62,9 +62,7 @@ public class DeclaratorWriter extends NodeWriter { } visitor.setSpaceNeededBeforeName(false); - if (hasTrailingComments(declarator)) { - writeTrailingComments(declarator, false); - } + writeTrailingComments(declarator, false); } protected void writeDefaultDeclarator(IASTDeclarator declarator) { @@ -81,7 +79,7 @@ public class DeclaratorWriter extends NodeWriter { protected void writePointerOperators(IASTDeclarator declarator, IASTPointerOperator[] pointOps) { for (IASTPointerOperator operator : pointOps) { - writePointerOp(operator); + writePointerOperator(operator); } } @@ -194,7 +192,7 @@ public class DeclaratorWriter extends NodeWriter { } } - private void writePointerOp(IASTPointerOperator operator) { + public void writePointerOperator(IASTPointerOperator operator) { if (operator instanceof IASTPointer) { IASTPointer pointOp = (IASTPointer) operator; writePointer(pointOp); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/InitializerWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/InitializerWriter.java index 7adc8fdce86..8b1da40bc37 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/InitializerWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/InitializerWriter.java @@ -51,8 +51,8 @@ public class InitializerWriter extends NodeWriter{ } else if (initializer instanceof ICPPASTConstructorChainInitializer) { writeConstructorChainInitializer((ICPPASTConstructorChainInitializer) initializer); } - if (hasTrailingComments(initializer)) - writeTrailingComments(initializer, false); + + writeTrailingComments(initializer, false); } private void writeEqualsInitializer(IASTEqualsInitializer initializer) { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/NodeWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/NodeWriter.java index 627e8158a5f..aa160a77bdf 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/NodeWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/NodeWriter.java @@ -11,7 +11,7 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.astwriter; -import java.util.ArrayList; +import java.util.List; import org.eclipse.cdt.core.dom.ast.IASTComment; import org.eclipse.cdt.core.dom.ast.IASTCopyLocation; @@ -83,7 +83,7 @@ public class NodeWriter { } protected void writeTrailingComments(IASTNode node) { - // Default is to write a new line after trailing comments. + // Default is to write a new line after the trailing comments. writeTrailingComments(node, true); } @@ -106,8 +106,8 @@ public class NodeWriter { return !getTrailingComments(node).isEmpty(); } - private ArrayList getTrailingComments(IASTNode node) { - ArrayList trailingComments = commentMap.getTrailingCommentsForNode(node); + private List getTrailingComments(IASTNode node) { + List trailingComments = commentMap.getTrailingCommentsForNode(node); IASTNodeLocation[] locs = node.getNodeLocations(); if (locs != null && locs.length > 0 && locs[0] instanceof IASTCopyLocation) { IASTCopyLocation loc = (IASTCopyLocation) locs[0]; @@ -120,8 +120,8 @@ public class NodeWriter { return !getFreestandingComments(node).isEmpty(); } - private ArrayList getFreestandingComments(IASTNode node) { - ArrayList freestandingComments = commentMap.getFreestandingCommentsForNode(node); + private List getFreestandingComments(IASTNode node) { + List freestandingComments = commentMap.getFreestandingCommentsForNode(node); IASTNodeLocation[] locs = node.getNodeLocations(); if (locs != null && locs.length > 0 && locs[0] instanceof IASTCopyLocation) { IASTCopyLocation loc = (IASTCopyLocation) locs[0]; @@ -130,7 +130,7 @@ public class NodeWriter { return freestandingComments; } - protected void writeFreeStandingComments(IASTNode node) { + protected void writeFreestandingComments(IASTNode node) { for (IASTComment comment : getFreestandingComments(node)) { scribe.print(comment.getComment()); scribe.newLine(); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/Scribe.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/Scribe.java index 8bc32d8396d..7f715f5e28f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/Scribe.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/Scribe.java @@ -8,6 +8,7 @@ * * Contributors: * Institute for Software - initial API and implementation + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.astwriter; @@ -19,42 +20,43 @@ package org.eclipse.cdt.internal.core.dom.rewrite.astwriter; * @author Emanuel Graf IFS */ public class Scribe { - private int indentationLevel = 0; - // Any positive indentation size is good enough since the code is going to be formatted anyway. - private int indentationSize = 4; + // Indentation is not necessary since the code is going to be formatted anyway. + // Preserved because some tests depend on it. + private static final int INDENTATION_SIZE = 4; + private final String newLine = System.getProperty("line.separator"); //$NON-NLS-1$ private StringBuilder buffer = new StringBuilder(); - private boolean isAtLineBeginning = true; - private String newLine = System.getProperty("line.separator"); //$NON-NLS-1$ - private String givenIndentation; + private int indentationLevel = 0; + private boolean isAtBeginningOfLine = true; private boolean skipLineBreaks; private boolean skipSemicolons; + public String getLineSeparator() { + return newLine; + } + public void newLine() { if (!skipLineBreaks) { - isAtLineBeginning = true; - buffer.append(getNewline()); + isAtBeginningOfLine = true; + buffer.append(newLine); } } + public boolean isAtBeginningOfLine() { + return isAtBeginningOfLine; + } + private void indent() { - if (givenIndentation != null) { - buffer.append(givenIndentation); - } - printSpaces(indentationLevel * indentationSize); + printSpaces(indentationLevel * INDENTATION_SIZE); } private void indentIfNewLine() { - if (isAtLineBeginning) { - isAtLineBeginning = false; + if (isAtBeginningOfLine) { + isAtBeginningOfLine = false; indent(); } } - private String getNewline() { - return newLine; - } - public void print(String code) { indentIfNewLine(); buffer.append(code); @@ -171,14 +173,6 @@ public class Scribe { buffer.append(' '); } - public String getGivenIndentation() { - return givenIndentation; - } - - public void setGivenIndentation(String givenIndentation) { - this.givenIndentation = givenIndentation; - } - public void cleanCache() { buffer = new StringBuilder(); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/StatementWriter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/StatementWriter.java index ac8c6f21f37..5cf34223998 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/StatementWriter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/astwriter/StatementWriter.java @@ -41,9 +41,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTryBlockStatement; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTWhileStatement; import org.eclipse.cdt.internal.core.dom.parser.IASTAmbiguousStatement; import org.eclipse.cdt.internal.core.dom.rewrite.commenthandler.NodeCommentMap; -import org.eclipse.cdt.internal.core.dom.rewrite.util.FileContentHelper; -import org.eclipse.cdt.internal.core.dom.rewrite.util.FileHelper; -import org.eclipse.core.resources.IFile; /** * Generates source code of statement nodes. The actual string operations are delegated @@ -154,12 +151,8 @@ public class StatementWriter extends NodeWriter { throw new ProblemRuntimeException((IASTProblemStatement)statement); } - if (hasTrailingComments(statement)) { - writeTrailingComments(statement, newLine); - } else if (newLine) { - scribe.newLine(); - } - + writeTrailingComments(statement, newLine); + return ASTVisitor.PROCESS_SKIP; } @@ -389,7 +382,7 @@ public class StatementWriter extends NodeWriter { } if (hasFreestandingComments(compoundStatement)) { - writeFreeStandingComments(compoundStatement); + writeFreestandingComments(compoundStatement); } if (decrementIndentationLevelOneMore) { @@ -438,11 +431,7 @@ public class StatementWriter extends NodeWriter { } protected int writeMixedStatement(IASTStatement statement) { - IFile file = FileHelper.getFileFromNode(statement); - int offset = statement.getFileLocation().getNodeOffset(); - int length = statement.getFileLocation().getNodeLength(); - String code = FileContentHelper.getContent(file, offset, length); - + String code = statement.getRawSignature(); scribe.println(code); return ASTVisitor.PROCESS_SKIP; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ASTModificationHelper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ASTModificationHelper.java index 3354844d4d1..30fd72f613a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ASTModificationHelper.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ASTModificationHelper.java @@ -15,8 +15,8 @@ import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.List; +import java.util.Map; import org.eclipse.cdt.core.dom.ast.IASTComment; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; @@ -100,29 +100,29 @@ public class ASTModificationHelper { private void copyComments(IASTNode newNode, IASTNode oldNode, NodeCommentMap commentMap) { // Attach all the comments that is attached to oldNode to newNode - ArrayList leadingComments = commentMap.getLeadingCommentsForNode(oldNode); + List leadingComments = commentMap.getLeadingCommentsForNode(oldNode); for (IASTComment comment : leadingComments) { commentMap.addLeadingCommentToNode(newNode, comment); } - ArrayList trailingComments = commentMap.getTrailingCommentsForNode(oldNode); + List trailingComments = commentMap.getTrailingCommentsForNode(oldNode); for (IASTComment comment : trailingComments) { commentMap.addTrailingCommentToNode(newNode, comment); } - ArrayList freestandingComments = commentMap.getFreestandingCommentsForNode(oldNode); + List freestandingComments = commentMap.getFreestandingCommentsForNode(oldNode); for (IASTComment comment : freestandingComments) { commentMap.addFreestandingCommentToNode(newNode, comment); } // Detach comments from oldNode (to avoid memory leak) - HashMap> leadingMap = commentMap.getLeadingMap(); + Map> leadingMap = commentMap.getLeadingMap(); leadingMap.remove(oldNode); - HashMap> trailingMap = commentMap.getTrailingMap(); + Map> trailingMap = commentMap.getTrailingMap(); trailingMap.remove(oldNode); - HashMap> freestandingMap = commentMap.getFreestandingMap(); + Map> freestandingMap = commentMap.getFreestandingMap(); freestandingMap.remove(oldNode); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java index d8d2b173c00..cb9ced1447a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGenerator.java @@ -13,11 +13,14 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.changegenerator; -import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.ToolFactory; @@ -30,15 +33,24 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.IASTDeclaration; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.dom.ast.IASTExpressionList; import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; +import org.eclipse.cdt.core.dom.ast.IASTNodeSelector; import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTPointerOperator; +import org.eclipse.cdt.core.dom.ast.IASTPreprocessorStatement; +import org.eclipse.cdt.core.dom.ast.IASTStandardFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; +import org.eclipse.cdt.core.dom.ast.IASTTypeId; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDeclarator; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; import org.eclipse.cdt.core.formatter.CodeFormatter; +import org.eclipse.cdt.core.formatter.DefaultCodeFormatterConstants; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification; import org.eclipse.cdt.internal.core.dom.rewrite.ASTModification.ModificationKind; @@ -48,24 +60,23 @@ import org.eclipse.cdt.internal.core.dom.rewrite.ASTRewriteAnalyzer; import org.eclipse.cdt.internal.core.dom.rewrite.astwriter.ASTWriter; import org.eclipse.cdt.internal.core.dom.rewrite.astwriter.ProblemRuntimeException; import org.eclipse.cdt.internal.core.dom.rewrite.commenthandler.NodeCommentMap; -import org.eclipse.cdt.internal.core.dom.rewrite.util.FileContentHelper; import org.eclipse.cdt.internal.core.dom.rewrite.util.FileHelper; import org.eclipse.cdt.internal.core.resources.ResourceLookup; import org.eclipse.cdt.internal.formatter.CCodeFormatter; import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.Assert; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.IRegion; +import org.eclipse.jface.text.Region; import org.eclipse.jface.text.TextUtilities; import org.eclipse.ltk.core.refactoring.Change; import org.eclipse.ltk.core.refactoring.CompositeChange; import org.eclipse.ltk.core.refactoring.TextFileChange; -import org.eclipse.text.edits.DeleteEdit; import org.eclipse.text.edits.InsertEdit; import org.eclipse.text.edits.MalformedTreeException; import org.eclipse.text.edits.MultiTextEdit; @@ -74,28 +85,31 @@ import org.eclipse.text.edits.TextEdit; import org.eclipse.text.edits.TextEditGroup; public class ChangeGenerator extends ASTVisitor { - private final LinkedHashMap sourceOffsets = new LinkedHashMap(); - public LinkedHashMap> modificationParent = new LinkedHashMap>(); - private final LinkedHashMap changes = new LinkedHashMap(); + private final Map sourceOffsets = new LinkedHashMap(); + private final Map>> classifiedModifications = + new HashMap>>(); + private final Map changes = new LinkedHashMap(); private CompositeChange change; private final ASTModificationStore modificationStore; private NodeCommentMap commentMap; { - shouldVisitExpressions = true; - shouldVisitStatements = true; + shouldVisitArrayModifiers= true; + shouldVisitBaseSpecifiers = true; shouldVisitNames = true; shouldVisitDeclarations = true; - shouldVisitDeclSpecifiers = true; shouldVisitDeclarators = true; - shouldVisitArrayModifiers= true; + shouldVisitDeclSpecifiers = true; + shouldVisitExpressions = true; shouldVisitInitializers = true; - shouldVisitBaseSpecifiers = true; shouldVisitNamespaces = true; - shouldVisitTemplateParameters = true; shouldVisitParameterDeclarations = true; + shouldVisitPointerOperators = true; + shouldVisitStatements = true; + shouldVisitTemplateParameters = true; shouldVisitTranslationUnit = true; + shouldVisitTypeIds = true; } public ChangeGenerator(ASTModificationStore modificationStore, NodeCommentMap commentMap) { @@ -109,157 +123,429 @@ public class ChangeGenerator extends ASTVisitor { public void generateChange(IASTNode rootNode, ASTVisitor pathProvider) throws ProblemRuntimeException { - change = new CompositeChange(Messages.ChangeGenerator_compositeChange); - initParentModList(); + change = new CompositeChange(ChangeGeneratorMessages.ChangeGenerator_compositeChange); + classifyModifications(); rootNode.accept(pathProvider); for (IFile currentFile : changes.keySet()) { MultiTextEdit edit = changes.get(currentFile); - edit = formatChangedCode(edit, currentFile); + edit = formatChangedCode(edit, rootNode.getTranslationUnit().getRawSignature(), currentFile.getProject()); TextFileChange subchange= ASTRewriteAnalyzer.createCTextFileChange(currentFile); subchange.setEdit(edit); change.add(subchange); } } - private void initParentModList() { + private void classifyModifications() { ASTModificationMap rootModifications = modificationStore.getRootModifications(); - if (rootModifications != null) { - for (IASTNode modifiedNode : rootModifications.getModifiedNodes()) { - List modificationsForNode = rootModifications.getModificationsForNode(modifiedNode); - IASTNode modifiedNodeParent = determineParentToBeRewritten(modifiedNode, modificationsForNode); - List list = modificationParent.get(modifiedNodeParent != null ? - modifiedNodeParent : modifiedNode); - if (list != null) { - list.addAll(modificationsForNode); - } else { - List modifiableList = new ArrayList(modificationsForNode); - modificationParent.put(modifiedNodeParent != null ? - modifiedNodeParent : modifiedNode, modifiableList); + if (rootModifications == null) + return; + + for (IASTNode node : rootModifications.getModifiedNodes()) { + List modifications = rootModifications.getModificationsForNode(node); + for (ASTModification modification : modifications) { + Map> map = classifiedModifications.get(node); + if (map == null) { + map = new TreeMap>(); + classifiedModifications.put(node, map); } + ModificationKind kind = modification.getKind(); + List list = map.get(kind); + if (list == null) { + list = new ArrayList(2); + map.put(kind, list); + } + list.add(modification); } } } - private IASTNode determineParentToBeRewritten(IASTNode modifiedNode, List modificationsForNode) { - IASTNode modifiedNodeParent = modifiedNode; - for (ASTModification currentModification : modificationsForNode) { - if (currentModification.getKind() == ASTModification.ModificationKind.REPLACE) { - modifiedNodeParent = modifiedNode.getParent(); - break; - } - } - modifiedNodeParent = modifiedNodeParent != null ? modifiedNodeParent : modifiedNode; - return modifiedNodeParent; - } - - /** - * Applies the C++ code formatter to the code affected by refactoring. - * - * @param edit The text edit produced by refactoring. - * @param file The file being modified. - * @return The text edit containing formatted refactoring changes, or the original text edit - * in case of errors. - */ - private MultiTextEdit formatChangedCode(MultiTextEdit edit, IFile file) { - String code; - try { - code = FileContentHelper.getContent(file, 0); - } catch (IOException e) { - CCorePlugin.log(e); - return edit; - } catch (CoreException e) { - CCorePlugin.log(e); - return edit; - } - IDocument document = new Document(code); - try { - TextEdit tempEdit = edit.copy(); - tempEdit.apply(document, TextEdit.UPDATE_REGIONS); - TextEdit[] edits = tempEdit.getChildren(); - IRegion[] regions = new IRegion[edits.length]; - for (int i = 0; i < edits.length; i++) { - regions[i] = edits[i].getRegion(); - } - ICProject project = CCorePlugin.getDefault().getCoreModel().create(file.getProject()); - Map options = project.getOptions(true); - CodeFormatter formatter = ToolFactory.createCodeFormatter(options); - code = document.get(); - TextEdit[] formatEdits = formatter.format(CCodeFormatter.K_TRANSLATION_UNIT, code, - regions, TextUtilities.getDefaultLineDelimiter(document)); - MultiTextEdit resultEdit = new MultiTextEdit(); - edits = edit.getChildren(); - for (int i = 0; i < edits.length; i++) { - IRegion region = regions[i]; - int offset = region.getOffset(); - TextEdit formatEdit = formatEdits[i]; - formatEdit.moveTree(-offset); - document = new Document(code.substring(offset, offset + region.getLength())); - formatEdit.apply(document, TextEdit.NONE); - TextEdit textEdit = edits[i]; - resultEdit.addChild( - new ReplaceEdit(textEdit.getOffset(), textEdit.getLength(), document.get())); - } - return resultEdit; - } catch (MalformedTreeException e) { - CCorePlugin.log(e); - return edit; - } catch (BadLocationException e) { - CCorePlugin.log(e); - return edit; - } - } - @Override - public int visit(IASTTranslationUnit translationUnit) { - if (hasChangedChild(translationUnit)) { - synthTreatment(translationUnit); - } - IASTFileLocation location = translationUnit.getFileLocation(); + public int visit(IASTTranslationUnit tu) { + IASTFileLocation location = tu.getFileLocation(); sourceOffsets.put(location.getFileName(), Integer.valueOf(location.getNodeOffset())); - return super.visit(translationUnit); + return super.visit(tu); } @Override public int leave(IASTTranslationUnit tu) { + handleAppends(tu); return super.leave(tu); } @Override public int visit(IASTDeclaration declaration) { - if (hasChangedChild(declaration)) { - synthTreatment(declaration); + handleInserts(declaration); + if (requiresRewrite(declaration)) { + handleReplace(declaration); return ASTVisitor.PROCESS_SKIP; } return super.visit(declaration); } - private void synthTreatment(IASTNode synthNode) { + @Override + public int visit(IASTDeclarator declarator) { + handleInserts(declarator); + if (requiresRewrite(declarator)) { + handleReplace(declarator); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(declarator); + } + + @Override + public int visit(IASTArrayModifier arrayModifier) { + handleInserts(arrayModifier); + if (requiresRewrite(arrayModifier)) { + handleReplace(arrayModifier); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(arrayModifier); + } + + @Override + public int visit(ICPPASTNamespaceDefinition namespaceDefinition) { + handleInserts(namespaceDefinition); + if (requiresRewrite(namespaceDefinition)) { + handleReplace(namespaceDefinition); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(namespaceDefinition); + } + + @Override + public int leave(ICPPASTNamespaceDefinition namespaceDefinition) { + if (!requiresRewrite(namespaceDefinition)) { + handleAppends(namespaceDefinition); + } + return super.leave(namespaceDefinition); + } + + @Override + public int visit(IASTDeclSpecifier declSpec) { + handleInserts(declSpec); + if (requiresRewrite(declSpec)) { + handleReplace(declSpec); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(declSpec); + } + + @Override + public int leave(IASTDeclSpecifier declSpec) { + if (!requiresRewrite(declSpec)) { + handleAppends(declSpec); + } + return super.leave(declSpec); + } + + @Override + public int visit(IASTExpression expression) { + handleInserts(expression); + if (requiresRewrite(expression)) { + handleReplace(expression); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(expression); + } + + @Override + public int visit(IASTInitializer initializer) { + handleInserts(initializer); + if (requiresRewrite(initializer)) { + handleReplace(initializer); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(initializer); + } + + @Override + public int visit(IASTName name) { + handleInserts(name); + if (requiresRewrite(name)) { + handleReplace(name); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(name); + } + + @Override + public int visit(IASTParameterDeclaration parameterDeclaration) { + handleInserts(parameterDeclaration); + if (requiresRewrite(parameterDeclaration)) { + handleReplace(parameterDeclaration); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(parameterDeclaration); + } + + @Override + public int visit(IASTPointerOperator pointerOperator) { + handleInserts(pointerOperator); + if (requiresRewrite(pointerOperator)) { + handleReplace(pointerOperator); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(pointerOperator); + } + + @Override + public int visit(IASTTypeId typeId) { + handleInserts(typeId); + if (requiresRewrite(typeId)) { + handleReplace(typeId); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(typeId); + } + + @Override + public int visit(IASTStatement statement) { + handleInserts(statement); + if (requiresRewrite(statement)) { + handleReplace(statement); + return ASTVisitor.PROCESS_SKIP; + } + return super.visit(statement); + } + + @Override + public int leave(IASTStatement statement) { + if (!requiresRewrite(statement)) { + handleAppends(statement); + } + return super.leave(statement); + } + + /** + * Applies the C++ code formatter to the code affected by refactoring. + * + * @param multiEdit The text edit produced by refactoring. + * @param code The code being modified. + * @param project The project containing the code. + * @return The text edit containing formatted refactoring changes, or the original text edit + * in case of errors. + */ + private MultiTextEdit formatChangedCode(MultiTextEdit multiEdit, String code, IProject project) { + IDocument document = new Document(code); + try { + // Apply refactoring changes to a temporary document. + TextEdit edit = multiEdit.copy(); + edit.apply(document, TextEdit.UPDATE_REGIONS); + + // Expand regions affected by the changes to cover complete lines. We calculate two + // sets of regions, reflecting the state of the document before and after + // the refactoring changes. + TextEdit[] edits = edit.getChildren(); + TextEdit[] originalEdits = multiEdit.getChildren(); + IRegion[] regionsAfter = new IRegion[edits.length]; + IRegion[] regionsBefore = new IRegion[edits.length]; + int numRegions = 0; + int prevEnd = -1; + for (int i = 0; i < edits.length; i++) { + edit = edits[i]; + int offset = edit.getOffset(); + int end = offset + edit.getLength(); + int newOffset = document.getLineInformationOfOffset(offset).getOffset(); + int newEnd = endOffset(document.getLineInformationOfOffset(end)); + edit = originalEdits[i]; + int offsetBefore = edit.getOffset(); + int newOffsetBefore = newOffset + offsetBefore - offset; + int newEndBefore = newEnd + offsetBefore + edit.getLength() - end; + if (newOffset <= prevEnd) { + numRegions--; + newOffset = regionsAfter[numRegions].getOffset(); + newOffsetBefore = regionsBefore[numRegions].getOffset(); + } + prevEnd = newEnd; + regionsAfter[numRegions] = new Region(newOffset, newEnd - newOffset); + regionsBefore[numRegions] = new Region(newOffsetBefore, newEndBefore - newOffsetBefore); + numRegions++; + } + + if (numRegions < regionsAfter.length) { + regionsAfter = Arrays.copyOf(regionsAfter, numRegions); + regionsBefore = Arrays.copyOf(regionsBefore, numRegions); + } + + // Calculate formatting changes for the regions after the refactoring changes. + ICProject proj = CCorePlugin.getDefault().getCoreModel().create(project); + Map options = proj.getOptions(true); + // Allow all comments to be indented. + options.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN, + DefaultCodeFormatterConstants.FALSE); + CodeFormatter formatter = ToolFactory.createCodeFormatter(options); + code = document.get(); + TextEdit[] formatEdits = formatter.format(CCodeFormatter.K_TRANSLATION_UNIT, code, + regionsAfter, TextUtilities.getDefaultLineDelimiter(document)); + + // For each of the regions we apply formatting changes and create a ReplaceEdit using + // the region before the refactoring changes and the text after the formatting changes. + MultiTextEdit resultEdit = new MultiTextEdit(); + for (int i = 0; i < regionsAfter.length; i++) { + IRegion region = regionsAfter[i]; + int offset = region.getOffset(); + edit = formatEdits[i]; + edit.moveTree(-offset); + document = new Document(code.substring(offset, offset + region.getLength())); + edit.apply(document, TextEdit.NONE); + region = regionsBefore[i]; + edit = new ReplaceEdit(region.getOffset(), region.getLength(), document.get()); + resultEdit.addChild(edit); + } + return resultEdit; + } catch (MalformedTreeException e) { + CCorePlugin.log(e); + return multiEdit; + } catch (BadLocationException e) { + CCorePlugin.log(e); + return multiEdit; + } + } + + private int endOffset(IRegion region) { + return region.getOffset() + region.getLength(); + } + + private int endOffset(IASTFileLocation nodeLocation) { + return nodeLocation.getNodeOffset() + nodeLocation.getNodeLength(); + } + + private int endOffset(IASTNode node) { + return endOffset(node.getFileLocation()); + } + + private int offset(IASTNode node) { + return node.getFileLocation().getNodeOffset(); + } + + private void handleInserts(IASTNode anchorNode) { + List modifications = getModifications(anchorNode, ModificationKind.INSERT_BEFORE); + if (modifications.isEmpty()) + return; ChangeGeneratorWriterVisitor writer = new ChangeGeneratorWriterVisitor(modificationStore, commentMap); - synthNode.accept(writer); - String synthSource = writer.toString(); - createChange(synthNode, synthSource); + IASTNode newNode = null; + for (ASTModification modification : modifications) { + boolean first = newNode == null; + newNode = modification.getNewNode(); + if (first) { + IASTNode prevNode = getPreviousSiblingOrPreprocessorNode(anchorNode); + if (prevNode != null) { + if (ASTWriter.requireBlankLineInBetween(prevNode, newNode)) { + writer.newLine(); + } + } else if (anchorNode.getParent() instanceof ICPPASTNamespaceDefinition) { + writer.newLine(); + } + } + newNode.accept(writer); + if (getContainingNodeList(anchorNode) != null) { + writer.getScribe().print(", "); //$NON-NLS-1$ + } + } + if (ASTWriter.requireBlankLineInBetween(newNode, anchorNode)) { + writer.newLine(); + } + int insertPos = getOffsetIncludingComments(anchorNode); + int length = 0; + if (writer.getScribe().isAtBeginningOfLine()) { + String tuCode = anchorNode.getTranslationUnit().getRawSignature(); + insertPos = skipPrecedingWhitespace(tuCode, insertPos); + length = insertPos; + insertPos = skipPrecedingBlankLines(tuCode, insertPos); + length -= insertPos; + } + String code = writer.toString(); + ReplaceEdit edit = new ReplaceEdit(insertPos, length, code); + IFile file = FileHelper.getFileFromNode(anchorNode); + MultiTextEdit parentEdit = getEdit(anchorNode, file); + parentEdit.addChild(edit); + sourceOffsets.put(file.getName(), Integer.valueOf(edit.getOffset())); + } + + private void handleReplace(IASTNode node) { + List modifications = getModifications(node, ModificationKind.REPLACE); + String source = node.getTranslationUnit().getRawSignature(); + TextEdit edit; + ChangeGeneratorWriterVisitor writer = + new ChangeGeneratorWriterVisitor(modificationStore, commentMap); + if (modifications.size() == 1 && modifications.get(0).getNewNode() == null) { + int offset = getOffsetIncludingComments(node); + int endOffset = getEndOffsetIncludingComments(node); + offset = skipPrecedingBlankLines(source, offset); + endOffset = skipTrailingBlankLines(source, endOffset); + IASTNode[] siblingsList = getContainingNodeList(node); + if (siblingsList != null) { + if (siblingsList.length > 1) { + if (node == siblingsList[0]) { + endOffset = skipToTrailingDelimiter(source, ',', endOffset); + } else { + offset = skipToPrecedingDelimiter(source, ',', offset); + } + } else if (node.getPropertyInParent() == ICPPASTFunctionDefinition.MEMBER_INITIALIZER) { + offset = skipToPrecedingDelimiter(source, ':', offset); + } + } + IASTNode prevNode = getPreviousSiblingOrPreprocessorNode(node); + IASTNode nextNode = getNextSiblingOrPreprocessorNode(node); + if (prevNode != null && nextNode != null) { + if (ASTWriter.requireBlankLineInBetween(prevNode, nextNode)) { + writer.newLine(); + } + } else if (node.getParent() instanceof ICPPASTNamespaceDefinition) { + writer.newLine(); + } + String code = writer.toString(); + edit = new ReplaceEdit(offset, endOffset - offset, code); + } else { + node.accept(writer); + String code = writer.toString(); + IASTFileLocation location = node.getFileLocation(); + int offset = location.getNodeOffset(); + int endOffset = offset + location.getNodeLength(); + if (node instanceof IASTStatement || node instanceof IASTDeclaration) { + // Include trailing comments in the area to be replaced. + endOffset = Math.max(endOffset, getEndOffsetIncludingTrailingComments(node)); + } + String lineSeparator = writer.getScribe().getLineSeparator(); + if (code.endsWith(lineSeparator)) { + code = code.substring(0, code.length() - lineSeparator.length()); + } + edit = new ReplaceEdit(offset, endOffset - offset, code); + } + IFile file = FileHelper.getFileFromNode(node); + MultiTextEdit parentEdit = getEdit(node, file); + parentEdit.addChild(edit); - IASTFileLocation fileLocation = synthNode.getFileLocation(); + IASTFileLocation fileLocation = node.getFileLocation(); int newOffset = fileLocation.getNodeOffset() + fileLocation.getNodeLength(); sourceOffsets.put(fileLocation.getFileName(), Integer.valueOf(newOffset)); } private void handleAppends(IASTNode node) { + List modifications = getModifications(node, ModificationKind.APPEND_CHILD); + if (modifications.isEmpty()) + return; ChangeGeneratorWriterVisitor writer = new ChangeGeneratorWriterVisitor(modificationStore, commentMap); - List modifications = modificationParent.get(node); ReplaceEdit anchor = getAppendAnchor(node); Assert.isNotNull(anchor); IASTNode precedingNode = getLastNodeBeforeAppendPoint(node); - if (precedingNode != null && - ASTWriter.requireBlankLineInBetween(precedingNode, modifications.get(0).getNewNode())) { - writer.newLine(); - } for (ASTModification modification : modifications) { IASTNode newNode = modification.getNewNode(); + if (precedingNode != null) { + if (ASTWriter.requireBlankLineInBetween(precedingNode, newNode)) { + writer.newLine(); + } + } else if (node instanceof ICPPASTNamespaceDefinition) { + writer.newLine(); + } + precedingNode = null; newNode.accept(writer); } + if (node instanceof ICPPASTNamespaceDefinition) { + writer.newLine(); + } String code = writer.toString(); IFile file = FileHelper.getFileFromNode(node); MultiTextEdit parentEdit = getEdit(node, file); @@ -271,29 +557,216 @@ public class ChangeGenerator extends ASTVisitor { sourceOffsets.put(fileLocation.getFileName(), Integer.valueOf(newOffset)); } + private void handleAppends(IASTTranslationUnit tu) { + ASTWriter synthWriter = new ASTWriter(); + synthWriter.setModificationStore(modificationStore); + + for (ASTModification modification : getModifications(tu, ModificationKind.APPEND_CHILD)) { + IASTNode targetNode = modification.getTargetNode(); + IASTFileLocation targetLocation = targetNode.getFileLocation(); + String currentFile = targetLocation.getFileName(); + IPath implPath = new Path(currentFile); + IFile relevantFile= ResourceLookup.selectFileForLocation(implPath, null); + if (relevantFile == null || !relevantFile.exists()) { // If not in workspace or local file system + throw new UnhandledASTModificationException(modification); + } + MultiTextEdit edit; + if (changes.containsKey(relevantFile)) { + edit = changes.get(relevantFile); + } else { + edit = new MultiTextEdit(); + changes.put(relevantFile, edit); + } + String code = synthWriter.write(modification.getNewNode(), commentMap); + + if (targetNode instanceof IASTTranslationUnit && + ((IASTTranslationUnit) targetNode).getDeclarations().length > 0) { + IASTTranslationUnit targetTu = (IASTTranslationUnit) targetNode; + IASTDeclaration lastDecl = targetTu.getDeclarations()[targetTu.getDeclarations().length - 1]; + targetLocation = lastDecl.getFileLocation(); + } + String lineDelimiter = FileHelper.determineLineDelimiter(tu.getRawSignature()); + edit.addChild(new InsertEdit(endOffset(targetLocation), lineDelimiter + lineDelimiter + code)); + } + } + + /** + * Returns the list of nodes the given node is part of, for example function parameters if + * the node is a parameter. + * + * @param node the node possibly belonging to a list. + * @return the list of nodes containing the given node, or null if the node + * does not belong to a list + */ + private IASTNode[] getContainingNodeList(IASTNode node) { + if (node.getPropertyInParent() == IASTStandardFunctionDeclarator.FUNCTION_PARAMETER) { + return ((IASTStandardFunctionDeclarator) node.getParent()).getParameters(); + } else if (node.getPropertyInParent() == IASTExpressionList.NESTED_EXPRESSION) { + return ((IASTExpressionList) node.getParent()).getExpressions(); + } else if (node.getPropertyInParent() == ICPPASTFunctionDefinition.MEMBER_INITIALIZER) { + return ((ICPPASTFunctionDefinition) node.getParent()).getMemberInitializers(); + } else if (node.getPropertyInParent() == ICPPASTFunctionDeclarator.EXCEPTION_TYPEID) { + return ((ICPPASTFunctionDeclarator) node.getParent()).getExceptionSpecification(); + } + + return null; + } + private IASTNode getLastNodeBeforeAppendPoint(IASTNode node) { IASTNode[] children; - if (node instanceof IASTCompositeTypeSpecifier) { + if (node instanceof ICPPASTNamespaceDefinition) { + children = ((ICPPASTNamespaceDefinition) node).getDeclarations(true); + } else if (node instanceof IASTCompositeTypeSpecifier) { children = ((IASTCompositeTypeSpecifier) node).getDeclarations(true); } else { children = node.getChildren(); } - return children.length > 0 ? children[children.length - 1] : null; - } - - private boolean isAppendable(Iterable modifications) { - for (ASTModification modification : modifications) { - if (!isAppendable(modification)) - return false; + for (int i = children.length; --i >= 0;) { + IASTNode child = getReplacementNode(children[i]); + if (child != null) + return child; } - return true; + return null; } - private boolean isAppendable(ASTModification modification) { - if (modification.getKind() != ModificationKind.APPEND_CHILD) - return false; - IASTNode node = modification.getNewNode(); - return node instanceof IASTDeclaration || node instanceof IASTStatement; + private IASTNode getReplacementNode(IASTNode node) { + List modifications = getModifications(node, ModificationKind.REPLACE); + if (!modifications.isEmpty()) { + node = modifications.get(modifications.size() - 1).getNewNode(); + } + return node; + } + + private IASTNode getPreviousSiblingNode(IASTNode node) { + IASTNode parent = node.getParent(); + IASTNode[] siblings; + if (parent instanceof ICPPASTNamespaceDefinition) { + siblings = ((ICPPASTNamespaceDefinition) parent).getDeclarations(true); + } else if (parent instanceof IASTCompositeTypeSpecifier) { + siblings = ((IASTCompositeTypeSpecifier) parent).getDeclarations(true); + } else { + siblings = parent.getChildren(); + } + boolean beforeNode = false; + for (int i = siblings.length; --i >= 0;) { + IASTNode sibling = siblings[i]; + if (sibling == node) { + beforeNode = true; + } else if (beforeNode) { + sibling = getReplacementNode(sibling); + if (sibling != null) + return sibling; + } + } + return null; + } + + private IASTNode getPreviousSiblingOrPreprocessorNode(IASTNode node) { + int offset = offset(node); + IASTTranslationUnit ast = node.getTranslationUnit(); + IASTPreprocessorStatement[] preprocessorStatements = ast.getAllPreprocessorStatements(); + int low = 0; + int high = preprocessorStatements.length; + while (low < high) { + int mid = (low + high) / 2; + IASTNode statement = preprocessorStatements[mid]; + if (statement.isPartOfTranslationUnitFile() && endOffset(statement) > offset) { + high = mid; + } else { + low = mid + 1; + } + } + low--; + if (low >= 0) { + IASTNode statement = preprocessorStatements[low]; + if (statement.isPartOfTranslationUnitFile()) { + int endOffset = endOffset(statement); + if (!doesRegionContainNode(ast, endOffset, offset - endOffset)) { + return statement; + } + } + } + + return getPreviousSiblingNode(node); + } + + private IASTNode getNextSiblingNode(IASTNode node) { + IASTNode parent = node.getParent(); + IASTNode[] siblings; + if (parent instanceof ICPPASTNamespaceDefinition) { + siblings = ((ICPPASTNamespaceDefinition) parent).getDeclarations(true); + } else if (parent instanceof IASTCompositeTypeSpecifier) { + siblings = ((IASTCompositeTypeSpecifier) parent).getDeclarations(true); + } else { + siblings = parent.getChildren(); + } + boolean beforeNode = false; + for (int i = 0; i < siblings.length; i++) { + IASTNode sibling = siblings[i]; + if (sibling == node) { + beforeNode = true; + } else if (beforeNode) { + sibling = getReplacementNode(sibling); + if (sibling != null) + return sibling; + } + } + return null; + } + + private IASTNode getNextSiblingOrPreprocessorNode(IASTNode node) { + int endOffset = endOffset(node); + IASTTranslationUnit ast = node.getTranslationUnit(); + IASTPreprocessorStatement[] preprocessorStatements = ast.getAllPreprocessorStatements(); + int low = 0; + int high = preprocessorStatements.length; + while (low < high) { + int mid = (low + high) / 2; + IASTNode statement = preprocessorStatements[mid]; + if (statement.isPartOfTranslationUnitFile() && offset(statement) > endOffset) { + high = mid; + } else { + low = mid + 1; + } + } + if (high < preprocessorStatements.length) { + IASTNode statement = preprocessorStatements[high]; + if (statement.isPartOfTranslationUnitFile()) { + int offset = offset(statement); + if (!doesRegionContainNode(ast, endOffset, offset - endOffset)) { + return statement; + } + } + } + + return getNextSiblingNode(node); + } + + /** + * Checks if a given region contains at least a piece of a node after rewrite. + */ + private boolean doesRegionContainNode(IASTTranslationUnit ast, int offset, int length) { + IASTNodeSelector nodeSelector = ast.getNodeSelector(ast.getFilePath()); + while (length > 0) { + IASTNode node = nodeSelector.findFirstContainedNode(offset, length - 1); + if (node == null) + return false; + if (!isNodeRemoved(node)) + return true; + int oldOffset = offset; + offset = endOffset(node); + length -= offset - oldOffset; + } + return false; + } + + private boolean isNodeRemoved(IASTNode node) { + do { + if (getReplacementNode(node) == null) + return true; + } while ((node = node.getParent()) != null); + + return false; } /** @@ -310,93 +783,127 @@ public class ChangeGenerator extends ASTVisitor { node instanceof ICPPASTNamespaceDefinition)) { return null; } - IFile file = FileHelper.getFileFromNode(node); - String code = originalCodeOfNode(node, file); + String code = node.getRawSignature(); IASTFileLocation location = node.getFileLocation(); int pos = location.getNodeOffset() + location.getNodeLength(); int len = code.endsWith("}") ? 1 : 0; //$NON-NLS-1$ - int startOfLine = skipPrecedingBlankLines(code, code.length() - len); - if (startOfLine < 0) { + int insertPos = code.length() - len; + int startOfLine = skipPrecedingBlankLines(code, insertPos); + if (startOfLine == insertPos) { // Include the closing brace in the region that will be reformatted. - return new ReplaceEdit(pos - len, len, code.substring(code.length() - len)); + return new ReplaceEdit(pos - len, len, code.substring(insertPos)); } - return new ReplaceEdit(location.getNodeOffset() + startOfLine, 0, ""); //$NON-NLS-1$ + return new ReplaceEdit(location.getNodeOffset() + startOfLine, insertPos - startOfLine, ""); //$NON-NLS-1$ } /** - * Skips blank lines preceding the given position. - * @param text the text to scan - * @param pos the position after that blank lines. - * @return the beginning of the first blank line, or -1 if the beginning of the line - * corresponding to the given position contains non-whitespace characters. + * Skips whitespace between the beginning of the line and the given position. + * + * @param text The text to scan. + * @param startPos The start position. + * @return The beginning of the line containing the start position, if there are no + * non-whitespace characters between the beginning of the line and the start position. + * Otherwise returns the start position. */ - private int skipPrecedingBlankLines(String text, int pos) { - int lineStart = -1; - while (--pos >= 0) { + private int skipPrecedingWhitespace(String text, int startPos) { + for (int pos = startPos; --pos >= 0; ) { char c = text.charAt(pos); if (c == '\n') { - lineStart = pos + 1; + return pos + 1; } else if (!Character.isWhitespace(c)) { - break; + return startPos; } } - return lineStart; + return 0; } - private void synthTreatment(IASTTranslationUnit synthTU) { - ASTWriter synthWriter = new ASTWriter(); - synthWriter.setModificationStore(modificationStore); - - for (ASTModification modification : modificationParent.get(synthTU)) { - IASTNode targetNode = modification.getTargetNode(); - IASTFileLocation targetLocation = targetNode.getFileLocation(); - String currentFile = targetLocation.getFileName(); - IPath implPath = new Path(currentFile); - IFile relevantFile= ResourceLookup.selectFileForLocation(implPath, null); - if (relevantFile == null || !relevantFile.exists()) { // If not in workspace or local file system - throw new UnhandledASTModificationException(modification); - } - MultiTextEdit edit; - if (changes.containsKey(relevantFile)) { - edit = changes.get(relevantFile); - } else { - edit = new MultiTextEdit(); - changes.put(relevantFile, edit); - } - String newNodeCode = synthWriter.write(modification.getNewNode(), commentMap); - - switch (modification.getKind()) { - case REPLACE: - edit.addChild(new ReplaceEdit(targetLocation.getNodeOffset(), - targetLocation.getNodeLength(), newNodeCode)); - break; - case INSERT_BEFORE: - if (ASTWriter.requireBlankLineInBetween(modification.getNewNode(), targetNode)) { - newNodeCode = newNodeCode + "\n"; //$NON-NLS-1$ - } - edit.addChild(new InsertEdit(getOffsetIncludingComments(targetNode), newNodeCode)); - break; - case APPEND_CHILD: - if (targetNode instanceof IASTTranslationUnit && - ((IASTTranslationUnit) targetNode).getDeclarations().length > 0) { - IASTTranslationUnit tu = (IASTTranslationUnit) targetNode; - IASTDeclaration lastDecl = tu.getDeclarations()[tu.getDeclarations().length - 1]; - targetLocation = lastDecl.getFileLocation(); - } - String lineDelimiter = FileHelper.determineLineDelimiter( - FileHelper.getFileFromNode(targetNode)); - edit.addChild(new InsertEdit(targetLocation.getNodeOffset() + targetLocation.getNodeLength(), - lineDelimiter + lineDelimiter + newNodeCode)); - break; + /** + * Skips whitespace between the beginning of the line and the given position and blank lines + * above that. + * + * @param text The text to scan. + * @param startPos The start position. + * @return The beginning of the first blank line preceding the start position, + * or beginning of the current line, if there are no non-whitespace characters between + * the beginning of the line and the start position. + * Otherwise returns the start position. + */ + private int skipPrecedingBlankLines(String text, int startPos) { + for (int pos = startPos; --pos >= 0;) { + char c = text.charAt(pos); + if (c == '\n') { + startPos = pos + 1; + } else if (!Character.isWhitespace(c)) { + return startPos; } } + return 0; } - private void createChange(IASTNode synthNode, String synthSource) { - IFile relevantFile = FileHelper.getFileFromNode(synthNode); - String originalCode = originalCodeOfNode(synthNode, relevantFile); - CodeComparer codeComparer = new CodeComparer(originalCode, synthSource); - codeComparer.createChange(getEdit(synthNode, relevantFile), synthNode); + /** + * Skips whitespace between the given position and the end of the line and blank lines + * below that. + * + * @param text The text to scan. + * @param startPos The start position. + * @return The beginning of the first non-blank line following the start position, if there are + * no non-whitespace characters between the start position and the end of the line. + * Otherwise returns the start position. + */ + private int skipTrailingBlankLines(String text, int startPos) { + for (int pos = startPos; pos < text.length(); pos++) { + char c = text.charAt(pos); + if (c == '\n') { + startPos = pos + 1; + } else if (!Character.isWhitespace(c)) { + return startPos; + } + } + return text.length(); + } + + /** + * Skips whitespace to the left of the given position until the given delimiter character + * is found. + * + * @param text The text to scan. + * @param delimiter the delimiter to find + * @param startPos The start position. + * @return The position of the given delimiter, or the start position if a non-whitespace + * character is encountered before the given delimiter. + */ + private int skipToPrecedingDelimiter(String text, char delimiter, int startPos) { + for (int pos = startPos; --pos >= 0; ) { + char c = text.charAt(pos); + if (c == delimiter) { + return pos; + } else if (!Character.isWhitespace(c)) { + return startPos; + } + } + return startPos; + } + + /** + * Skips whitespace to the right of the given position until the given delimiter character + * is found. + * + * @param text The text to scan. + * @param delimiter the delimiter to find + * @param startPos The start position. + * @return The position after the given delimiter, or the start position if a non-whitespace + * character is encountered before the given delimiter. + */ + private int skipToTrailingDelimiter(String text, char delimiter, int startPos) { + for (int pos = startPos; pos < text.length(); pos++) { + char c = text.charAt(pos); + if (c == delimiter) { + return pos + 1; + } else if (!Character.isWhitespace(c)) { + return startPos; + } + } + return startPos; } private MultiTextEdit getEdit(IASTNode modifiedNode, IFile file) { @@ -405,55 +912,29 @@ public class ChangeGenerator extends ASTVisitor { edit = new MultiTextEdit(); changes.put(file, edit); } - TextEditGroup editGroup = new TextEditGroup(Messages.ChangeGenerator_group); - for (ASTModification currentModification : modificationParent.get(modifiedNode)) { - if (currentModification.getAssociatedEditGroup() != null) { - editGroup = currentModification.getAssociatedEditGroup(); - edit.addChildren(editGroup.getTextEdits()); - break; + TextEditGroup editGroup = new TextEditGroup(ChangeGeneratorMessages.ChangeGenerator_group); + for (List modifications : getModifications(modifiedNode).values()) { + for (ASTModification modification : modifications) { + if (modification.getAssociatedEditGroup() != null) { + editGroup = modification.getAssociatedEditGroup(); + edit.addChildren(editGroup.getTextEdits()); + return edit; + } } } return edit; } - private String originalCodeOfNode(IASTNode node, IFile sourceFile) { - int nodeOffset = getOffsetIncludingComments(node); - int nodeLength = getNodeLengthIncludingComments(node); - return FileContentHelper.getContent(sourceFile, nodeOffset, nodeLength); - } - - private int getNodeLengthIncludingComments(IASTNode node) { - int nodeOffset = node.getFileLocation().getNodeOffset(); - int nodeLength = node.getFileLocation().getNodeLength(); - - ArrayList comments = commentMap.getAllCommentsForNode(node); - if (!comments.isEmpty()) { - int startOffset = nodeOffset; - int endOffset = nodeOffset + nodeLength; - for (IASTComment comment : comments) { - IASTFileLocation commentLocation = comment.getFileLocation(); - if (commentLocation.getNodeOffset() < startOffset) { - startOffset = commentLocation.getNodeOffset(); - } - if (commentLocation.getNodeOffset() + commentLocation.getNodeLength() >= endOffset) { - endOffset = commentLocation.getNodeOffset() + commentLocation.getNodeLength(); - } - } - nodeLength = endOffset - startOffset; - } - return nodeLength; - } - private int getOffsetIncludingComments(IASTNode node) { - int nodeOffset = node.getFileLocation().getNodeOffset(); + int nodeOffset = offset(node); - ArrayList comments = commentMap.getAllCommentsForNode(node); + List comments = commentMap.getAllCommentsForNode(node); if (!comments.isEmpty()) { int startOffset = nodeOffset; for (IASTComment comment : comments) { - IASTFileLocation commentLocation = comment.getFileLocation(); - if (commentLocation.getNodeOffset() < startOffset) { - startOffset = commentLocation.getNodeOffset(); + int commentOffset = offset(comment); + if (commentOffset < startOffset) { + startOffset = commentOffset; } } nodeOffset = startOffset; @@ -461,311 +942,82 @@ public class ChangeGenerator extends ASTVisitor { return nodeOffset; } - private boolean hasChangedChild(IASTNode node) { - return modificationParent.containsKey(node); + private int getEndOffsetIncludingComments(IASTNode node) { + int endOffset = 0; + while (true) { + IASTFileLocation fileLocation = node.getFileLocation(); + if (fileLocation != null) + endOffset = Math.max(endOffset, endOffset(fileLocation)); + List comments = commentMap.getAllCommentsForNode(node); + if (!comments.isEmpty()) { + for (IASTComment comment : comments) { + int commentEndOffset = endOffset(comment); + if (commentEndOffset >= endOffset) { + endOffset = commentEndOffset; + } + } + } + IASTNode[] children = node.getChildren(); + if (children.length == 0) + break; + node = children[children.length - 1]; + } + return endOffset; } - private boolean hasAppendsOnly(IASTNode node) { - List modifications = modificationParent.get(node); + private int getEndOffsetIncludingTrailingComments(IASTNode node) { + int endOffset = 0; + while (true) { + IASTFileLocation fileLocation = node.getFileLocation(); + if (fileLocation != null) + endOffset = Math.max(endOffset, endOffset(fileLocation)); + List comments = commentMap.getTrailingCommentsForNode(node); + if (!comments.isEmpty()) { + for (IASTComment comment : comments) { + int commentEndOffset = endOffset(comment); + if (commentEndOffset >= endOffset) { + endOffset = commentEndOffset; + } + } + } + IASTNode[] children = node.getChildren(); + if (children.length == 0) + break; + node = children[children.length - 1]; + } + return endOffset; + } + + private Map> getModifications(IASTNode node) { + Map> modifications = classifiedModifications.get(node); if (modifications == null) - return false; - return isAppendable(modifications); + return Collections.emptyMap(); + return modifications; } - @Override - public int visit(IASTDeclarator declarator) { - if (hasChangedChild(declarator)) { - synthTreatment(declarator); - return ASTVisitor.PROCESS_SKIP; - } - return super.visit(declarator); + private List getModifications(IASTNode node, ModificationKind kind) { + Map> allModifications = getModifications(node); + List modifications = allModifications.get(kind); + if (modifications == null) + return Collections.emptyList(); + return modifications; } - @Override - public int visit(IASTArrayModifier mod) { - if (hasChangedChild(mod)) { - synthTreatment(mod); - return ASTVisitor.PROCESS_SKIP; - } - return super.visit(mod); - } - - @Override - public int visit(ICPPASTNamespaceDefinition namespaceDefinition) { - if (hasChangedChild(namespaceDefinition) && !hasAppendsOnly(namespaceDefinition)) { - synthTreatment(namespaceDefinition); - return ASTVisitor.PROCESS_SKIP; - } - return super.visit(namespaceDefinition); - } - - @Override - public int leave(ICPPASTNamespaceDefinition namespaceDefinition) { - if (hasAppendsOnly(namespaceDefinition)) { - handleAppends(namespaceDefinition); - } - return super.leave(namespaceDefinition); - } - - @Override - public int visit(IASTDeclSpecifier declSpec) { - if (hasChangedChild(declSpec) && !hasAppendsOnly(declSpec)) { - synthTreatment(declSpec); - return ASTVisitor.PROCESS_SKIP; - } - return super.visit(declSpec); - } - - @Override - public int leave(IASTDeclSpecifier declSpec) { - if (hasAppendsOnly(declSpec)) { - handleAppends(declSpec); - } - return super.leave(declSpec); - } - - @Override - public int visit(IASTExpression expression) { - if (hasChangedChild(expression)) { - synthTreatment(expression); - return ASTVisitor.PROCESS_SKIP; - } - return super.visit(expression); - } - - @Override - public int visit(IASTInitializer initializer) { - if (hasChangedChild(initializer)) { - synthTreatment(initializer); - return ASTVisitor.PROCESS_SKIP; - } - return super.visit(initializer); - } - - @Override - public int visit(IASTName name) { - if (hasChangedChild(name)) { - synthTreatment(name); - return ASTVisitor.PROCESS_SKIP; - } - return super.visit(name); - } - - @Override - public int visit(IASTParameterDeclaration parameterDeclaration) { - if (hasChangedChild(parameterDeclaration)) { - synthTreatment(parameterDeclaration); - return ASTVisitor.PROCESS_SKIP; - } - return super.visit(parameterDeclaration); - } - - @Override - public int visit(IASTStatement statement) { - if (hasChangedChild(statement) && !hasAppendsOnly(statement)) { - synthTreatment(statement); - return ASTVisitor.PROCESS_SKIP; - } - return super.visit(statement); - } - - @Override - public int leave(IASTStatement statement) { - if (hasAppendsOnly(statement)) { - handleAppends(statement); - } - return super.leave(statement); - } - - class CodeComparer { - private final StringBuilder originalCode; - private final StringBuilder synthCode; - private int lastCommonInSynthStart; - private int lastCommonInOriginalStart; - private int firstCommonInSynthEnd; - private int firstCommonInOriginalEnd; - - public CodeComparer(String originalCode, String synthCode) { - this.originalCode = new StringBuilder(originalCode); - this.synthCode = new StringBuilder(synthCode); - calculatePositions(); - } - - private void calculatePositions() { - lastCommonInSynthStart = calcLastCommonPositionInSynthCode(); - lastCommonInOriginalStart = calcLastCommonPositionInOriginalCode(); - firstCommonInSynthEnd = - calcFirstPositionOfCommonEndInSynthCode(lastCommonInSynthStart, lastCommonInOriginalStart); - firstCommonInOriginalEnd = - calcFirstPositionOfCommonEndInOriginalCode(lastCommonInOriginalStart, lastCommonInSynthStart); - trimTrailingNewlines(); - } - - private void trimTrailingNewlines() { - int prevOrigEnd = firstCommonInOriginalEnd - 1; - while (prevOrigEnd > lastCommonInOriginalStart && prevOrigEnd > -1 && - isUninterresting(originalCode, prevOrigEnd)) { - firstCommonInOriginalEnd = prevOrigEnd; - prevOrigEnd--; - } - - while (firstCommonInOriginalEnd > 0 && firstCommonInOriginalEnd + 1 < originalCode.length() && - (originalCode.charAt(firstCommonInOriginalEnd) == ' ' || originalCode.charAt(firstCommonInOriginalEnd) == '\t')) { - firstCommonInOriginalEnd++; - } - - int prevSynthEnd = firstCommonInSynthEnd - 1; - while (prevSynthEnd > lastCommonInSynthStart && prevSynthEnd > -1 && - isUninterresting(synthCode, prevSynthEnd)) { - firstCommonInSynthEnd = prevSynthEnd; - prevSynthEnd--; - } - while (firstCommonInSynthEnd > 0 && firstCommonInSynthEnd + 1 < synthCode.length() && - (synthCode.charAt(firstCommonInSynthEnd) == ' ' || synthCode.charAt(firstCommonInSynthEnd) == '\t')) { - firstCommonInSynthEnd++; - } - } - - public int getLastCommonPositionInSynthCode() { - return lastCommonInSynthStart; - } - - public int getLastCommonPositionInOriginalCode() { - return lastCommonInOriginalStart; - } - - public int getFirstPositionOfCommonEndInOriginalCode() { - return firstCommonInOriginalEnd; - } - - public int getFirstPositionOfCommonEndInSynthCode() { - return firstCommonInSynthEnd; - } - - public int calcLastCommonPositionInSynthCode() { - return findLastCommonPosition(synthCode, originalCode); - } - - public int calcLastCommonPositionInOriginalCode() { - return findLastCommonPosition(originalCode, synthCode); - } - - private int calcFirstPositionOfCommonEndInOriginalCode(int originalLimit, int synthLimit) { - StringBuilder reverseOriginalCode = new StringBuilder(originalCode).reverse(); - StringBuilder reverseSynthCode = new StringBuilder(synthCode).reverse(); - int lastCommonPosition = findLastCommonPosition(reverseOriginalCode, reverseSynthCode, - reverseOriginalCode.length() - originalLimit - 1, - reverseSynthCode.length() - synthLimit - 1); - - if (lastCommonPosition < 0 || lastCommonPosition >= originalCode.length()) { - return -1; - } - - return originalCode.length() - lastCommonPosition - 1; - } - - private int calcFirstPositionOfCommonEndInSynthCode(int synthLimit, int originalLimit) { - StringBuilder reverseOriginalCode = new StringBuilder(originalCode).reverse(); - StringBuilder reverseSynthCode = new StringBuilder(synthCode).reverse(); - - int lastCommonPosition = findLastCommonPosition(reverseSynthCode, reverseOriginalCode, - reverseSynthCode.length() - synthLimit - 1, - reverseOriginalCode.length() - originalLimit - 1); - - if (lastCommonPosition < 0 || lastCommonPosition >= synthCode.length()) { - return -1; - } - - return synthCode.length() - lastCommonPosition - 1; - } - - private int findLastCommonPosition(StringBuilder first, StringBuilder second) { - return findLastCommonPosition(first, second, first.length(), second.length()); - } - - private int findLastCommonPosition(StringBuilder first, StringBuilder second, int firstLimit, - int secondLimit) { - int firstIndex = -1; - int secondIndex = -1; - int lastCommonIndex = -1; - - do { - lastCommonIndex = firstIndex; - firstIndex = nextInterrestingPosition(first, firstIndex); - secondIndex = nextInterrestingPosition(second, secondIndex); - } while (firstIndex > -1 && firstIndex <= firstLimit && secondIndex > -1 && - secondIndex <= secondLimit && first.charAt(firstIndex) == second.charAt(secondIndex)); - return lastCommonIndex; - } - - private int nextInterrestingPosition(StringBuilder code, int position) { - do { - position++; - if (position >= code.length()) { - return -1; - } - } while (isUninterresting(code, position)); - return position; - } - - private boolean isUninterresting(StringBuilder code, int position) { - switch (code.charAt(position)) { - case ' ': - case '\n': - case '\r': - case '\t': + private boolean requiresRewrite(IASTNode node) { + if (!getModifications(node, ModificationKind.REPLACE).isEmpty()) + return true; + for (ASTModification modification : getModifications(node, ModificationKind.APPEND_CHILD)) { + if (!isAppendable(modification)) return true; - - default: - return false; - } } + return false; + } - protected void createChange(MultiTextEdit edit, IASTNode changedNode) { - int changeOffset = getOffsetIncludingComments(changedNode); - createChange(edit, changeOffset); - } - - private void createChange(MultiTextEdit edit, int changeOffset) { - int i = (firstCommonInSynthEnd >= 0 ? - firstCommonInOriginalEnd : originalCode.length()) - lastCommonInOriginalStart; - if (i <= 0) { - String insertCode = synthCode.substring(lastCommonInSynthStart, - firstCommonInSynthEnd); - InsertEdit iEdit = new InsertEdit(changeOffset + lastCommonInOriginalStart, - insertCode); - edit.addChild(iEdit); - } else if ((firstCommonInSynthEnd >= 0 ? - firstCommonInSynthEnd : synthCode.length()) - lastCommonInSynthStart <= 0) { - int correction = 0; - if (lastCommonInSynthStart > firstCommonInSynthEnd) { - correction = lastCommonInSynthStart - firstCommonInSynthEnd; - } - DeleteEdit dEdit = new DeleteEdit(changeOffset + lastCommonInOriginalStart, - firstCommonInOriginalEnd - lastCommonInOriginalStart + correction); - edit.addChild(dEdit); - } else { - String replacementCode = getReplacementCode(lastCommonInSynthStart, - firstCommonInSynthEnd); - ReplaceEdit rEdit = new ReplaceEdit( - changeOffset + Math.max(lastCommonInOriginalStart, 0), - (firstCommonInOriginalEnd >= 0 ? - firstCommonInOriginalEnd : - originalCode.length()) - Math.max(lastCommonInOriginalStart, 0), - replacementCode); - edit.addChild(rEdit); - } - } - - private String getReplacementCode(int lastCommonPositionInSynth, int firstOfCommonEndInSynth) { - int replacementStart = Math.max(lastCommonPositionInSynth, 0); - int replacementEnd = firstOfCommonEndInSynth >= 0 ? - firstOfCommonEndInSynth : synthCode.length(); - if (replacementStart < replacementEnd) { - return synthCode.substring(replacementStart, replacementEnd); - } - return ""; //$NON-NLS-1$ - } + private boolean isAppendable(ASTModification modification) { + if (modification.getKind() != ModificationKind.APPEND_CHILD) + return false; + IASTNode node = modification.getNewNode(); + return node instanceof IASTDeclaration || node instanceof IASTStatement; } public Change getChange() { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/Messages.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGeneratorMessages.java similarity index 70% rename from core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/Messages.java rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGeneratorMessages.java index b082183a05d..8165953bfb9 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/Messages.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGeneratorMessages.java @@ -6,7 +6,7 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Markus Schorn - initial API and implementation + * Markus Schorn - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.changegenerator; @@ -16,15 +16,15 @@ import org.eclipse.osgi.util.NLS; * External strings for the change generator. * @since 5.0 */ -public class Messages extends NLS { - private static final String BUNDLE_NAME = "org.eclipse.cdt.internal.core.dom.rewrite.changegenerator.messages"; //$NON-NLS-1$ +public class ChangeGeneratorMessages extends NLS { public static String ChangeGenerator_compositeChange; public static String ChangeGenerator_group; + static { - // initialize resource bundle - NLS.initializeMessages(BUNDLE_NAME, Messages.class); + // Initialize resource bundle + NLS.initializeMessages(ChangeGeneratorMessages.class.getName(), ChangeGeneratorMessages.class); } - private Messages() { + private ChangeGeneratorMessages() { } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/messages.properties b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGeneratorMessages.properties similarity index 100% rename from core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/messages.properties rename to core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGeneratorMessages.properties diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGeneratorWriterVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGeneratorWriterVisitor.java index 72537365b5d..7fd8a078166 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGeneratorWriterVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/changegenerator/ChangeGeneratorWriterVisitor.java @@ -23,6 +23,7 @@ import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTParameterDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTPointerOperator; import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IASTStatement; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; @@ -43,7 +44,6 @@ import org.eclipse.cdt.internal.core.dom.rewrite.commenthandler.NodeCommentMap; * @author Emanuel Graf IFS */ public class ChangeGeneratorWriterVisitor extends ASTWriterVisitor { - private static final String DEFAULT_INDENTATION = ""; //$NON-NLS-1$ private final ASTModificationStore modificationStore; private final String fileScope; private ModificationScopeStack stack; @@ -56,30 +56,31 @@ public class ChangeGeneratorWriterVisitor extends ASTWriterVisitor { this.fileScope = fileScope; this.stack = new ModificationScopeStack(modificationStore); - shouldVisitExpressions = delegateVisitor.shouldVisitExpressions; - shouldVisitStatements = delegateVisitor.shouldVisitStatements; - shouldVisitNames = delegateVisitor.shouldVisitNames; - shouldVisitDeclarations = delegateVisitor.shouldVisitDeclarators; - shouldVisitDeclSpecifiers = delegateVisitor.shouldVisitDeclSpecifiers; - shouldVisitDeclarators = delegateVisitor.shouldVisitDeclarators; - shouldVisitInitializers = delegateVisitor.shouldVisitInitializers; - shouldVisitBaseSpecifiers = delegateVisitor.shouldVisitBaseSpecifiers; - shouldVisitNamespaces = delegateVisitor.shouldVisitNamespaces; - shouldVisitTemplateParameters = delegateVisitor.shouldVisitTemplateParameters; - shouldVisitParameterDeclarations = delegateVisitor.shouldVisitParameterDeclarations; - shouldVisitTranslationUnit = delegateVisitor.shouldVisitTranslationUnit; - shouldVisitProblems = delegateVisitor.shouldVisitProblems; - shouldVisitTypeIds = delegateVisitor.shouldVisitTypeIds; shouldVisitArrayModifiers= delegateVisitor.shouldVisitArrayModifiers; + shouldVisitBaseSpecifiers = delegateVisitor.shouldVisitBaseSpecifiers; + shouldVisitDeclarations = delegateVisitor.shouldVisitDeclarators; + shouldVisitDeclarators = delegateVisitor.shouldVisitDeclarators; + shouldVisitDeclSpecifiers = delegateVisitor.shouldVisitDeclSpecifiers; + shouldVisitExpressions = delegateVisitor.shouldVisitExpressions; + shouldVisitInitializers = delegateVisitor.shouldVisitInitializers; + shouldVisitNames = delegateVisitor.shouldVisitNames; + shouldVisitNamespaces = delegateVisitor.shouldVisitNamespaces; + shouldVisitParameterDeclarations = delegateVisitor.shouldVisitParameterDeclarations; + shouldVisitPointerOperators= delegateVisitor.shouldVisitPointerOperators; + shouldVisitProblems = delegateVisitor.shouldVisitProblems; + shouldVisitStatements = delegateVisitor.shouldVisitStatements; + shouldVisitTemplateParameters = delegateVisitor.shouldVisitTemplateParameters; + shouldVisitTranslationUnit = delegateVisitor.shouldVisitTranslationUnit; + shouldVisitTypeIds = delegateVisitor.shouldVisitTypeIds; } public ChangeGeneratorWriterVisitor(ASTModificationStore modStore, NodeCommentMap nodeMap) { - this(modStore, DEFAULT_INDENTATION, null, nodeMap); + this(modStore, null, nodeMap); } - public ChangeGeneratorWriterVisitor(ASTModificationStore modStore, String givenIndentation, - String fileScope, NodeCommentMap commentMap) { - super(givenIndentation, commentMap); + public ChangeGeneratorWriterVisitor(ASTModificationStore modStore, String fileScope, + NodeCommentMap commentMap) { + super(commentMap); this.modificationStore = modStore; this.fileScope = fileScope; this.shouldVisitTranslationUnit = true; @@ -209,6 +210,12 @@ public class ChangeGeneratorWriterVisitor extends ASTWriterVisitor { return PROCESS_SKIP; } + @Override + public int leave(IASTPointerOperator pointerOperator) { + super.leave(pointerOperator); + return PROCESS_SKIP; + } + @Override public int leave(IASTProblem problem) { super.leave(problem); @@ -305,6 +312,14 @@ public class ChangeGeneratorWriterVisitor extends ASTWriterVisitor { return PROCESS_SKIP; } + @Override + public int visit(IASTPointerOperator pointerOperator) { + if (doBeforeEveryNode(pointerOperator) == PROCESS_CONTINUE) { + return super.visit(pointerOperator); + } + return PROCESS_SKIP; + } + @Override public int visit(IASTProblem problem) { if (doBeforeEveryNode(problem) == PROCESS_CONTINUE) { @@ -369,10 +384,8 @@ public class ChangeGeneratorWriterVisitor extends ASTWriterVisitor { stack.pushScope(node); currentMod.getNewNode().accept(this); stack.popScope(node); - return PROCESS_SKIP; - } else { - return PROCESS_SKIP; } + return PROCESS_SKIP; } } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenter.java index 25620836f9d..a7d748a3333 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenter.java @@ -13,6 +13,7 @@ package org.eclipse.cdt.internal.core.dom.rewrite.commenthandler; import java.util.ArrayList; import java.util.Collections; +import java.util.List; import java.util.TreeMap; import org.eclipse.cdt.core.dom.ast.ASTVisitor; @@ -22,6 +23,7 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier; import org.eclipse.cdt.core.dom.ast.IASTDeclaration; import org.eclipse.cdt.core.dom.ast.IASTDeclarator; import org.eclipse.cdt.core.dom.ast.IASTExpression; +import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.dom.ast.IASTInitializer; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; @@ -36,7 +38,6 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateParameter; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; -import org.eclipse.cdt.internal.core.dom.rewrite.util.OffsetHelper; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; @@ -171,26 +172,25 @@ public class ASTCommenter { * @return NodeCommentMap */ public static NodeCommentMap getCommentedNodeMap(IASTTranslationUnit transUnit){ - if (transUnit== null) { + if (transUnit == null) { return new NodeCommentMap(); } - ArrayList comments = removeNotNeededComments(transUnit); - if (comments == null || comments.size() == 0) { + List comments = removeNotNeededComments(transUnit); + if (comments == null || comments.isEmpty()) { return new NodeCommentMap(); } return addCommentsToCommentMap(transUnit, comments); } - private static ArrayList removeNotNeededComments(IASTTranslationUnit transUnit) { - ArrayList comments = getCommentsInWorkspace(transUnit); - if (comments == null || comments.size() == 0) { + private static List removeNotNeededComments(IASTTranslationUnit transUnit) { + List comments = getCommentsInWorkspace(transUnit); + if (comments == null || comments.isEmpty()) { return null; } - ArrayList com = removeAllPreprocessorComments(transUnit, comments); - return com; + return removeAllPreprocessorComments(transUnit, comments); } - private static ArrayList getCommentsInWorkspace(IASTTranslationUnit tu) { + private static List getCommentsInWorkspace(IASTTranslationUnit tu) { IASTComment[] comments = tu.getComments(); ArrayList commentsInWorkspace = new ArrayList(); @@ -206,8 +206,8 @@ public class ASTCommenter { return commentsInWorkspace; } - private static ArrayList removeAllPreprocessorComments(IASTTranslationUnit tu, - ArrayList comments) { + private static List removeAllPreprocessorComments(IASTTranslationUnit tu, + List comments) { IASTPreprocessorStatement[] preprocessorStatements = tu.getAllPreprocessorStatements(); TreeMap treeOfPreProcessorLines = new TreeMap(); TreeMap> ppOffsetForFiles = new TreeMap>(); @@ -215,7 +215,7 @@ public class ASTCommenter { for (IASTPreprocessorStatement statement : preprocessorStatements) { if (isInWorkspace(statement)) { String fileName = statement.getFileLocation().getFileName(); - treeOfPreProcessorLines.put(OffsetHelper.getStartingLineNumber(statement), fileName); + treeOfPreProcessorLines.put(statement.getFileLocation().getStartingLineNumber(), fileName); ArrayList offsetList = ppOffsetForFiles.get(fileName); if (offsetList == null) { offsetList = new ArrayList(); @@ -227,8 +227,9 @@ public class ASTCommenter { ArrayList commentsInCode = new ArrayList(); for (IASTComment comment : comments) { - int comStartLineNumber = OffsetHelper.getStartingLineNumber(comment); - String fileName = comment.getFileLocation().getFileName(); + IASTFileLocation commentFileLocation = comment.getFileLocation(); + int comStartLineNumber = commentFileLocation.getStartingLineNumber(); + String fileName = commentFileLocation.getFileName(); if (treeOfPreProcessorLines.containsKey(comStartLineNumber) && treeOfPreProcessorLines.get(comStartLineNumber).equals(fileName)) { continue; @@ -248,7 +249,7 @@ public class ASTCommenter { return false; } - if (comment.getTranslationUnit()==null || comment.getTranslationUnit().getDeclarations().length < 1) { + if (comment.getTranslationUnit() == null || comment.getTranslationUnit().getDeclarations().length < 1) { return true; } IASTDeclaration decl = comment.getTranslationUnit().getDeclarations()[0]; @@ -286,7 +287,7 @@ public class ASTCommenter { } private static NodeCommentMap addCommentsToCommentMap(IASTTranslationUnit rootNode, - ArrayList comments){ + List comments){ NodeCommentMap commentMap = new NodeCommentMap(); CommentHandler commHandler = new CommentHandler(comments); @@ -296,8 +297,8 @@ public class ASTCommenter { ASTCommenterVisitor commenter = new ASTCommenterVisitor(commHandler, commentMap); declarations[i].accept(commenter); - //add remaining comments to the last declaration => Comments won't get lost - if (i + 1 == declarations.length) { + // Add the remaining comments to the last declaration to prevent comment loss. + if (i == declarations.length - 1) { commenter.addRemainingComments(declarations[i]); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenterVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenterVisitor.java index 6d7b1e26776..9fbd6bbf19f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenterVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/ASTCommenterVisitor.java @@ -45,17 +45,18 @@ public class ASTCommenterVisitor extends ASTVisitor { private NodeCommenter nodeCommenter; { - shouldVisitExpressions = true; - shouldVisitStatements = true; - shouldVisitNames = true; - shouldVisitDeclarations = true; - shouldVisitDeclSpecifiers = true; - shouldVisitDeclarators = true; - shouldVisitInitializers = true; shouldVisitBaseSpecifiers = true; + shouldVisitDeclarations = true; + shouldVisitDeclarators = true; + shouldVisitDeclSpecifiers = true; + shouldVisitExpressions = true; + shouldVisitInitializers = true; + shouldVisitNames = true; shouldVisitNamespaces = true; - shouldVisitTemplateParameters = true; shouldVisitParameterDeclarations = true; + shouldVisitStatements = true; + shouldVisitTemplateParameters = true; + shouldVisitTypeIds = true; } public ASTCommenterVisitor(CommentHandler commHandler, NodeCommentMap commentMap) { @@ -92,6 +93,11 @@ public class ASTCommenterVisitor extends ASTVisitor { return nodeCommenter.appendComments((ASTNode) statement); } + @Override + public int visit(IASTTypeId typeId) { + return nodeCommenter.appendComments((ASTNode) typeId); + } + @Override public int visit(IASTDeclaration declaration) { return nodeCommenter.appendComments((ASTNode) declaration); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/CommentHandler.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/CommentHandler.java index 9299f42963b..9ef98352418 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/CommentHandler.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/CommentHandler.java @@ -7,11 +7,11 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.commenthandler; -import java.util.ArrayList; +import java.util.List; import org.eclipse.cdt.core.dom.ast.IASTComment; @@ -23,10 +23,9 @@ import org.eclipse.cdt.core.dom.ast.IASTComment; * @author Guido Zgraggen IFS */ public class CommentHandler { - - private final ArrayList comments; + private final List comments; - public CommentHandler(ArrayList comments) { + public CommentHandler(List comments) { super(); this.comments = comments; } @@ -36,7 +35,7 @@ public class CommentHandler { } public boolean hasMore() { - return comments.size()>0; + return !comments.isEmpty(); } public IASTComment getFirst() { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommentMap.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommentMap.java index 4f65d336710..829c2ddd4e2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommentMap.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommentMap.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik + * Copyright (c) 2008, 2011 Institute for Software, HSR Hochschule fuer Technik * Rapperswil, University of applied sciences and others * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 @@ -7,12 +7,14 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation ******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.commenthandler; import java.util.ArrayList; import java.util.HashMap; +import java.util.List; +import java.util.Map; import org.eclipse.cdt.core.dom.ast.IASTComment; import org.eclipse.cdt.core.dom.ast.IASTNode; @@ -25,18 +27,18 @@ import org.eclipse.cdt.core.dom.ast.IASTNode; * @author Guido Zgraggen IFS */ public class NodeCommentMap { - protected final HashMap> leadingMap = new HashMap>(); - protected final HashMap> trailingMap = new HashMap>(); - protected final HashMap> freestandingMap = new HashMap>(); + protected final Map> leadingMap = new HashMap>(); + protected final Map> trailingMap = new HashMap>(); + protected final Map> freestandingMap = new HashMap>(); /** * Add a comment to the map with the trailing comments. * @param node The node is the key. * @param comment The comment is the value */ - public void addTrailingCommentToNode(IASTNode node, IASTComment comment){ - ArrayList comments = trailingMap.get(node); - if(comments == null){ + public void addTrailingCommentToNode(IASTNode node, IASTComment comment) { + List comments = trailingMap.get(node); + if (comments == null) { comments = new ArrayList(); } comments.add(comment); @@ -44,17 +46,15 @@ public class NodeCommentMap { } /** - * Returns an ArrayList for the given node. This ArrayList contains all the comments + * Returns a List for the given node. This List contains all the comments * which are assigned to this specific node. If no comments are available an empty - * ArrayList is returned. + * List is returned. * @param node The key to fetch the associated comments. - * @return ArrayList + * @return List */ - public ArrayList getTrailingCommentsForNode(IASTNode node){ - if(trailingMap.get(node) == null) { - return new ArrayList(); - } - return trailingMap.get(node); + public List getTrailingCommentsForNode(IASTNode node) { + List list = trailingMap.get(node); + return list != null ? list : new ArrayList(); } /** @@ -62,9 +62,9 @@ public class NodeCommentMap { * @param node The node is the key. * @param comment The comment is the value */ - public void addLeadingCommentToNode(IASTNode node, IASTComment comment){ - ArrayList comments = leadingMap.get(node); - if(comments == null){ + public void addLeadingCommentToNode(IASTNode node, IASTComment comment) { + List comments = leadingMap.get(node); + if (comments == null) { comments = new ArrayList(); } comments.add(comment); @@ -72,17 +72,15 @@ public class NodeCommentMap { } /** - * Returns an ArrayList for the given node. This ArrayList contains all the comments + * Returns a List for the given node. This List contains all the comments * which are assigned to this specific node. If no comments are available an empty - * ArrayList is returned. + * List is returned. * @param node The key to fetch the associated comments. - * @return ArrayList + * @return List */ - public ArrayList getLeadingCommentsForNode(IASTNode node){ - if(leadingMap.get(node) == null) { - return new ArrayList(); - } - return leadingMap.get(node); + public List getLeadingCommentsForNode(IASTNode node) { + List list = leadingMap.get(node); + return list != null ? list : new ArrayList(); } /** @@ -90,9 +88,9 @@ public class NodeCommentMap { * @param node The node is the key. * @param comment The comment is the value */ - public void addFreestandingCommentToNode(IASTNode node, IASTComment comment){ - ArrayList comments = freestandingMap.get(node); - if(comments == null){ + public void addFreestandingCommentToNode(IASTNode node, IASTComment comment) { + List comments = freestandingMap.get(node); + if (comments == null) { comments = new ArrayList(); } comments.add(comment); @@ -100,51 +98,50 @@ public class NodeCommentMap { } /** - * Returns an ArrayList for the given node. This ArrayList contains all the comments + * Returns a List for the given node. This List contains all the comments * which are assigned to this specific node. If no comments are available an empty - * ArrayList is returned. + * List is returned. * @param node The key to fetch the associated comments. - * @return ArrayList + * @return List */ - public ArrayList getFreestandingCommentsForNode(IASTNode node){ - if(freestandingMap.get(node) == null) { - return new ArrayList(); - } - return freestandingMap.get(node); + public List getFreestandingCommentsForNode(IASTNode node) { + List list = freestandingMap.get(node); + return list != null ? list : new ArrayList(); } - - + /** - * Returns the HashMap with all leading maps. Used only for test purpose - * @return HashMap of all leading comments + * Returns the Map with all leading maps. Used only for test purpose + * @return Map of all leading comments */ - public HashMap> getLeadingMap() { + public Map> getLeadingMap() { return leadingMap; } + /** - * Returns the HashMap with all trailing maps. Used only for test purpose - * @return HashMap of all trailing comments + * Returns the Map with all trailing maps. Used only for test purpose + * @return Map of all trailing comments */ - public HashMap> getTrailingMap() { + public Map> getTrailingMap() { return trailingMap; } + /** - * Returns the HashMap with all freestanding maps. Used only for test purpose - * @return HashMap of all freestanding comments + * Returns the Map with all freestanding maps. Used only for test purpose + * @return Map of all freestanding comments */ - public HashMap> getFreestandingMap() { + public Map> getFreestandingMap() { return freestandingMap; } /** - * Returns an ArrayList for the given node. This ArrayList contains all the comments + * Returns an List for the given node. This List contains all the comments * which are assigned to this specific node. If no comments are available an empty - * ArrayList is returned. + * List is returned. * @param node The key to fetch the associated comments. - * @return ArrayList + * @return List */ - public ArrayList getAllCommentsForNode(IASTNode node) { - ArrayList comment = new ArrayList(); + public List getAllCommentsForNode(IASTNode node) { + List comment = new ArrayList(); comment.addAll(getFreestandingCommentsForNode(node)); comment.addAll(getLeadingCommentsForNode(node)); comment.addAll(getTrailingCommentsForNode(node)); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommenter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommenter.java index 5ae49e8f7dc..8938c60ff23 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommenter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/commenthandler/NodeCommenter.java @@ -7,20 +7,21 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * Institute for Software - initial API and implementation + * Institute for Software - initial API and implementation + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.commenthandler; -import java.io.InputStream; import java.util.Vector; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTComment; import org.eclipse.cdt.core.dom.ast.IASTDeclaration; +import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; -import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier.ICPPASTBaseSpecifier; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; import org.eclipse.cdt.internal.core.dom.parser.ASTNode; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTDeclarationStatement; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTExplicitTemplateInstantiation; @@ -32,32 +33,29 @@ import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTLinkageSpecification; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSwitchStatement; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTemplateDeclaration; import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTWhileStatement; -import org.eclipse.cdt.internal.core.dom.rewrite.util.OffsetHelper; -import org.eclipse.cdt.internal.core.resources.ResourceLookup; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; /** - * The NodeCommenter contains all the logic that is needed for the ASTCommentVisitor to assign the comments - * to the suitable node. Together with the ASTCommenterVisitor it fills all the comments with the correspondent - * node into the NodeCommentMap. + * The NodeCommenter contains all the logic that is needed for the ASTCommentVisitor to assign + * the comments to the suitable node. Together with the ASTCommenterVisitor it fills all + * the comments with the correspondent node into the NodeCommentMap. * - * Following, a little explanation of the assignment logic. It is only a loose illustration a detailed description - * would include a combined explanation of ASTCommenterVisitor and NodeCommenter.
+ * Following, a little explanation of the assignment logic. It is only a loose illustration + * a detailed description would include a combined explanation of ASTCommenterVisitor and + * NodeCommenter.
* To understand the logic we define the three types of comments:
* leading comments - Comments before a statement, declaration, or definition.
* trailing comments - Comments right after the AST node on the same line.
* freestanding comments - Comments before a closing brace such as they occur in * namespace-, class- and method-definitions or at the end of a file.
* - * The first comment is fetched and the position of it is compared to the position of the actual node. If - * the position of the comment is smaller than the comment is added to the node as leading. If it is behind the node - * but on the same line it is added as trailing. If one of these possibilities match the next comment is fetched for - * the same check. If it doesn't match the same procedure is done for all the child nodes. After checking the sub nodes - * the actual node is checked again if the comment is trailing. Then there is also the possibility that this comment is - * freestanding. This is the case when the comment is not added to any child node but the position is smaller den - * the end position of the node. + * The first comment is fetched and the position of it is compared to the position of the actual + * node. If the position of the comment is smaller than the comment is added to the node as leading. + * If it is behind the node but on the same line it is added as trailing. If one of these + * possibilities match the next comment is fetched for the same check. If it doesn't match the same + * procedure is done for all the child nodes. After checking the sub nodes the actual node is + * checked again if the comment is trailing. Then there is also the possibility that this comment is + * freestanding. This is the case when the comment is not added to any child node but the position + * is smaller than the end position of the node. * * @author Guido Zgraggen IFS */ @@ -90,14 +88,14 @@ public class NodeCommenter { ASTNode com = (ASTNode) comment; if (node.getFileLocation() == null) { - //MacroExpansions have no FileLocation + // MacroExpansions have no FileLocation return false; } - int nodeLineNumber = OffsetHelper.getEndingLineNumber(node); - int commentLineNumber= OffsetHelper.getStartingLineNumber(comment); + int nodeLineNumber = getEndingLineNumber(node); + int commentLineNumber= getStartingLineNumber(comment); - if (OffsetHelper.getNodeEndPoint(com) <= OffsetHelper.getNodeOffset(node)) { + if (getNodeEndPoint(com) <= getNodeOffset(node)) { addLeadingCommentToMap(node, comment); return true; } else if (isTrailing(node, com, nodeLineNumber, commentLineNumber)) { @@ -111,10 +109,10 @@ public class NodeCommenter { ASTNode com = (ASTNode) comment; if (node.getFileLocation() == null) { - //MacroExpansions have no Filelocation + // MacroExpansions have no FileLocation return false; } - if (OffsetHelper.getNodeEndPoint(com) <= OffsetHelper.getNodeEndPoint(node)) { + if (getNodeEndPoint(com) <= getNodeEndPoint(node)) { addFreestandingCommentToMap(node, comment); return true; } @@ -137,47 +135,23 @@ public class NodeCommenter { } private boolean isTrailing(ASTNode node, ASTNode com, int nodeLineNumber, int commentLineNumber) { - if (nodeLineNumber == commentLineNumber - && OffsetHelper.getNodeOffset(com) >= OffsetHelper.getNodeEndPoint(node) - && canNotBeAddedToParent(node,com) - && !mustBeAddToSubnodes(node)) { - if (OffsetHelper.getNodeOffset(com) < OffsetHelper.getNodeEndPoint(node) + 2) { - return true; - } - IPath path = new Path(node.getContainingFilename()); - IFile file = ResourceLookup.selectFileForLocation(path, null); // NPE thrown below, like original behavior - - //XXX HSR Guido: Possible Performance Issue (File access) - try { - InputStream is = file.getContents(); - - int length = OffsetHelper.getNodeOffset(com)-OffsetHelper.getNodeEndPoint(node); - byte[] b = new byte[length]; - - long count = is.skip(OffsetHelper.getEndOffsetWithoutComments(node)); - if (count < OffsetHelper.getEndOffsetWithoutComments(node)) { - return false; - } - if (is.read(b, 0, length) == -1) { - return false; - } - - for (byte bb : b) { - if (!Character.isWhitespace(bb)) { - is.close(); - return false; - } - } - is.close(); - return true; - } catch (Exception e) { - return false; - } + if (nodeLineNumber != commentLineNumber || + getNodeOffset(com) < getNodeEndPoint(node) || + !canNotBeAddedToParent(node, com) || + mustBeAddedToSubnodes(node)) { + return false; } - - return false; + if (getNodeOffset(com) < getNodeEndPoint(node) + 2) { + return true; + } + String code = node.getTranslationUnit().getRawSignature(); + int commentOffset = getNodeOffset(com) - getNodeEndPoint(node) + getNodeEndOffset(node); + for (int offset = getNodeEndOffset(node); offset < commentOffset; offset++) { + if (!Character.isWhitespace(code.charAt(offset))) + return false; + } + return true; } - private boolean canNotBeAddedToParent(ASTNode node, ASTNode com) { ASTNode parent = (ASTNode) node.getParent(); @@ -192,10 +166,10 @@ public class NodeCommenter { } else if (parent instanceof ICPPASTBaseSpecifier) { parent = (ASTNode) parent.getParent(); } - return !(OffsetHelper.getNodeOffset(com) >= OffsetHelper.getNodeEndPoint(parent)); + return getNodeOffset(com) < getNodeEndPoint(parent); } - private boolean mustBeAddToSubnodes(ASTNode node) { + private boolean mustBeAddedToSubnodes(ASTNode node) { return hasNodeSameEndingAsSubnode(node); } @@ -274,4 +248,25 @@ public class NodeCommenter { } return !node.getFileLocation().getFileName().equals(comment.getFileLocation().getFileName()); } + + private static int getNodeEndOffset(IASTNode node) { + IASTFileLocation fileLocation = node.getFileLocation(); + return fileLocation.getNodeOffset() + fileLocation.getNodeLength(); + } + + private static int getNodeOffset(ASTNode node) { + return node.getOffset(); + } + + private static int getNodeEndPoint(ASTNode node) { + return node.getOffset() + node.getLength(); + } + + private static int getStartingLineNumber(IASTNode node) { + return node.getFileLocation().getStartingLineNumber(); + } + + private static int getEndingLineNumber(IASTNode node) { + return node.getFileLocation().getEndingLineNumber(); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/util/FileContentHelper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/util/FileContentHelper.java deleted file mode 100644 index 8fc40a49d76..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/util/FileContentHelper.java +++ /dev/null @@ -1,94 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008, 2011 Institute for Software, HSR Hochschule fuer Technik - * Rapperswil, University of applied sciences and others - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Institute for Software - initial API and implementation - ******************************************************************************/ -package org.eclipse.cdt.internal.core.dom.rewrite.util; - -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; - -import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.CoreException; - -/** - * @author Emanuel Graf IFS - */ -public class FileContentHelper { - private static final int BUFFER_SIZE = 2048; - - public static String getContent(IFile file, int start) throws CoreException, IOException { - InputStreamReader reader = getReaderForFile(file); - skip(start, reader); - - final String rest = readRest(reader); - reader.close(); - return rest; - } - - public static String getContent(IFile file, int start, int length) { - try { - InputStreamReader r = getReaderForFile(file); - char[] chars = new char[length]; - - skip(start, r); - - read(length, r, chars); - r.close(); - return new String(chars); - } catch (IOException e) { - CCorePlugin.log(e); - } catch (CoreException e) { - CCorePlugin.log(e); - } - return ""; //$NON-NLS-1$ - } - - private static InputStreamReader getReaderForFile(IFile file) - throws CoreException, UnsupportedEncodingException { - InputStream contents = file.getContents(); - return new InputStreamReader(contents, file.getCharset()); - } - - private static String readRest(InputStreamReader reader) throws IOException { - StringBuilder content = new StringBuilder(); - char[] buffer = new char[BUFFER_SIZE]; - int bytesRead = 0; - while ((bytesRead = reader.read(buffer)) >= 0) { - content.append(buffer, 0, bytesRead); - } - - return content.toString(); - } - - private static void read(int length, InputStreamReader r, char[] bytes) throws IOException { - int bufferOffset = 0; - int charactersRead = 0; - while (charactersRead >= 0 && length > 0) { - charactersRead = r.read(bytes, bufferOffset, length); - if (charactersRead > 0) { - bufferOffset += charactersRead; - length -= charactersRead; - } - } - } - - private static void skip(int start, InputStreamReader r) throws IOException { - long skipped = 0; - while (skipped >= 0 && start > 0 && r.ready()) { - skipped = r.skip(start); - if (skipped > 0) { - start -= skipped; - } - } - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/util/FileHelper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/util/FileHelper.java index fe37d7df6f2..e7749b160c5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/util/FileHelper.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/util/FileHelper.java @@ -11,21 +11,12 @@ *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.rewrite.util; -import java.io.IOException; - -import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.internal.core.resources.ResourceLookup; import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.resources.ProjectScope; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; -import org.eclipse.core.runtime.preferences.IScopeContext; -import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.text.TextUtilities; public class FileHelper { @@ -36,36 +27,13 @@ public class FileHelper { return ResourceLookup.selectFileForLocation(implPath, null); } - public static boolean isFirstWithinSecondLocation(IASTFileLocation loc1, IASTFileLocation loc2) { - boolean isEquals = true; - - isEquals &= loc1.getFileName().equals(loc2.getFileName()); - isEquals &= loc1.getNodeOffset() >= loc2.getNodeOffset(); - isEquals &= loc1.getNodeOffset() + loc1.getNodeLength() <= loc2.getNodeOffset() - + loc2.getNodeLength(); - - return isEquals; - } - - public static String determineLineDelimiter(IFile file) { - String fileContent = ""; //$NON-NLS-1$ - - try { - fileContent = FileContentHelper.getContent(file, 0); - } catch (CoreException e) { - } catch (IOException e) { - } - - IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(); - IScopeContext[] scopeContext; - if (project != null) { - scopeContext = new IScopeContext[] { new ProjectScope(project) }; - } else { - scopeContext = new IScopeContext[] { InstanceScope.INSTANCE }; - } + public static String determineLineDelimiter(String text) { String platformDefaultLineDelimiter = System.getProperty("line.separator", DEFAULT_LINE_DELIMITTER); //$NON-NLS-1$ String defaultLineDelimiter = Platform.getPreferencesService().getString(Platform.PI_RUNTIME, - Platform.PREF_LINE_SEPARATOR, platformDefaultLineDelimiter, scopeContext); - return TextUtilities.determineLineDelimiter(fileContent.toString(), defaultLineDelimiter); + Platform.PREF_LINE_SEPARATOR, platformDefaultLineDelimiter, null); + if (text.isEmpty()) { + return defaultLineDelimiter; + } + return TextUtilities.determineLineDelimiter(text, defaultLineDelimiter); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/util/OffsetHelper.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/util/OffsetHelper.java deleted file mode 100644 index fca0030ba54..00000000000 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/rewrite/util/OffsetHelper.java +++ /dev/null @@ -1,95 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik - * Rapperswil, University of applied sciences and others - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Institute for Software - initial API and implementation - ******************************************************************************/ -package org.eclipse.cdt.internal.core.dom.rewrite.util; - -import org.eclipse.cdt.core.dom.ast.IASTFileLocation; -import org.eclipse.cdt.core.dom.ast.IASTMacroExpansionLocation; -import org.eclipse.cdt.core.dom.ast.IASTNode; -import org.eclipse.cdt.core.dom.ast.IASTNodeLocation; -import org.eclipse.cdt.internal.core.dom.parser.ASTNode; - -/** - * @author Emanuel Graf IFS - */ -public class OffsetHelper { - - public static int getOffsetIncludingComment(IASTNode node) { - int nodeStart = Integer.MAX_VALUE; - IASTNodeLocation[] nodeLocations = node.getNodeLocations(); - if (nodeLocations.length != 1) { - int offset; - for (IASTNodeLocation location : nodeLocations) { - if (location instanceof IASTMacroExpansionLocation) { - IASTMacroExpansionLocation macroLoc = (IASTMacroExpansionLocation) location; - offset = macroLoc.asFileLocation().getNodeOffset(); - } else { - offset = location.asFileLocation().getNodeOffset(); - } - if (offset < nodeStart) - nodeStart = offset; - } - } else { - nodeStart = node.getFileLocation().getNodeOffset(); - } - - return nodeStart; - } - - public static int getEndOffsetIncludingComments(IASTNode node) { - int fileOffset = 0; - int length = 0; - - IASTNodeLocation[] nodeLocations = node.getNodeLocations(); - if (nodeLocations.length != 1) { - for (IASTNodeLocation location : nodeLocations) { - if (location instanceof IASTMacroExpansionLocation) { - IASTMacroExpansionLocation macroLoc = (IASTMacroExpansionLocation) location; - fileOffset = macroLoc.asFileLocation().getNodeOffset(); - length = macroLoc.asFileLocation().getNodeLength(); - } else { - fileOffset = location.asFileLocation().getNodeOffset(); - length = location.asFileLocation().getNodeLength(); - } - } - } else { - IASTFileLocation loc = node.getFileLocation(); - fileOffset = loc.getNodeOffset(); - length = loc.getNodeLength(); - } - return fileOffset + length; - - } - - public static int getEndOffsetWithoutComments(IASTNode node) { - return node.getFileLocation().getNodeOffset() + node.getFileLocation().getNodeLength(); - } - - public static int getLengthIncludingComment(IASTNode node) { - return getEndOffsetIncludingComments(node) - getOffsetIncludingComment(node); - } - - public static int getNodeOffset(ASTNode node) { - return node.getOffset(); - } - - public static int getNodeEndPoint(ASTNode node) { - return node.getOffset() + node.getLength(); - } - - public static int getStartingLineNumber(IASTNode node) { - return node.getFileLocation().getStartingLineNumber(); - } - - public static int getEndingLineNumber(IASTNode node) { - return node.getFileLocation().getEndingLineNumber(); - } -} diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LocationMap.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LocationMap.java index 1e849f2b4f5..0e6fab5dcb3 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LocationMap.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/LocationMap.java @@ -68,6 +68,7 @@ public class LocationMap implements ILocationResolver { fLexerOptions= lexOptions; } + @Override public LexerOptions getLexerOptions() { return fLexerOptions; } @@ -382,6 +383,7 @@ public class LocationMap implements ILocationResolver { addMacroReference(undef.getMacroName()); } + @Override public void setRootNode(IASTTranslationUnit root) { fTranslationUnit= root; if (fTranslationUnit instanceof ISkippedIndexedFilesListener) { @@ -389,6 +391,7 @@ public class LocationMap implements ILocationResolver { } } + @Override public String getTranslationUnitPath() { return fTranslationUnitPath; } @@ -418,11 +421,13 @@ public class LocationMap implements ILocationResolver { return fCurrentContext.getSequenceNumberForOffset(offset, offset < fLastChildInsertionOffset); } + @Override public String getContainingFilePath(int sequenceNumber) { LocationCtx ctx= fRootContext.findSurroundingContext(sequenceNumber, 1); return new String(ctx.getFilePath()); } + @Override public boolean isPartOfSourceFile(int sequenceNumber) { LocationCtx ctx= fRootContext.findSurroundingContext(sequenceNumber, 1); if (ctx == fRootContext && fTranslationUnit != null) @@ -431,14 +436,17 @@ public class LocationMap implements ILocationResolver { return ctx.isSourceFile(); } + @Override public ASTFileLocation getMappedFileLocation(int sequenceNumber, int length) { return fRootContext.findMappedFileLocation(sequenceNumber, length); } - public int convertToSequenceEndNumber(int sequenceNumber) { + @Override + public int convertToSequenceEndNumber(int sequenceNumber) { return fRootContext.convertToSequenceEndNumber(sequenceNumber); } + @Override public char[] getUnpreprocessedSignature(IASTFileLocation loc) { ASTFileLocation floc= convertFileLocation(loc); if (floc == null) { @@ -447,6 +455,7 @@ public class LocationMap implements ILocationResolver { return floc.getSource(); } + @Override public IASTPreprocessorMacroExpansion[] getMacroExpansions(IASTFileLocation loc) { ASTFileLocation floc= convertFileLocation(loc); if (floc == null) { @@ -485,17 +494,19 @@ public class LocationMap implements ILocationResolver { return getMappedFileLocation(sequenceNumber, length); } + @Override public IASTNodeLocation[] getLocations(int sequenceNumber, int length) { ArrayList result= new ArrayList(); fRootContext.collectLocations(sequenceNumber, length, result); return result.toArray(new IASTNodeLocation[result.size()]); } - - + + @Override public boolean isPartOfTranslationUnitFile(int sequenceNumber) { return fRootContext.isThisFile(sequenceNumber); } + @Override public IASTImageLocation getImageLocation(int sequenceNumber, int length) { ArrayList result= new ArrayList(); fRootContext.collectLocations(sequenceNumber, length, result); @@ -515,6 +526,7 @@ public class LocationMap implements ILocationResolver { return null; } + @Override public void findPreprocessorNode(ASTNodeSpecification nodeSpec) { final int sequenceStart= nodeSpec.getSequenceStart(); final int sequenceEnd= nodeSpec.getSequenceEnd(); @@ -600,6 +612,7 @@ public class LocationMap implements ILocationResolver { return lower; } + @Override public int getSequenceNumberForFileOffset(String filePath, int fileOffset) { LocationCtx ctx= fRootContext; if (filePath != null) { @@ -624,6 +637,7 @@ public class LocationMap implements ILocationResolver { return -1; } + @Override public IASTFileLocation flattenLocations(IASTNodeLocation[] locations) { if (locations.length == 0) { return null; @@ -643,7 +657,7 @@ public class LocationMap implements ILocationResolver { return null; } - + @Override public IASTPreprocessorMacroDefinition[] getMacroDefinitions() { ArrayList result= new ArrayList(); for (Iterator iterator = fDirectives.iterator(); iterator.hasNext();) { @@ -655,7 +669,8 @@ public class LocationMap implements ILocationResolver { return result.toArray(new IASTPreprocessorMacroDefinition[result.size()]); } - public IASTPreprocessorIncludeStatement[] getIncludeDirectives() { + @Override + public IASTPreprocessorIncludeStatement[] getIncludeDirectives() { ArrayList result= new ArrayList(); for (Iterator iterator = fDirectives.iterator(); iterator.hasNext();) { Object directive= iterator.next(); @@ -666,26 +681,32 @@ public class LocationMap implements ILocationResolver { return result.toArray(new IASTPreprocessorIncludeStatement[result.size()]); } + @Override public IASTComment[] getComments() { return fComments.toArray(new IASTComment[fComments.size()]); } - public IASTPreprocessorStatement[] getAllPreprocessorStatements() { + @Override + public IASTPreprocessorStatement[] getAllPreprocessorStatements() { return fDirectives.toArray(new IASTPreprocessorStatement[fDirectives.size()]); } - public IASTPreprocessorMacroDefinition[] getBuiltinMacroDefinitions() { + @Override + public IASTPreprocessorMacroDefinition[] getBuiltinMacroDefinitions() { return fBuiltinMacros.toArray(new IASTPreprocessorMacroDefinition[fBuiltinMacros.size()]); } + @Override public IASTProblem[] getScannerProblems() { return fProblems.toArray(new IASTProblem[fProblems.size()]); } + @Override public int getScannerProblemsCount() { return fProblems.size(); } + @Override public IASTName[] getDeclarations(IMacroBinding binding) { IASTPreprocessorMacroDefinition def = getMacroDefinition(binding); return def == null ? IASTName.EMPTY_NAME_ARRAY: new IASTName[] { def.getName() }; @@ -712,6 +733,7 @@ public class LocationMap implements ILocationResolver { return fMacroDefinitionMap.get(binding); } + @Override public IASTName[] getReferences(IMacroBinding binding) { List result= new ArrayList(); for (IASTName name : fMacroReferences) { @@ -737,6 +759,7 @@ public class LocationMap implements ILocationResolver { return result.toArray(new ASTPreprocessorName[result.size()]); } + @Override public IDependencyTree getDependencyTree() { return new DependencyTree(fRootContext); } diff --git a/core/org.eclipse.cdt.core/plugin.xml b/core/org.eclipse.cdt.core/plugin.xml index 95349032069..9dbdb0cbde7 100644 --- a/core/org.eclipse.cdt.core/plugin.xml +++ b/core/org.eclipse.cdt.core/plugin.xml @@ -525,26 +525,41 @@ - + + file-names="algorithm,array,atomic,bitset,cassert,ccomplex,cctype,cerrno,cfenv,cfloat,chrono,cinttypes"/> + file-names="ciso646,climits,clocale,cmath,codecvt,complex,csetjmp,csignal,cstdarg,cstdbool,cstddef"/> + file-names="cstdint,cstdio,cstdlib,cstring,ctime,cwchar,cwctype,deque,exception,forward_list,fstream"/> + file-names="functional,future,hash_map,hash_set,initializer_list,iomanip,ios,iosfwd,iostream,istream"/> + + + + + + + + + diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ToolFactory.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ToolFactory.java index 40575273b00..04e26c65036 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ToolFactory.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/ToolFactory.java @@ -9,7 +9,6 @@ * QNX Software Systems - Initial API and implementation * Anton Leherbauer (Wind River Systems) *******************************************************************************/ - package org.eclipse.cdt.core; import java.util.Map; @@ -49,19 +48,19 @@ public class ToolFactory { IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(CCorePlugin.PLUGIN_ID, extID); if (extension != null) { IExtension[] extensions = extension.getExtensions(); - for(int i = 0; i < extensions.length; i++){ + for (int i = 0; i < extensions.length; i++){ IConfigurationElement [] configElements = extensions[i].getConfigurationElements(); - for(int j = 0; j < configElements.length; j++){ + for (int j = 0; j < configElements.length; j++){ String initializerID = configElements[j].getAttribute("id"); //$NON-NLS-1$ if (initializerID != null && initializerID.equals(formatterID)){ try { Object execExt = configElements[j].createExecutableExtension("class"); //$NON-NLS-1$ if (execExt instanceof CodeFormatter){ - CodeFormatter formatter = (CodeFormatter)execExt; + CodeFormatter formatter = (CodeFormatter) execExt; formatter.setOptions(options); return formatter; } - } catch(CoreException e) { + } catch (CoreException e) { CCorePlugin.log(e.getStatus()); break; } diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java index eaa5781b257..711786b3bb1 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/core/formatter/DefaultCodeFormatterConstants.java @@ -530,6 +530,7 @@ public class DefaultCodeFormatterConstants { * @since 5.3 */ public final static String FORMATTER_COMMENT_MIN_DISTANCE_BETWEEN_CODE_AND_LINE_COMMENT = CCorePlugin.PLUGIN_ID + ".formatter.comment.min_distance_between_code_and_line_comment"; //$NON-NLS-1$ + /** *
 	 * FORMATTER / Option to control whether the white space between code and line comments should be preserved or replaced with a single space
@@ -541,9 +542,21 @@ public class DefaultCodeFormatterConstants {
 	 * @see #FALSE
 	 * @since 5.3
 	 */
-
 	public final static String FORMATTER_COMMENT_PRESERVE_WHITE_SPACE_BETWEEN_CODE_AND_LINE_COMMENT = CCorePlugin.PLUGIN_ID + ".formatter.comment.preserve_white_space_between_code_and_line_comments"; //$NON-NLS-1$
 
+	/**
+	 * 
+	 * FORMATTER / Option to control whether comments starting from the beginning of line should stay that way and never be indented. 
+	 *     - option id:         "org.eclipse.cdt.core.formatter.comment.never_indent_line_comments_on_first_column"
+	 *     - possible values:   { TRUE, FALSE }
+	 *     - default:           TRUE
+	 * 
+ * @see #TRUE + * @see #FALSE + * @since 5.4 + */ + public final static String FORMATTER_COMMENT_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN = CCorePlugin.PLUGIN_ID + ".formatter.comment.never_indent_line_comments_on_first_column"; //$NON-NLS-1$ + /** *
 	 * FORMATTER / Option to compact else/if
diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/DefaultCodeFormatterOptions.java b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/DefaultCodeFormatterOptions.java
index 7d5c4b76a0b..dc1e040c11e 100644
--- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/DefaultCodeFormatterOptions.java
+++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/formatter/DefaultCodeFormatterOptions.java
@@ -100,7 +100,7 @@ public class DefaultCodeFormatterOptions {
 //	public int comment_line_length;
 	public int comment_min_distance_between_code_and_line_comment;
 	public boolean comment_preserve_white_space_between_code_and_line_comment;
-	public boolean never_indent_line_comments_on_first_column = true;
+	public boolean never_indent_line_comments_on_first_column;
 	
 	public int continuation_indentation;
 	public int continuation_indentation_for_initializer_list;
@@ -314,6 +314,7 @@ public class DefaultCodeFormatterOptions {
 //		options.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_LINE_LENGTH, Integer.toString(this.comment_line_length));
 		options.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_MIN_DISTANCE_BETWEEN_CODE_AND_LINE_COMMENT, Integer.toString(this.comment_min_distance_between_code_and_line_comment));
 		options.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_PRESERVE_WHITE_SPACE_BETWEEN_CODE_AND_LINE_COMMENT, this.comment_preserve_white_space_between_code_and_line_comment ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
+		options.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN, this.never_indent_line_comments_on_first_column ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
 		options.put(DefaultCodeFormatterConstants.FORMATTER_CONTINUATION_INDENTATION, Integer.toString(this.continuation_indentation));
 		options.put(DefaultCodeFormatterConstants.FORMATTER_CONTINUATION_INDENTATION_FOR_INITIALIZER_LIST, Integer.toString(this.continuation_indentation_for_initializer_list));
 		options.put(DefaultCodeFormatterConstants.FORMATTER_INDENT_STATEMENTS_COMPARE_TO_BLOCK, this.indent_statements_compare_to_block ? DefaultCodeFormatterConstants.TRUE : DefaultCodeFormatterConstants.FALSE);
@@ -847,6 +848,10 @@ public class DefaultCodeFormatterOptions {
 		if (commentPreserveWhiteSpaceBetweenCodeAndLineCommentOption != null) {
 			this.comment_preserve_white_space_between_code_and_line_comment = DefaultCodeFormatterConstants.TRUE.equals(commentPreserveWhiteSpaceBetweenCodeAndLineCommentOption);
 		}
+		final Object neverIndentLineCommentsOnFirstColumn = settings.get(DefaultCodeFormatterConstants.FORMATTER_COMMENT_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN);
+		if (neverIndentLineCommentsOnFirstColumn != null) {
+			this.never_indent_line_comments_on_first_column = DefaultCodeFormatterConstants.TRUE.equals(neverIndentLineCommentsOnFirstColumn);
+		}
 		final Object continuationIndentationOption = settings.get(DefaultCodeFormatterConstants.FORMATTER_CONTINUATION_INDENTATION);
 		if (continuationIndentationOption != null) {
 			try {
@@ -1525,7 +1530,8 @@ public class DefaultCodeFormatterOptions {
 		this.brace_position_for_switch = DefaultCodeFormatterConstants.END_OF_LINE;
 		this.brace_position_for_type_declaration = DefaultCodeFormatterConstants.END_OF_LINE;
 		this.comment_min_distance_between_code_and_line_comment = 1;
-		this.comment_preserve_white_space_between_code_and_line_comment = false;
+		this.comment_preserve_white_space_between_code_and_line_comment = true;
+		this.never_indent_line_comments_on_first_column = true;
 //		this.comment_clear_blank_lines = false;
 //		this.comment_format = true;
 //		this.comment_format_header = false;
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractConstant.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractConstant.rts
index 52391193643..a402270781e 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractConstant.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractConstant.rts
@@ -13,8 +13,6 @@ public:
 };
 
 #endif /*A_H_*/
-
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -25,12 +23,11 @@ public:
 	virtual ~A();
 	int foo();
 	void bar();
+
 	static const int theAnswer = 42;
 };
 
 #endif /*A_H_*/
-
-
 //@A.cpp
 #include "A.h"
 
@@ -48,7 +45,6 @@ void A::bar() {
 	int a = 42;
 	int b = 42;
 }
-
 //=
 #include "A.h"
 
@@ -66,7 +62,6 @@ void A::bar() {
 	int a = theAnswer;
 	int b = theAnswer;
 }
-
 //!ExtractConstantInt 2
 //#org.eclipse.cdt.ui.tests.refactoring.extractconstant.ExtractConstantRefactoringTest
 //@A.h
@@ -82,8 +77,6 @@ public:
 };
 
 #endif /*A_H_*/
-
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -94,12 +87,11 @@ public:
 	virtual ~A();
 	int foo();
 	void bar();
+
 	static const int theAnswer = 42;
 };
 
 #endif /*A_H_*/
-
-
 //@A.cpp
 #include "A.h"
 
@@ -118,7 +110,6 @@ void A::bar() {
 	int a = 42;
 	int b = 42;
 }
-
 //=
 #include "A.h"
 
@@ -137,7 +128,6 @@ void A::bar() {
 	int a = theAnswer;
 	int b = theAnswer;
 }
-
 //!ExtractConstantFloat
 //#org.eclipse.cdt.ui.tests.refactoring.extractconstant.ExtractConstantRefactoringTest
 //@A.h
@@ -153,8 +143,6 @@ public:
 };
 
 #endif /*A_H_*/
-
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -165,12 +153,11 @@ public:
 	virtual ~A();
 	float foo();
 	void bar();
+
 	static const float theAnswer = 42.0f;
 };
 
 #endif /*A_H_*/
-
-
 //@A.cpp
 #include "A.h"
 
@@ -188,7 +175,6 @@ void A::bar() {
 	float a = 42.0f;
 	float b = 42.0f;
 }
-
 //=
 #include "A.h"
 
@@ -206,7 +192,6 @@ void A::bar() {
 	float a = theAnswer;
 	float b = theAnswer;
 }
-
 //!ExtractConstantDouble
 //#org.eclipse.cdt.ui.tests.refactoring.extractconstant.ExtractConstantRefactoringTest
 //@A.h
@@ -222,8 +207,6 @@ public:
 };
 
 #endif /*A_H_*/
-
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -234,12 +217,11 @@ public:
 	virtual ~A();
 	double foo();
 	void bar();
+
 	static const double theAnswer = 42.0;
 };
 
 #endif /*A_H_*/
-
-
 //@A.cpp
 #include "A.h"
 
@@ -257,7 +239,6 @@ void A::bar() {
 	double a = 42.0;
 	double b = 42.0;
 }
-
 //=
 #include "A.h"
 
@@ -275,7 +256,6 @@ void A::bar() {
 	double a = theAnswer;
 	double b = theAnswer;
 }
-
 //!ExtractConstantStaticInt
 //#org.eclipse.cdt.ui.tests.refactoring.extractconstant.ExtractConstantRefactoringTest
 //@A.h
@@ -291,7 +271,6 @@ public:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -305,7 +284,6 @@ public:
 };
 
 #endif /*A_H_*/
-
 //@A.cpp
 #include "A.h"
 
@@ -322,7 +300,6 @@ int A::foo() {
 int bar() {
 	return /*$*/42/*$$*/;
 }
-
 //=
 #include "A.h"
 
@@ -345,7 +322,6 @@ int A::foo() {
 int bar() {
 	return theAnswer;
 }
-
 //!replaceNumberProtected
 //#org.eclipse.cdt.ui.tests.refactoring.extractconstant.ExtractConstantRefactoringTest
 //@.config
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractConstantHistory.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractConstantHistory.rts
index 10835096456..6df4814549a 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractConstantHistory.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractConstantHistory.rts
@@ -13,7 +13,6 @@ public:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -24,11 +23,11 @@ public:
 	virtual ~A();
 	int foo();
 	void bar();
+
 	static const int theAnswer = 42;
 };
 
 #endif /*A_H_*/
-
 //@A.cpp
 #include "A.h"
 
@@ -46,7 +45,6 @@ void A::bar() {
 	int a = 42;
 	int b = 42;
 }
-
 //=
 #include "A.h"
 
@@ -64,7 +62,6 @@ void A::bar() {
 	int a = theAnswer;
 	int b = theAnswer;
 }
-
 //@refScript.xml
 
 
@@ -89,7 +86,6 @@ public:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -105,7 +101,6 @@ protected:
 };
 
 #endif /*A_H_*/
-
 //@A.cpp
 #include "A.h"
 
@@ -118,7 +113,6 @@ A::~A() {
 int A::foo() {
 	return 42;
 }
-
 //=
 #include "A.h"
 
@@ -131,7 +125,6 @@ A::~A() {
 int A::foo() {
 	return theAnswer;
 }
-
 //@refScript.xml
 
 
@@ -155,7 +148,6 @@ public:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -171,7 +163,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //@A.cpp
 #include "A.h"
 
@@ -184,7 +175,6 @@ A::~A() {
 int A::foo() {
 	return 42;
 }
-
 //=
 #include "A.h"
 
@@ -197,7 +187,6 @@ A::~A() {
 int A::foo() {
 	return theAnswer;
 }
-
 //@refScript.xml
 
 
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractExpression.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractExpression.rts
index 2381a7d7510..283b5f3c248 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractExpression.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractExpression.rts
@@ -296,7 +296,7 @@ class Klass {
 	void set(bool b) {
 	}
 
-	void test()	{
+	void test() {
 		other o;
 		this->set(/*$*/o.value()/*$$*/);
 	}
@@ -615,185 +615,30 @@ void Test::test() {
 	bool b = invalid();
 }
 
-//!Extract int constant
+//!Extract expression with typedef Bug 331985
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
-
-//@.config
-filename=test.cpp
-methodname=size
-
-//@test.h
-class Test {
-  void test();
-};
-
-
-//=
-class Test {
-  void test();
-	int size();
-};
-
-
-//@test.cpp
-#include "test.h"
-
-void Test::test() {
-	int i = /*$*/42/*$$*/;
-}
-
-//=
-#include "test.h"
-
-int Test::size() {
-	return 42;
-}
-
-void Test::test() {
-	int i = size();
-}
-
-//!Extract char constant
-//#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
-
-//@.config
-filename=test.cpp
-methodname=newline
-
-//@test.h
-class Test {
-  void test();
-};
-
-
-//=
-class Test {
-  void test();
-	char newline();
-};
-
-
-//@test.cpp
-#include "test.h"
-
-void Test::test() {
-	char nl = /*$*/'\n'/*$$*/;
-}
-
-//=
-#include "test.h"
-
-char Test::newline() {
-	return '\n';
-}
-
-void Test::test() {
-	char nl = newline();
-}
-
-//!Extract boolean true constant
-//#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
-
-//@.config
-filename=test.cpp
-methodname=valid
-
-//@test.h
-class Test {
-  void test();
-};
-
-
-//=
-class Test {
-  void test();
-	bool valid();
-};
-
-
-//@test.cpp
-#include "test.h"
-
-void Test::test() {
-	bool b = /*$*/true/*$$*/;
-}
-
-//=
-#include "test.h"
-
-bool Test::valid() {
-	return true;
-}
-
-void Test::test() {
-	bool b = valid();
-}
-
-//!Extract boolean false constant
-//#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
-
-//@.config
-filename=test.cpp
-methodname=invalid
-
-//@test.h
-class Test {
-  void test();
-};
-
-
-//=
-class Test {
-  void test();
-	bool invalid();
-};
-
-
-//@test.cpp
-#include "test.h"
-
-void Test::test() {
-	bool b = /*$*/false/*$$*/;
-}
-
-//=
-#include "test.h"
-
-bool Test::invalid() {
-	return false;
-}
-
-void Test::test() {
-	bool b = invalid();
-}
-
-//!Extract expresion with typdef Bug 331985
-//#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
-
 //@.config
 filename=test.cpp
 methodname=bar
 
 //@test.cpp
 typedef int& foo;
+
 int test(foo s) {
-   int a = /*$*/s + 1/*$$*/;  // type of id-expression 's' is int, not 'foo' or 'int&'
-   return a;
+	int a = /*$*/s + 1/*$$*/;  // type of id-expression 's' is int, not 'foo' or 'int&'
+	return a;
 }
-
-
 //=
 typedef int& foo;
+
 int bar(foo s) {
 	return s + 1;
 }
 
 int test(foo s) {
-   int a = bar(s);  // type of id-expression 's' is int, not 'foo' or 'int&'
-   return a;
+	int a = bar(s);  // type of id-expression 's' is int, not 'foo' or 'int&'
+	return a;
 }
-
-
 //!Bug 260133 Extract function and extract local variable don't handle type promotion
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 
@@ -802,14 +647,11 @@ filename=test.cpp
 methodname=bar
 
 //@test.cpp
-
 void foo() {
 	int x = 3;
 	double y = /*$*/x + 2.5/*$$*/;
 }
-
 //=
-
 double bar(int x) {
 	return x + 2.5;
 }
@@ -818,7 +660,6 @@ void foo() {
 	int x = 3;
 	double y = bar(x);
 }
-
 //! Extract macro
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 
@@ -836,7 +677,6 @@ int main() {
 
 	return i;
 }
-
 //=
 #define five 5
 #define ADD(a, b) a + b
@@ -851,37 +691,3 @@ int main() {
 
 	return i;
 }
-
-//! Extract macro
-//#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
-
-//@.config
-filename=test.cpp
-methodname=bar
-
-//@test.cpp
-#define five 5
-#define ADD(a, b) a + b
-
-int main() {
-	int i = five; //comment3
-	i = /*$*/ADD(i, five)/*$$*/;
-
-	return i;
-}
-
-//=
-#define five 5
-#define ADD(a, b) a + b
-
-int bar(int& i) {
-	return ADD(i, five);
-}
-
-int main() {
-	int i = five; //comment3
-	i = bar(i);
-
-	return i;
-}
-
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractFunctionTemplates.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractFunctionTemplates.rts
index 271a5091f27..b84828e254d 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractFunctionTemplates.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractFunctionTemplates.rts
@@ -4,16 +4,15 @@
 void test() {
 }
 
-template 
+template
 int tempFunct() {
 	T i;
 	i = 0;
 	/*$*/i++;
 	i += 3;/*$$*/
-	
+
 	return 0;
 }
-
 //=
 void test() {
 }
@@ -24,22 +23,20 @@ void exp(T i) {
 	i += 3;
 }
 
-template 
+template
 int tempFunct() {
 	T i;
 	i = 0;
 	exp(i);
-	
 	return 0;
 }
-
 //!Extract template function with template parameter Bug #12
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 //@A.cpp
 void test() {
 }
 
-template 
+template
 int tempFunct(T p) {
 	/*$*/++p;
 	p + 4;/*$$*/
@@ -56,7 +53,7 @@ void exp(T p) {
 	p + 4;
 }
 
-template 
+template
 int tempFunct(T p) {
 	exp(p);
 	return 0;
@@ -68,7 +65,7 @@ int tempFunct(T p) {
 void test() {
 }
 
-template 
+template
 int tempFunct() {
 	/*$*/T p;
 	p = 0;
@@ -76,7 +73,6 @@ int tempFunct() {
 	p + 2;
 	return 0;
 }
-
 //=
 void test() {
 }
@@ -89,10 +85,9 @@ T exp() {
 	return p;
 }
 
-template 
+template
 int tempFunct() {
 	T p = exp();
 	p + 2;
 	return 0;
 }
-
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethod.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethod.rts
index c30d66c2640..06ad3de23a0 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethod.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethod.rts
@@ -15,7 +15,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -32,7 +31,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //@A.cpp
 #include "A.h"
 
@@ -52,7 +50,6 @@ int A::foo() {
 int A::help() {
 	return 42;
 }
-
 //=
 #include "A.h"
 
@@ -77,7 +74,6 @@ int A::foo() {
 int A::help() {
 	return 42;
 }
-
 //!ExtractFunctionRefactoringTest with comment
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 //@A.h
@@ -95,7 +91,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -112,7 +107,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //@A.cpp
 #include "A.h"
 
@@ -133,7 +127,6 @@ int A::foo() {
 int A::help() {
 	return 42;
 }
-
 //=
 #include "A.h"
 
@@ -159,7 +152,6 @@ int A::foo() {
 int A::help() {
 	return 42;
 }
-
 //@.config
 filename=A.cpp
 methodname=exp
@@ -213,7 +205,7 @@ void exp(int& i) {
 
 int main() {
 	int i;
-	exp(i); // Comment
+	exp(i);
 	return i;
 }
 
@@ -1739,7 +1731,6 @@ returnparameterindex=0
 filename=main.h
 methodname=loop
 //@main.h
-
 void method() {
 	/*$*/for (int var = 0; var < 100; ++var) {
 		if (var < 50)
@@ -1747,7 +1738,6 @@ void method() {
 	}/*$$*/
 }
 //=
-
 void loop() {
 	for (int var = 0; var < 100; ++var) {
 		if (var < 50)
@@ -1764,7 +1754,6 @@ void method() {
 filename=main.h
 fatalerror=true
 //@main.h
-
 void method() {
 	/*$*/if (true)
 		return;/*$$*/
@@ -1776,14 +1765,12 @@ void method() {
 fatalerror=true
 filename=A.h
 //@A.h
-
 void function() {
 	for (int var = 0; var < 100; ++var) {
 		/*$*/if (var < 50)
 			continue;/*$$*/
 	}
 }
-
 //! Bug #124 Extract Function with a Macro call in selected code "forgets" the macro
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 //@.config
@@ -2220,7 +2207,6 @@ test::string toXML() {
 int main() {
 	return 0;
 }
-
 //=
 #include "testString.h"
 
@@ -2237,111 +2223,6 @@ test::string toXML() {
 int main() {
 	return 0;
 }
-
-//!Bug 248622: Extract function fails to extract several expressions; Selection at the end
-//#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
-//@.config
-filename=Test.cpp
-methodname=endTag
-//@testString.h
-
-namespace test {
-
-class string {
-public:
-	friend string operator+(const string& lhs, const string& rhs) {
-		return rhs;
-	}
-
-	string operator+(const string& rhs) { return rhs; }
-	string(char* cp) {}
-	string() {};
-};
-
-}
-
-//@Test.cpp
-#include "testString.h"
-
-test::string toXML() {
-	test::string name;
-	name = "hello";
-	return "<" + name + ">" + /*$*/""/*$$*/;
-}
-
-int main() {
-	return 0;
-}
-
-//=
-#include "testString.h"
-
-const char endTag(test::string name) {
-	return "";
-}
-
-test::string toXML() {
-	test::string name;
-	name = "hello";
-	return "<" + name + ">" + endTag(name);
-}
-
-int main() {
-	return 0;
-}
-
-//!Bug 248622: Extract function fails to extract several expressions; Selection in the middle
-//#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
-//@.config
-filename=Test.cpp
-methodname=exp
-//@testString.h
-
-namespace test {
-
-class string {
-public:
-	friend string operator+(const string& lhs, const string& rhs) {
-		return rhs;
-	}
-
-	string operator+(const string& rhs) { return rhs; }
-	string(char* cp) {}
-	string() {};
-};
-
-}
-
-//@Test.cpp
-#include "testString.h"
-
-test::string toXML() {
-	test::string name;
-	name = "hello";
-	return "<" + name + /*$*/">" + "";
-}
-
-int main() {
-	return 0;
-}
-
-//=
-#include "testString.h"
-
-const char exp() {
-	return ">" + "";
-}
-
-int main() {
-	return 0;
-}
-
 //!Bug#262000 refactoring "extract function" misinterprets artificial blocks
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 //@.config
@@ -2354,7 +2235,6 @@ int main(int argc, char** argv) {
 		a++;
 	}/*$$*/
 }
-
 //=
 void exp() {
 	int a = 0;
@@ -2366,7 +2246,6 @@ void exp() {
 int main(int argc, char** argv) {
 	exp();
 }
-
 //!Bug#264712 Refactor extract function deletes comments in header
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 //@.config
@@ -2411,7 +2290,6 @@ class Test {
 };
 
 #endif
-
 //=
 /*
  * Copyright 2009
@@ -2438,11 +2316,11 @@ class Test {
 	 * Retain a value for something.
 	 */
 	int m_value;
+
 	int exp();
 };
 
 #endif
-
 //@test.cpp
 #include "test.h"
 
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethodDuplicates.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethodDuplicates.rts
index 438d6b780b6..3967ebcda7a 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethodDuplicates.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethodDuplicates.rts
@@ -170,7 +170,7 @@ int A::help() {
 	return 42;
 }
 
-//!ExtractFunctionRefactoringTest dublicate with field
+//!ExtractFunctionRefactoringTest duplicate with field
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 //@.config
 replaceduplicates=true
@@ -267,7 +267,7 @@ int A::help() {
 	return 42;
 }
 
-//!ExtractFunctionRefactoringTest dublicate with field in marked scope
+//!ExtractFunctionRefactoringTest duplicate with field in marked scope
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 //@.config
 replaceduplicates=true
@@ -289,7 +289,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -308,7 +307,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //@A.cpp
 #include "A.h"
 
@@ -336,7 +334,6 @@ void A::foo() {
 int A::help() {
 	return 42;
 }
-
 //=
 #include "A.h"
 
@@ -360,6 +357,7 @@ int A::exp(int j) {
 
 void A::foo() {
 	int j = 0;
+
 	j = exp(j);
 	field++;
 	j++;
@@ -368,7 +366,6 @@ void A::foo() {
 int A::help() {
 	return 42;
 }
-
 //!ExtractFunctionRefactoringTest duplicates with different Names and return type
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 //@.config
@@ -561,7 +558,7 @@ int A::help() {
 	return 42;
 }
 
-//!ExtractFunctionRefactoringTest with duplicates name used afterwards in duplicate but not in original selection this is no dublicate
+//!ExtractFunctionRefactoringTest with duplicate name used afterwards in duplicate but not in original selection this is no duplicate
 //#org.eclipse.cdt.ui.tests.refactoring.extractfunction.ExtractFunctionRefactoringTest
 //@.config
 replaceduplicates=true
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethodHistory.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethodHistory.rts
index 34e7e832400..d10e5350ec6 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethodHistory.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ExtractMethodHistory.rts
@@ -211,7 +211,7 @@ int main() {
  name="exp" project="RegressionTestProject" selection="34,6" visibility="private"/>
 
 
-//!Extract Function History extracted statement with trailling comment
+//!Extract Function History extracted statement with trailing comment
 //#org.eclipse.cdt.ui.tests.refactoring.RefactoringHistoryTest
 //@main.cpp
 int main() {
@@ -227,7 +227,7 @@ void exp(int& i) {
 
 int main() {
 	int i;
-	exp(i); // Comment
+	exp(i);
 	return i;
 }
 
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts
index 3afa9b7a863..683aa03e439 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/GenerateGettersAndSetters.rts
@@ -1,22 +1,11 @@
 //!Generate Getters and Setters One Getter Selection
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 getters=name
-//@C.cpp
-#include "C.h"
-
-int Person::SocSecNo() {
-	return socSecNo;
-}
-
-int main(int argc, char** argv) {
-}
-
-//=
-//@C.h
-#ifndef C_H_
-#define C_H_
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -53,10 +42,10 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
+#endif /* A_H_ */
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -97,26 +86,25 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
+#endif /* A_H_ */
+//@A.cpp
+#include "A.h"
+
+int Person::SocSecNo() {
+	return socSecNo;
+}
+
+int main(int argc, char** argv) {
+}
+//=
 //!Generate Getters and Setters One Getter Selection with Namespace
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 getters=name
-//@C.cpp
-#include "C.h"
-
-int Person::SocSecNo() {
-	return socSecNo;
-}
-
-int main(int argc, char** argv) {
-}
-
-//=
-//@C.h
-#ifndef C_H_
-#define C_H_
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 namespace Personal {
 
@@ -157,11 +145,10 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
-
+#endif /* A_H_ */
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 namespace Personal {
 
@@ -206,27 +193,25 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
+#endif /* A_H_ */
+//@A.cpp
+#include "A.h"
 
+int Person::SocSecNo() {
+	return socSecNo;
+}
+
+int main(int argc, char** argv) {
+}
+//=
 //!Generate Getters and Setters One Setter Selection
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 setters=name
-//@C.cpp
-#include "C.h"
-
-int Person::SocSecNo() {
-	return socSecNo;
-}
-
-int main(int argc, char** argv) {
-}
-
-//=
-//@C.h
-#ifndef C_H_
-#define C_H_
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -264,10 +249,10 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
+#endif /* A_H_ */
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -309,15 +294,9 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
-//!Generate Getters and Setters Getter and Setter Selection
-//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
-//@.config
-filename=C.h
-setters=name
-getters=name
-//@C.cpp
-#include "C.h"
+#endif /* A_H_ */
+//@A.cpp
+#include "A.h"
 
 int Person::SocSecNo() {
 	return socSecNo;
@@ -325,11 +304,16 @@ int Person::SocSecNo() {
 
 int main(int argc, char** argv) {
 }
-
 //=
-//@C.h
-#ifndef C_H_
-#define C_H_
+//!Generate Getters and Setters Getter and Setter Selection
+//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
+//@.config
+filename=A.h
+setters=name
+getters=name
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -364,13 +348,12 @@ public:
 	}
 };
 
-
 int gooo = 1;
 
-#endif /* C_H_ */
+#endif /* A_H_ */
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -413,18 +396,11 @@ public:
 	}
 };
 
-
 int gooo = 1;
 
-#endif /* C_H_ */
-//!Generate Getters and Setters Multiple Selection
-//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
-//@.config
-filename=C.h
-getters=name,systemId
-setters=name,systemId
-//@C.cpp
-#include "C.h"
+#endif /* A_H_ */
+//@A.cpp
+#include "A.h"
 
 int Person::SocSecNo() {
 	return socSecNo;
@@ -432,11 +408,16 @@ int Person::SocSecNo() {
 
 int main(int argc, char** argv) {
 }
-
 //=
-//@C.h
-#ifndef C_H_
-#define C_H_
+//!Generate Getters and Setters Multiple Selection
+//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
+//@.config
+filename=A.h
+getters=name,systemId
+setters=name,systemId
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -465,11 +446,10 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
-
+#endif /* A_H_ */
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -514,23 +494,23 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
+#endif /* A_H_ */
+//@A.cpp
+#include "A.h"
 
+int Person::SocSecNo() {
+	return socSecNo;
+}
+
+int main(int argc, char** argv) {
+}
+//=
 //!Generate Getters and Setters Visibility order 1
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
 filename=GaS.h
 getters=i,ok
 setters=i,ok
-//@GaS.cpp
-#include "Getters.h"
-
-GaS::Getters() {
-}
-
-GaS::~Getters() {
-}
-
 //@GaS.h
 #ifndef GAS_H_
 #define GAS_H_
@@ -547,7 +527,6 @@ private:
 };
 
 #endif
-
 //=
 #ifndef GAS_H_
 #define GAS_H_
@@ -580,27 +559,33 @@ private:
 };
 
 #endif
+//@GaS.cpp
+#include "Getters.h"
 
+GaS::Getters() {
+}
+
+GaS::~Getters() {
+}
 //!Generate Getters and Setters no Methods
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 getters=id
 setters=id
-//@C.h
-#ifndef C_H_
-#define C_H_
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
 	int /*$*/id/*$$*/;
 };
 
-#endif /* C_H_ */
-
+#endif /* A_H_ */
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -616,15 +601,14 @@ public:
 	}
 };
 
-#endif /* C_H_ */
-
+#endif /* A_H_ */
 //!Generate Getters and Setters no Methods
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 getters=i
 setters=i
-//@C.h
+//@A.h
 /*
  * test.h
  */
@@ -670,9 +654,9 @@ public:
 //!Generate Getters and Setters no Fields
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 fatalerror=true
-//@C.h
+//@A.h
 /*
  * test.h
  */
@@ -687,7 +671,6 @@ class test {
 };
 
 #endif /* TEST_H_ */
-
 //=
 /*
  * test.h
@@ -703,17 +686,16 @@ class test {
 };
 
 #endif /* TEST_H_ */
-
 //!Generate Getters and Setters, Pass by Reference, Separate Definition
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 getters=name
 setters=name
 definitionSeparate=true
-//@C.h
-#ifndef C_H_
-#define C_H_
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 struct FullName {
 	const char* first;
@@ -753,10 +735,10 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
+#endif /* A_H_ */
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 struct FullName {
 	const char* first;
@@ -776,9 +758,9 @@ public:
 	const int socSecNo;
 
 	Person myFriend;
+
 	const FullName& getName() const;
 	void setName(const FullName& name);
-
 	Person(int socSecNo); // constructor
 
 	~Person(); // destructor
@@ -798,9 +780,9 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
-//@C.cpp
-#include "C.h"
+#endif /* A_H_ */
+//@A.cpp
+#include "A.h"
 
 int Person::SocSecNo() {
 	return socSecNo;
@@ -808,9 +790,8 @@ int Person::SocSecNo() {
 
 int main(int argc, char** argv) {
 }
-
 //=
-#include "C.h"
+#include "A.h"
 
 const FullName& Person::getName() const {
 	return name;
@@ -826,48 +807,15 @@ int Person::SocSecNo() {
 
 int main(int argc, char** argv) {
 }
-
 //!Generate Getters and Setters One Getter Selection with Namespace Separate Definition
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 getters=name
 definitionSeparate=true
-//@C.cpp
-#include "C.h"
-
-namespace Personal {
-
-int Person::SocSecNo() {
-	return socSecNo;
-}
-
-} // namespace Personal
-
-int main(int argc, char** argv) {
-}
-
-//=
-#include "C.h"
-
-namespace Personal {
-
-char* Person::getName() const {
-	return name;
-}
-
-int Person::SocSecNo() {
-	return socSecNo;
-}
-
-} // namespace Personal
-
-int main(int argc, char** argv) {
-}
-
-//@C.h
-#ifndef C_H_
-#define C_H_
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 namespace Personal {
 
@@ -908,11 +856,10 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
-
+#endif /* A_H_ */
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 namespace Personal {
 
@@ -954,43 +901,46 @@ public:
 
 int gooo = 1;
 
-#endif /* C_H_ */
+#endif /* A_H_ */
+//@A.cpp
+#include "A.h"
 
+namespace Personal {
+
+int Person::SocSecNo() {
+	return socSecNo;
+}
+
+} // namespace Personal
+
+int main(int argc, char** argv) {
+}
+//=
+#include "A.h"
+
+namespace Personal {
+
+char* Person::getName() const {
+	return name;
+}
+
+int Person::SocSecNo() {
+	return socSecNo;
+}
+
+} // namespace Personal
+
+int main(int argc, char** argv) {
+}
 //!Generate Getters and Setters One Setter Selection Separate Definition
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 setters=name
 definitionSeparate=true
-//@C.cpp
-#include "C.h"
-
-int Person::SocSecNo() {
-	return socSecNo;
-}
-
-int main(int argc, char** argv) {
-}
-
-
-//=
-#include "C.h"
-
-void Person::setName(char* name) {
-	this->name = name;
-}
-
-int Person::SocSecNo() {
-	return socSecNo;
-}
-
-int main(int argc, char** argv) {
-}
-
-
-//@C.h
-#ifndef C_H_
-#define C_H_
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -1025,13 +975,12 @@ public:
 	}
 };
 
-
 int gooo = 1;
 
-#endif /* C_H_ */
+#endif /* A_H_ */
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -1067,19 +1016,11 @@ public:
 	}
 };
 
-
 int gooo = 1;
 
-#endif /* C_H_ */
-//!Getter and Setter Selection Separate Definition
-//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
-//@.config
-filename=C.h
-setters=name
-getters=name
-definitionSeparate=true
-//@C.cpp
-#include "C.h"
+#endif /* A_H_ */
+//@A.cpp
+#include "A.h"
 
 int Person::SocSecNo() {
 	return socSecNo;
@@ -1087,13 +1028,8 @@ int Person::SocSecNo() {
 
 int main(int argc, char** argv) {
 }
-
 //=
-#include "C.h"
-
-char* Person::getName() const {
-	return name;
-}
+#include "A.h"
 
 void Person::setName(char* name) {
 	this->name = name;
@@ -1105,10 +1041,16 @@ int Person::SocSecNo() {
 
 int main(int argc, char** argv) {
 }
-
-//@C.h
-#ifndef C_H_
-#define C_H_
+//!Getter and Setter Selection Separate Definition
+//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
+//@.config
+filename=A.h
+setters=name
+getters=name
+definitionSeparate=true
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -1143,14 +1085,12 @@ public:
 	}
 };
 
-
 int gooo = 1;
 
-#endif /* C_H_ */
-
+#endif /* A_H_ */
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -1187,32 +1127,56 @@ public:
 	}
 };
 
-
 int gooo = 1;
 
-#endif /* C_H_ */
+#endif /* A_H_ */
+//@A.cpp
+#include "A.h"
 
+int Person::SocSecNo() {
+	return socSecNo;
+}
+
+int main(int argc, char** argv) {
+}
+//=
+#include "A.h"
+
+char* Person::getName() const {
+	return name;
+}
+
+void Person::setName(char* name) {
+	this->name = name;
+}
+
+int Person::SocSecNo() {
+	return socSecNo;
+}
+
+int main(int argc, char** argv) {
+}
 //!Generate Getters and Setters no Methods Separate Definition
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 getters=id
 setters=id
 definitionSeparate=true
-//@C.h
-#ifndef C_H_
-#define C_H_
+//@A.h
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
 	int /*$*/id/*$$*/;
 };
 
-#endif /* C_H_ */
+#endif /* A_H_ */
 
 //=
-#ifndef C_H_
-#define C_H_
+#ifndef A_H_
+#define A_H_
 
 class Person {
 private:
@@ -1232,16 +1196,16 @@ inline void Person::setId(int id) {
 }
 
 
-#endif /* C_H_ */
+#endif /* A_H_ */
 
 //!No Methods Separate Definition
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
-filename=C.h
+filename=A.h
 getters=i
 setters=i
 definitionSeparate=true
-//@C.h
+//@A.h
 /*
  * test.h
  */
@@ -1257,7 +1221,6 @@ class test {
 };
 
 #endif /* TEST_H_ */
-
 //=
 /*
  * test.h
@@ -1287,7 +1250,6 @@ inline void test::setI(int i) {
 
 
 #endif /* TEST_H_ */
-
 //!Bug 323780 "Generate Getters and Setters..." crashes
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
@@ -1337,7 +1299,6 @@ void Test::foo() {
 }
 
 }
-
 //=
 #include "Test.h"
 
@@ -1355,7 +1316,6 @@ void Test::foo() {
 }
 
 }
-
 //!Bug 337040 - Insert definition in empty implementation file (.cxx)
 //#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
 //@.config
@@ -1445,3 +1405,49 @@ void Test::setTestField(int testField) {
 //@component_a/implementation/Test.cpp
 
 //=
+
+//!Bug 363244 - Generate Getters and Setters for class with macro
+//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
+//@.config
+filename=A.h
+getters=test
+//@A.h
+#ifndef A_H_
+#define A_H_
+
+#define Typedef \
+	typedef int Int
+
+class Test
+{
+public:
+	Typedef;
+
+	void     Foo();
+	Test();
+
+	int /*$*/test/*$$*/;
+};
+#endif /* A_H_ */
+//=
+#ifndef A_H_
+#define A_H_
+
+#define Typedef \
+	typedef int Int
+
+class Test
+{
+public:
+	Typedef;
+
+	void     Foo();
+	Test();
+
+	int getTest() const {
+		return test;
+	}
+
+	int test;
+};
+#endif /* A_H_ */
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/HideMethod.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/HideMethod.rts
index 4184e0be140..9329f5d7ded 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/HideMethod.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/HideMethod.rts
@@ -19,7 +19,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -33,11 +32,11 @@ public:
 
 private:
 	int i;
+
 	void method2();
 };
 
 #endif /*A_H_*/
-
 //!HideMethodLineComment
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -60,7 +59,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -74,12 +72,12 @@ public:
 
 private:
 	int i;
+
 	//Comment
 	void method2();
 };
 
 #endif /*A_H_*/
-
 //!HideMethodBlockComment
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -102,7 +100,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -116,12 +113,12 @@ public:
 
 private:
 	int i;
+
 	/*Comment*/
 	void method2();
 };
 
 #endif /*A_H_*/
-
 //!HideMethodLineCommentBehind
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -143,7 +140,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -157,11 +153,11 @@ public:
 
 private:
 	int i;
+
 	void method2(); //Comment
 };
 
 #endif /*A_H_*/
-
 //!HideMethodBlockCommentBehind
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -183,7 +179,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -197,11 +192,11 @@ public:
 
 private:
 	int i;
+
 	void method2(); /*Comment*/
 };
 
 #endif /*A_H_*/
-
 //!HideMethodLineCommentWithSpace
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -225,7 +220,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -239,12 +233,12 @@ public:
 
 private:
 	int i;
+
 	//Comment
 	void method2();
 };
 
 #endif /*A_H_*/
-
 //!HideMethodBlockCommentWithSpace
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -268,7 +262,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -282,12 +275,12 @@ public:
 
 private:
 	int i;
+
 	/*Comment*/
 	void method2();
 };
 
 #endif /*A_H_*/
-
 //!HideMethodLineCommentWithSpaceBehind
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -309,7 +302,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -323,11 +315,11 @@ public:
 
 private:
 	int i;
+
 	void method2(); //Comment
 };
 
 #endif /*A_H_*/
-
 //!HideMethodBlockCommentWithSpaceBehind
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -349,7 +341,6 @@ private:
 	int i;
 };
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -363,10 +354,10 @@ public:
 
 private:
 	int i;
+
 	void method2(); /*Comment*/
 };
 #endif /*A_H_*/
-
 //!HideMethodBigBlockComment
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -390,7 +381,6 @@ private:
 	int i;
 };
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -404,13 +394,13 @@ public:
 
 private:
 	int i;
+
 	/*
 	 * Comment
 	 */
 	void method2();
 };
 #endif /*A_H_*/
-
 //!HideMethodBigBlockCommentBehind
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -434,7 +424,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -448,13 +437,13 @@ public:
 
 private:
 	int i;
+
 	void method2(); /*
 	 * Comment
 	 */
 };
 
 #endif /*A_H_*/
-
 //!HideMethodBigBlockCommentBeforeAndBehind
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -481,7 +470,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -495,6 +483,7 @@ public:
 
 private:
 	int i;
+
 	/*
 	 * Davor
 	 */
@@ -504,7 +493,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //!HideMethodMixedCommentBeforeAndAfter
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -527,7 +515,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -541,12 +528,12 @@ public:
 
 private:
 	int i;
+
 	/*123*/
 	void method2(); //TEST
 };
 
 #endif /*A_H_*/
-
 //!HideMethodBlockCommentBeforeAndBehind
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -568,7 +555,6 @@ private:
 	int i;
 };
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -582,11 +568,11 @@ public:
 
 private:
 	int i;
+
 	/*123*/
 	void method2(); /*TEST*/
 };
 #endif /*A_H_*/
-
 //!HideMethodNoChange
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -604,7 +590,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -617,7 +602,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //!HideMethod2MethodsDifferentLine
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -635,7 +619,6 @@ public:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -651,7 +634,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //!HideMethod2MethodsSameLine
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -668,7 +650,6 @@ public:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -684,7 +665,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //!HideMethod2MethodsDifferentLineWithComment
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -703,7 +683,6 @@ public:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -720,7 +699,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //!HideMethod2MethodsSameLineWithComment
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -738,7 +716,6 @@ public:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -755,7 +732,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //!HideMethodSimple ImplementationFile
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@A.h
@@ -775,7 +751,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -789,18 +764,17 @@ public:
 
 private:
 	int i;
+
 	void method2();
 };
 
 #endif /*A_H_*/
-
 //@A.cpp
 #include "A.h"
 
 void A::/*$*/method2/*$$*/()
 {
 }
-
 //!HideMethodSimple ImplementationFile with Comments BUG #60
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@A.h
@@ -821,7 +795,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -835,12 +808,12 @@ public:
 
 private:
 	int i;
+
 	//TEST 1
 	void method2(); //TEST 2
 };
 
 #endif /*A_H_*/
-
 //@A.cpp
 #include "A.h"
 
@@ -848,7 +821,7 @@ void A::/*$*/method2/*$$*/()
 {
 }
 
-//!HideMethod with References 1
+//!HideMethod with references 1
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
 filename=HideMethod.h
@@ -860,14 +833,14 @@ class HideMethod {
 public:
 	HideMethod();
 	virtual ~HideMethod();
-	void /*$*/methode2/*$$*/();
-	void methode3() {
-		methode2();
+	void /*$*/method2/*$$*/();
+
+	void method3() {
+		method2();
 	}
 };
 
 #endif /* HIDEMETHOD_H_ */
-
 //=
 #ifndef HIDEMETHOD_H_
 #define HIDEMETHOD_H_
@@ -876,17 +849,17 @@ class HideMethod {
 public:
 	HideMethod();
 	virtual ~HideMethod();
-	void methode3() {
-		methode2();
+
+	void method3() {
+		method2();
 	}
 
 private:
-	void methode2();
+	void method2();
 };
 
 #endif /* HIDEMETHOD_H_ */
-
-//!HideMethod with References 2
+//!HideMethod with references 2
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
 filename=HideMethod.h
@@ -898,12 +871,11 @@ class HideMethod {
 public:
 	HideMethod();
 	virtual ~HideMethod();
-	void /*$*/methode2/*$$*/();
-	void methode3();
+	void /*$*/method2/*$$*/();
+	void method3();
 };
 
 #endif /* HIDEMETHOD_H_ */
-
 //=
 #ifndef HIDEMETHOD_H_
 #define HIDEMETHOD_H_
@@ -912,14 +884,13 @@ class HideMethod {
 public:
 	HideMethod();
 	virtual ~HideMethod();
-	void methode3();
+	void method3();
 
 private:
-	void methode2();
+	void method2();
 };
 
 #endif /* HIDEMETHOD_H_ */
-
 //@HideMethod.cpp
 #include "HideMethod.h"
 
@@ -931,15 +902,13 @@ HideMethod::~HideMethod() {
 	// TODO Auto-generated destructor stub
 }
 
-void HideMethod::methode2() {
+void HideMethod::method2() {
 	//do nothing
 }
 
-void HideMethod::methode3()
-{
-	methode2();
+void HideMethod::method3() {
+	method2();
 }
-
 //=
 #include "HideMethod.h"
 
@@ -951,16 +920,14 @@ HideMethod::~HideMethod() {
 	// TODO Auto-generated destructor stub
 }
 
-void HideMethod::methode2() {
+void HideMethod::method2() {
 	//do nothing
 }
 
-void HideMethod::methode3()
-{
-	methode2();
+void HideMethod::method3() {
+	method2();
 }
-
-//!HideMethod with References 3
+//!HideMethod with references 3
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
 filename=HideMethod.h
@@ -973,20 +940,19 @@ class HideMethod {
 public:
 	HideMethod();
 	virtual ~HideMethod();
-	void /*$*/methode2/*$$*/();
-	void methode3();
+	void /*$*/method2/*$$*/();
+	void method3();
 };
 
 class test{
 public:
 	void call() {
 		HideMethod hm;
-		hm.methode2();
+		hm.method2();
 	}
 };
 
 #endif /* HIDEMETHOD_H_ */
-
 //=
 #ifndef HIDEMETHOD_H_
 #define HIDEMETHOD_H_
@@ -995,23 +961,22 @@ class HideMethod {
 public:
 	HideMethod();
 	virtual ~HideMethod();
-	void methode3();
+	void method3();
 
 private:
-	void methode2();
+	void method2();
 };
 
 class test{
 public:
 	void call() {
 		HideMethod hm;
-		hm.methode2();
+		hm.method2();
 	}
 };
 
 #endif /* HIDEMETHOD_H_ */
-
-//!HideMethod with References 4
+//!HideMethod with references 4
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
 filename=HideMethod.h
@@ -1024,12 +989,11 @@ class HideMethod {
 public:
 	HideMethod();
 	virtual ~HideMethod();
-	void /*$*/methode2/*$$*/();
-	void methode3();
+	void /*$*/method2/*$$*/();
+	void method3();
 };
 
 #endif /* HIDEMETHOD_H_ */
-
 //=
 #ifndef HIDEMETHOD_H_
 #define HIDEMETHOD_H_
@@ -1038,14 +1002,13 @@ class HideMethod {
 public:
 	HideMethod();
 	virtual ~HideMethod();
-	void methode3();
+	void method3();
 
 private:
-	void methode2();
+	void method2();
 };
 
 #endif /* HIDEMETHOD_H_ */
-
 //@HideMethod.cpp
 #include "HideMethod.h"
 
@@ -1058,19 +1021,18 @@ HideMethod::~HideMethod() {
 	// TODO Auto-generated destructor stub
 }
 
-void HideMethod::methode2() {
+void HideMethod::method2() {
 	//do nothing
 }
 
-void HideMethod::methode3() {
+void HideMethod::method3() {
 	//do nothing
 }
 
 int main() {
 	HideMethod hm;
-	hm.methode2();
+	hm.method2();
 }
-
 //=
 //@HideMethod.cpp
 #include "HideMethod.h"
@@ -1084,20 +1046,19 @@ HideMethod::~HideMethod() {
 	// TODO Auto-generated destructor stub
 }
 
-void HideMethod::methode2() {
+void HideMethod::method2() {
 	//do nothing
 }
 
-void HideMethod::methode3() {
+void HideMethod::method3() {
 	//do nothing
 }
 
 int main() {
 	HideMethod hm;
-	hm.methode2();
+	hm.method2();
 }
-
-//!HideMethod with CPP File selection
+//!HideMethod with CPP file selection
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
 filename=HideMethod.h
@@ -1109,12 +1070,11 @@ class HideMethod {
 public:
 	HideMethod();
 	virtual ~HideMethod();
-	void methode2();
-	void methode3();
+	void method2();
+	void method3();
 };
 
 #endif /* HIDEMETHOD_H_ */
-
 //=
 #ifndef HIDEMETHOD_H_
 #define HIDEMETHOD_H_
@@ -1123,14 +1083,13 @@ class HideMethod {
 public:
 	HideMethod();
 	virtual ~HideMethod();
-	void methode3();
+	void method3();
 
 private:
-	void methode2();
+	void method2();
 };
 
 #endif /* HIDEMETHOD_H_ */
-
 //@HideMethod.cpp
 #include "HideMethod.h"
 
@@ -1142,15 +1101,13 @@ HideMethod::~HideMethod() {
 	// TODO Auto-generated destructor stub
 }
 
-void HideMethod::/*$*/methode2/*$$*/() {
+void HideMethod::/*$*/method2/*$$*/() {
 	//do nothing
 }
 
-void HideMethod::methode3()
-{
-	methode2();
+void HideMethod::method3() {
+	method2();
 }
-
 //=
 #include "HideMethod.h"
 
@@ -1162,15 +1119,13 @@ HideMethod::~HideMethod() {
 	// TODO Auto-generated destructor stub
 }
 
-void HideMethod::methode2() {
+void HideMethod::method2() {
 	//do nothing
 }
 
-void HideMethod::methode3()
-{
-	methode2();
+void HideMethod::method3() {
+	method2();
 }
-
 //!HideMethodChangeToDefaultVisibility Class1
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -1187,7 +1142,6 @@ public:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -1196,12 +1150,12 @@ public:
 
 class A {
 public:
+
 private:
 	void method2();
 };
 
 #endif /*A_H_*/
-
 //!HideMethodChangeToDefaultVisibility Class2
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -1246,7 +1200,6 @@ struct A {
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -1259,7 +1212,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //!HideMethod CheckIfPrivateBug 1
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -1354,7 +1306,9 @@ public:
 //=
 struct other {
 private:
-	bool value() { return true; }
+	bool value() {
+		return true;
+	}
 };
 
 class Class {
@@ -1397,7 +1351,6 @@ public:
 	}
 
 private:
-
 	void test() {
 		other o;
 		this->set(o.value());
@@ -1435,15 +1388,14 @@ public:
 private:
 	void just_private();
 };
-
 //=
 class Class {
 public:
+
 private:
 	void just_private();
 	void to_move();
 };
-
 //!HideMethod several private sections
 //#org.eclipse.cdt.ui.tests.refactoring.hidemethod.HideMethodRefactoringTest
 //@.config
@@ -1458,14 +1410,13 @@ private:
 
 private:
 };
-
 //=
 class Class {
 public:
+
 private:
 	void just_private();
 	void to_move();
 
 private:
 };
-
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/HideMethodHistory.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/HideMethodHistory.rts
index de72504e590..35d7d9cbcf9 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/HideMethodHistory.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/HideMethodHistory.rts
@@ -17,7 +17,6 @@ private:
 };
 
 #endif /*A_H_*/
-
 //=
 #ifndef A_H_
 #define A_H_
@@ -31,11 +30,11 @@ public:
 
 private:
 	int i;
+
 	void method2();
 };
 
 #endif /*A_H_*/
-
 //@refScript.xml
 
 
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ImplementMethod.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ImplementMethod.rts
index c2d1a0d3a9e..df5711bf73b 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ImplementMethod.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ImplementMethod.rts
@@ -182,7 +182,6 @@ public:
 };
 
 }
-
 //@A.cpp
 #include "A.h"
 
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/NewCreationTest.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/NewCreationTest.rts
index 61c750b2d60..4ac721ac2a1 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/NewCreationTest.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/NewCreationTest.rts
@@ -1,4 +1,4 @@
-//!FreefunctionFromHeaderToImpl
+//!FreeFunctionFromHeaderToImpl
 //#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
 //@.config
 filename=A.h
@@ -20,7 +20,7 @@ void freefunction();
 void freefunction() {
 	return;
 }
-//!FreefunctionFromImplToHeader
+//!FreeFunctionFromImplToHeader
 //#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
 //@.config
 filename=A.cpp
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsClassToHeader.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsClassToHeader.rts
index 61351a117fc..30546140280 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsClassToHeader.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsClassToHeader.rts
@@ -107,7 +107,6 @@ class A {
 	// Top comment
 	template
 	T member();
-
 };
 
 // Top comment
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsHeaderToClass.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsHeaderToClass.rts
index 61c768a4c0b..70d269f1b47 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsHeaderToClass.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsHeaderToClass.rts
@@ -21,8 +21,6 @@ class A {
 		return T();
 	}
 };
-
-
 //!HeaderToClassRetainTopComments
 //#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
 //@.config
@@ -44,18 +42,14 @@ inline T A::member() {
 //=
 template
 class A {
-	// Third comment
-	// Fourth comment
 	// First comment
 	// Second comment
+	// Third comment
+	// Fourth comment
 	T member() {
 		return T();
 	}
 };
-
-
-
-
 //!HeaderToClassTryCatchComment
 //#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
 //@.config
@@ -93,8 +87,6 @@ class A {
 		// Catch 2
 	}
 };
-
-
 //!HeaderToClassMultiTemplateComment
 //#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
 //@.config
@@ -123,11 +115,7 @@ class A {
 		// body comment
 		return T();
 	}
-
 };
-
-// 2nd Top Comment
-
 //!HeaderToClassBodyComment
 //#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
 //@.config
@@ -151,6 +139,3 @@ class A {
 		return T();
 	}
 };
-
-
-
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsHeaderToImpl.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsHeaderToImpl.rts
index 7ac828d6e94..95ac67e6d36 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsHeaderToImpl.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsHeaderToImpl.rts
@@ -15,8 +15,6 @@ inline void A::member() {
 class A {
 	void member();
 };
-
-
 //@A.cpp
 #include "A.h"
 //=
@@ -44,8 +42,6 @@ catch /*3*/ (int e) { /*4*/ }
 class A {
 	void member();
 };
-
-
 //@A.cpp
 #include "A.h"
 //=
@@ -80,9 +76,6 @@ inline void A::member() {
 class A {
 	void member();
 };
-
-
-
 //@A.cpp
 #include "A.h"
 //=
@@ -105,10 +98,8 @@ void /*$*/member/*$$*/() {
 //=
 // Definition comment
 void member();
-
 //@A.cpp
 #include "A.h"
-
 //=
 #include "A.h"
 
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsImplToHeader.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsImplToHeader.rts
index 62f1a398f6e..628d3debd6b 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsImplToHeader.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCommentsImplToHeader.rts
@@ -11,8 +11,6 @@ void A::/*$*/member/*$$*/() {
 }
 //=
 #include "A.h"
-
-
 //@A.h
 class A {
 	void member();
@@ -37,9 +35,6 @@ void A::/*$*/member/*$$*/() {
 }
 //=
 #include "A.h"
-
-// Definition comment
-
 //@A.h
 class A {
 	void member();
@@ -64,9 +59,6 @@ void A::/*$*/member/*$$*/() try {
 } /*1*/ catch (int e) { /*2*/ } /*3*/ catch (int e) { /*4*/ }
 //=
 #include "A.h"
-
-// Definition comment
-
 //@A.h
 class A {
 	void member();
@@ -98,8 +90,6 @@ void /*$*/member/*$$*/() {
 }
 //=
 #include "A.h"
-
-
 //@A.h
 
 //=
@@ -122,9 +112,6 @@ void /*$*/member/*$$*/() {
 }
 //=
 #include "A.h"
-
-// Top comment
-
 //@A.h
 
 //=
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCtorDtorRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCtorDtorRefactoring.rts
index 04ec07acf62..ffef1312d81 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCtorDtorRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleCtorDtorRefactoring.rts
@@ -69,8 +69,6 @@ public:
 	~A() {
 	}
 };
-
-
 //@A.cpp
 #include "A.h"
 
@@ -105,8 +103,6 @@ int main() {
 //=
 #include "A.h"
 
-
-
 int main() {
 	return 0;
 }
@@ -188,8 +184,6 @@ private:
 public:
 	~A();
 };
-
-
 //@A.cpp
 #include "A.h"
 
@@ -225,8 +219,6 @@ int main() {
 //=
 #include "A.h"
 
-
-
 int main() {
 	return 0;
 }
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDefaultParameterRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDefaultParameterRefactoring.rts
index d1d2fa2b715..7a1eeb54057 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDefaultParameterRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDefaultParameterRefactoring.rts
@@ -41,8 +41,6 @@ inline void /*$*/A::member/*$$*/(int a, int b) {
 class A {
 	void member(int a = 0, int b = 0);
 };
-
-
 //@A.cpp
 #include "A.h"
 
@@ -77,8 +75,6 @@ int main() {
 //=
 #include "A.h"
 
-
-
 int main() {
 	return 0;
 }
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDifferentSelections.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDifferentSelections.rts
index 535e98acf15..a08d9a0453a 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDifferentSelections.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleDifferentSelections.rts
@@ -18,8 +18,6 @@ void N::A::/*$*/foo/*$$*/() {
 int main() {
 	return 0;
 }
-
-
 //@A.h
 #include 
 #include 
@@ -90,5 +88,3 @@ void N::A::foo() {
 int main() {
 	return 0;
 }
-
-
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleFreeFunction.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleFreeFunction.rts
index 57cf41340c6..7000fe3ac22 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleFreeFunction.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleFreeFunction.rts
@@ -38,7 +38,6 @@ public:
 };
 
 int freeFunction(int* a, int& b);
-
 //@A.cpp
 #include "A.h"
 
@@ -76,8 +75,6 @@ int /*$*/freeFunction/*$$*/(int* a, int& b) {
 int main() {
 	return 0;
 }
-
-
 //@A.h
 #include 
 
@@ -114,7 +111,6 @@ public:
 int freeFunction(int* a, int& b) {
 	return 42;
 }
-
 //!TestFreeFunctionToggleFromImplementationToHeaderWithOutDeclaration
 //#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
 //@.config
@@ -132,14 +128,13 @@ try {
 }
 catch (std::exception& e) {
 }
+
 //=
 #include "A.h"
 
 int main() {
 	return 0;
 }
-
-
 //@A.h
 #include 
 
@@ -155,7 +150,6 @@ public:
 	~A() {
 	}
 };
-
 //=
 #include 
 
@@ -179,7 +173,6 @@ try {
 catch (std::exception& e) {
 }
 
-
 //!TestFreeFunction
 //#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
 //@.config
@@ -190,7 +183,6 @@ int /*$*/freeFunction/*$$*/() {
 }
 //=
 int freeFunction();
-
 //@A.cpp
 #include "A.h"
 //=
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNamespaceRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNamespaceRefactoring.rts
index 598bf314c06..e002c3cffde 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNamespaceRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNamespaceRefactoring.rts
@@ -132,6 +132,7 @@ namespace N {
 void A::foo() {
 	return;
 }
+
 }
 //!TestSimpleNamespaceInHeaderToImplementationWithNamespaceQualifiedName
 //#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
@@ -163,8 +164,6 @@ class A {
 };
 
 }
-
-
 //@A.cpp
 #include "A.h"
 
@@ -203,8 +202,6 @@ int main() {
 //=
 #include "A.h"
 
-
-
 int main() {
 	return 0;
 }
@@ -246,8 +243,6 @@ void /*$*/A::foo/*$$*/() {
 }
 //=
 #include "A.h"
-
-
 //@A.h
 #include 
 
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNestedRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNestedRefactoring.rts
index d73288018e8..3e53d81da6d 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNestedRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleNestedRefactoring.rts
@@ -49,8 +49,6 @@ class A {
 		void member(int a, int b);
 	};
 };
-
-
 //@A.cpp
 #include "A.h"
 
@@ -88,8 +86,6 @@ void A::B::/*$*/member/*$$*/(int a, int b) {
 int main() {
 	return 0;
 }
-
-
 //@A.h
 #include 
 
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleOrdering.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleOrdering.rts
index 6c1ccc5b5f9..2622b732712 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleOrdering.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleOrdering.rts
@@ -59,7 +59,6 @@ public:
 inline void A::/*$*/func2/*$$*/() {
 	return;
 }
-
 //=
 #include 
 
@@ -71,9 +70,6 @@ public:
 	void func4() {
 	}
 };
-
-
-
 //@A.cpp
 #include "A.h"
 
@@ -201,8 +197,6 @@ template
 inline void A::func1() {
 }
 
-
-
 template
 inline void A::func3() {
 }
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSimpleFunctionRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSimpleFunctionRefactoring.rts
index b92b03b8a8a..aaec086264d 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSimpleFunctionRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleSimpleFunctionRefactoring.rts
@@ -57,8 +57,6 @@ public:
 private:
 	int a;
 };
-
-
 //@A.cpp
 #include "A.h"
 
@@ -93,8 +91,6 @@ int main() {
 //=
 #include "A.h"
 
-
-
 int main() {
 	return 0;
 }
@@ -137,8 +133,6 @@ int main() {
 //=
 #include "MyClass.h"
 
-
-
 int main() {
 	return 0;
 }
@@ -175,24 +169,18 @@ int main() {
 //=
 #include "MyClass.h"
 
-
-
 int main() {
 	return 0;
 }
 //@MyClass.h
-
 struct myClass {
 	int fVal;
 	myClass(int);
 };
-
 //=
-
 struct myClass {
 	int fVal;
 	myClass(int implname) :
 			fVal(implname) {
 	}
 };
-
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTemplateRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTemplateRefactoring.rts
index 19c4330b515..af12e2930d3 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTemplateRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTemplateRefactoring.rts
@@ -57,8 +57,6 @@ class A {
 		}
 	};
 };
-
-
 //!TestTemplateFunctionInHeaderToInClassWithTemplateSelected
 //#org.eclipse.cdt.ui.tests.refactoring.togglefunction.ToggleRefactoringTest
 //@.config
@@ -74,7 +72,6 @@ class A {
 class A {
 	template
 	T foo();
-
 };
 
 template
@@ -101,7 +98,6 @@ class A {
 public:
 	template
 	void foo(const U& u, const V& v);
-
 };
 
 template
@@ -135,7 +131,4 @@ public:
 	void foo(const U& u, const V& v) {
 		return;
 	}
-
 };
-
-
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTryCatchRefactoring.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTryCatchRefactoring.rts
index 30a83009e4b..d5777071018 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTryCatchRefactoring.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleTryCatchRefactoring.rts
@@ -57,8 +57,6 @@ catch (std::exception& e1) {
 class A {
 	void member(int a, int b);
 };
-
-
 //@A.cpp
 #include "A.h"
 
@@ -103,8 +101,6 @@ int main() {
 #include 
 #include "A.h"
 
-
-
 int main() {
 	return 0;
 }
@@ -194,8 +190,6 @@ catch (std::exception& e2) {
 class A {
 	void member(int a, int b);
 };
-
-
 //@A.cpp
 #include "A.h"
 
@@ -246,8 +240,6 @@ int main() {
 #include 
 #include "A.h"
 
-
-
 int main() {
 	return 0;
 }
diff --git a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleVirtualFunction.rts b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleVirtualFunction.rts
index 8a51d64b8c7..a0af0150b1b 100644
--- a/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleVirtualFunction.rts
+++ b/core/org.eclipse.cdt.ui.tests/resources/refactoring/ToggleVirtualFunction.rts
@@ -25,7 +25,6 @@ inline int A::foo() {
 //@.config
 filename=A.h
 //@A.h
-
 class A {
 	virtual int /*$*/foo/*$$*/();
 };
@@ -34,12 +33,9 @@ inline int A::foo() {
 	return 0;
 }
 //=
-
 class A {
 	virtual int foo();
 };
-
-
 //@A.cpp
 #include "A.h"
 
@@ -62,12 +58,10 @@ int A::foo() {
 //@.config
 filename=A.h
 //@A.h
-
 class A {
 	virtual int /*$*/foo/*$$*/();
 };
 //=
-
 class A {
 	virtual int foo() {
 		return 0;
@@ -89,5 +83,3 @@ int A::foo() {
 int main() {
 	return 0;
 }
-
-
diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java
index 4eb659df105..08d5345b1cc 100644
--- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java
+++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CodeFormatterTest.java
@@ -556,12 +556,12 @@ public class CodeFormatterTest extends BaseUITestCase {
 	//}
 
 	//typedef signed int TInt;
-	//extern void Bar(); // should not have space between parens
+	//extern void Bar();  // should not have space between parens
 	//
-	//void Foo() // should not have space between parens
+	//void Foo()    // should not have space between parens
 	//	{
-	//	TInt a( 3 ); // should become TInt a( 3 );
-	//	Bar(); // should not have space between parens
+	//	TInt a( 3 );  // should become TInt a( 3 );
+	//	Bar();   // should not have space between parens
 	//	}
 	public void testSpaceBetweenParen_Bug217918() throws Exception {
 		fOptions.put(DefaultCodeFormatterConstants.FORMATTER_BRACE_POSITION_FOR_METHOD_DECLARATION,
@@ -893,9 +893,9 @@ public class CodeFormatterTest extends BaseUITestCase {
     //namespace ns1 {
 	//namespace ns2 {
 	//void foo() {
-	//    int x;        // comment
-	//    int y;        // comment
-	//    		        // continuation of the previous comment
+	//    int x;// comment
+	//    int y;// comment
+	//    		// continuation of the previous comment
 	////  int z;  <- comments starting from the beginning of line are not indented
 	//}
 	//}// namespace ns2
@@ -914,6 +914,7 @@ public class CodeFormatterTest extends BaseUITestCase {
 	public void testLineCommentMinDistanceFromCode() throws Exception {
 		fOptions.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, CCorePlugin.SPACE);
 		fOptions.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_MIN_DISTANCE_BETWEEN_CODE_AND_LINE_COMMENT, "2");
+		fOptions.put(DefaultCodeFormatterConstants.FORMATTER_COMMENT_PRESERVE_WHITE_SPACE_BETWEEN_CODE_AND_LINE_COMMENT, DefaultCodeFormatterConstants.FALSE);
 		assertFormatterResult();
 	}
 
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SourceHeaderPartnerFinder.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SourceHeaderPartnerFinder.java
index c544dae4386..1bac52aad40 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SourceHeaderPartnerFinder.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/editor/SourceHeaderPartnerFinder.java
@@ -77,6 +77,7 @@ public final class SourceHeaderPartnerFinder {
 	private static class PartnerFileComputer implements ASTRunnable {
 		PartnerFileVisitor fVisitor = null;
 		
+		@Override
 		public IStatus runOnAST(ILanguage lang, IASTTranslationUnit ast) {
 			if (ast != null && ast.getIndex() != null) {
 				fVisitor = new PartnerFileVisitor();
@@ -86,7 +87,7 @@ public final class SourceHeaderPartnerFinder {
 		}
 
 		public IPath getPartnerFileLocation() {
-			if(fVisitor != null) {
+			if (fVisitor != null) {
 				return fVisitor.getPartnerFileLocation();
 			}
 			
@@ -120,6 +121,7 @@ public final class SourceHeaderPartnerFinder {
 			shouldVisitDeclarators= true;
 			shouldVisitTranslationUnit = true;
 		}
+
 		public PartnerFileVisitor() {
 			fMap= new HashMap();
 		}
@@ -127,7 +129,7 @@ public final class SourceHeaderPartnerFinder {
 		@Override
 		public int visit(IASTTranslationUnit tu) {
 			fIndex= tu.getIndex();
-			if(fIndex == null) {
+			if (fIndex == null) {
 				return PROCESS_ABORT;	
 			}
 			
@@ -212,6 +214,7 @@ public final class SourceHeaderPartnerFinder {
 	private static IFile findInContainer(IContainer container, final String basename) {
 		final IFile[] result= { null };
 		IResourceProxyVisitor visitor= new IResourceProxyVisitor() {
+			@Override
 			public boolean visit(IResourceProxy proxy) throws CoreException {
 				if (result[0] != null) {
 					return false;
@@ -227,8 +230,8 @@ public final class SourceHeaderPartnerFinder {
 			}};
 		try {
 			container.accept(visitor, 0);
-		} catch (CoreException exc) {
-			// ignore
+		} catch (CoreException e) {
+			// Ignore
 		}
 		return result[0];
 	}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferenceBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferenceBlock.java
index 27409aa1de1..18e0fdacfe1 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferenceBlock.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferenceBlock.java
@@ -62,7 +62,6 @@ import org.eclipse.cdt.internal.ui.util.SWTUtil;
  * for displaying/editing CDT file type associations
  */
 public class CFileTypesPreferenceBlock {
-
 	private static final int 	COL_PATTERN		= 0;
 	private static final int 	COL_DESCRIPTION	= 1;
 	private static final int 	COL_STATUS	= 2;
@@ -167,7 +166,6 @@ public class CFileTypesPreferenceBlock {
 		public String getText(Object element) {
 			return getColumnText(element, 0);
 		}
-
 	}
 
 	public CFileTypesPreferenceBlock() {
@@ -400,9 +398,9 @@ public class CFileTypesPreferenceBlock {
 
 	public IContentType[] getRegistedContentTypes() {
 		if (fContentTypes == null) {
-			String [] ids = CoreModel.getRegistedContentTypeIds();
+			String[] ids = CoreModel.getRegistedContentTypeIds();
 			IContentTypeManager manager = Platform.getContentTypeManager();
-			IContentType [] ctypes = new IContentType[ids.length];
+			IContentType[] ctypes = new IContentType[ids.length];
 			for (int i = 0; i < ids.length; i++) {
 				ctypes[i] = manager.getContentType(ids[i]);
 			}
@@ -502,8 +500,7 @@ public class CFileTypesPreferenceBlock {
 		IContentTypeSettings settings;
 		if (fInput == null) {
 			settings= assoc.getContentType();
-		}
-		else {
+		} else {
 			try {
 				settings= assoc.getContentType().getSettings(new ProjectScope(fInput));
 			} catch (CoreException e) {
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferencePage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferencePage.java
index 0abfcc22c91..5021dcb820b 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferencePage.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/CFileTypesPreferencePage.java
@@ -11,8 +11,6 @@
  *******************************************************************************/
 package org.eclipse.cdt.internal.ui.preferences;
 
-
-
 import org.eclipse.cdt.internal.ui.ICHelpContextIds;
 import org.eclipse.jface.preference.PreferencePage;
 import org.eclipse.swt.SWT;
@@ -29,7 +27,6 @@ import org.eclipse.ui.PlatformUI;
  * type associations for the workspace
  */
 public class CFileTypesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
-
 	private CFileTypesPreferenceBlock fPrefsBlock;
 
 	public CFileTypesPreferencePage() {
@@ -72,11 +69,9 @@ public class CFileTypesPreferencePage extends PreferencePage implements IWorkben
 	 */
 	@Override
 	public boolean performOk() {
-		
 		if (fPrefsBlock.performOk()) {
 		}
 		
 		return super.performOk();
 	}
-
 }
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/CodeFormatterConfigurationBlock.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/CodeFormatterConfigurationBlock.java
index 7349e8ee4f5..6efbd04161f 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/CodeFormatterConfigurationBlock.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/preferences/formatter/CodeFormatterConfigurationBlock.java
@@ -7,8 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Aaron Luchko, aluchko@redhat.com - 105926 [Formatter] Exporting Unnamed profile fails silently
- *     Sergey Prigogin, Google
+ *     Aaron Luchko, aluchko@redhat.com - 105926 [Formatter] Exporting unnamed profile fails silently
+ *     Sergey Prigogin (Google)
  *     Anton Leherbauer (Wind River Systems)
  *******************************************************************************/
 package org.eclipse.cdt.internal.ui.preferences.formatter;
@@ -32,7 +32,6 @@ import org.eclipse.cdt.internal.ui.preferences.formatter.ProfileManager.Profile;
  * The code formatter preference page. 
  */
 public class CodeFormatterConfigurationBlock extends ProfileConfigurationBlock {
-    
     private static final String FORMATTER_DIALOG_PREFERENCE_KEY= "formatter_page"; //$NON-NLS-1$
 
     private static final String DIALOGSTORE_LASTSAVELOADPATH= CUIPlugin.PLUGIN_ID + ".codeformatter.savepath"; //$NON-NLS-1$
@@ -46,6 +45,7 @@ public class CodeFormatterConfigurationBlock extends ProfileConfigurationBlock {
 			fCodeStylePreview.update();
 		}
 		
+		@Override
 		public void update(Observable o, Object arg) {
 			if (o == fCustomCodeFormatterBlock) {
 				fCodeStylePreview.setFormatterId((String)arg);
@@ -173,5 +173,4 @@ public class CodeFormatterConfigurationBlock extends ProfileConfigurationBlock {
 		}
 		return super.performOk();
 	}
-    
 }
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/AddDeclarationNodeToClassChange.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/AddDeclarationNodeToClassChange.java
index 7160e69321b..0fa86ca0b49 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/AddDeclarationNodeToClassChange.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/AddDeclarationNodeToClassChange.java
@@ -38,7 +38,7 @@ import org.eclipse.cdt.internal.ui.refactoring.utils.VisibilityEnum;
  * @author Mirko Stocker
  */
 public class AddDeclarationNodeToClassChange {
-	private final ICPPASTCompositeTypeSpecifier nodeClass;
+	private final ICPPASTCompositeTypeSpecifier classNode;
 	private final VisibilityEnum visibility;
 	private List fieldNodes = new ArrayList();
 	private final ModificationCollector collector;
@@ -49,26 +49,26 @@ public class AddDeclarationNodeToClassChange {
 		new AddDeclarationNodeToClassChange(nodeClass, visibility, fieldNodes, collector, isField);
 	}
 
-	public static void createChange(ICPPASTCompositeTypeSpecifier nodeClass,
+	public static void createChange(ICPPASTCompositeTypeSpecifier classNode,
 			VisibilityEnum visibility, List fieldNodes, boolean isField,
 			ModificationCollector collector) {
-		new AddDeclarationNodeToClassChange(nodeClass, visibility, fieldNodes, collector, isField);
+		new AddDeclarationNodeToClassChange(classNode, visibility, fieldNodes, collector, isField);
 	}	
 
-	private AddDeclarationNodeToClassChange(ICPPASTCompositeTypeSpecifier nodeClass,
+	private AddDeclarationNodeToClassChange(ICPPASTCompositeTypeSpecifier classNode,
 			VisibilityEnum visibility, List fieldNodes,
 			ModificationCollector collector, boolean isField) {
 		this.fieldNodes = fieldNodes;
-		this.nodeClass = nodeClass;		
+		this.classNode = classNode;		
 		this.visibility = visibility;
 		this.collector = collector;
 		createRewrites(isField);
 	}
 	
-	private AddDeclarationNodeToClassChange(ICPPASTCompositeTypeSpecifier nodeClass,
+	private AddDeclarationNodeToClassChange(ICPPASTCompositeTypeSpecifier classNode,
 			VisibilityEnum visibility, IASTNode fieldNodes, ModificationCollector collector,
 			boolean isField) {
-		this.nodeClass = nodeClass;		
+		this.classNode = classNode;		
 		this.visibility = visibility;
 		this.fieldNodes.add(fieldNodes);
 		this.collector = collector;
@@ -78,12 +78,10 @@ public class AddDeclarationNodeToClassChange {
 	private void createRewrites(boolean isField) {
 		int lastFunctionDeclaration = -1;
 		int lastFieldDeclaration = -1;
-		IASTDeclaration[] members = nodeClass.getMembers();
+		IASTDeclaration[] members = classNode.getMembers();
 		
-		VisibilityEnum currentVisibility = VisibilityEnum.v_private;
-		if (IASTCompositeTypeSpecifier.k_struct == nodeClass.getKey()) {
-			currentVisibility = VisibilityEnum.v_public;
-		}	
+		VisibilityEnum currentVisibility = classNode.getKey() == IASTCompositeTypeSpecifier.k_struct ?
+				VisibilityEnum.v_public : VisibilityEnum.v_private;
 	
 		// Find the insert location by iterating over the elements of the class 
 		// and remembering the last element with the matching visibility
@@ -92,18 +90,13 @@ public class AddDeclarationNodeToClassChange {
 			
 			if (declaration instanceof ICPPASTVisibilityLabel) {
 				currentVisibility = VisibilityEnum.from((ICPPASTVisibilityLabel) declaration);
-			}
-			
-			if (declaration instanceof IASTSimpleDeclaration) {
+			} else if (declaration instanceof IASTSimpleDeclaration && currentVisibility.equals(visibility)) {
 				IASTSimpleDeclaration simple = (IASTSimpleDeclaration) declaration;
 				IASTDeclarator[] declarators = simple.getDeclarators();
-				if (declarators.length > 0 && declarators[0] != null &&
-						declarators[0] instanceof IASTFunctionDeclarator) {
-					if (currentVisibility.equals(visibility)) {
+				if (declarators.length > 0 && declarators[0] != null) {
+					if (declarators[0] instanceof IASTFunctionDeclarator) {
 						lastFunctionDeclaration = i;
-					}
-				} else if (declarators.length > 0 && declarators[0] != null) {
-					if (currentVisibility.equals(visibility)) {
+					} else {
 						lastFieldDeclaration = i;
 					}
 				}
@@ -142,29 +135,29 @@ public class AddDeclarationNodeToClassChange {
 		}
 	}
 
-	private void insertBefore(IASTNode nearestNode) {			
-		ASTRewrite rewrite = collector.rewriterForTranslationUnit(nearestNode.getTranslationUnit());
+	private void insertBefore(IASTNode nextNode) {			
+		ASTRewrite rewrite = collector.rewriterForTranslationUnit(nextNode.getTranslationUnit());
 		for (IASTNode node : fieldNodes) {
-			rewrite.insertBefore(nearestNode.getParent(), nearestNode, node, createEditDescription());
+			rewrite.insertBefore(nextNode.getParent(), nextNode, node, createEditDescription());
 		}
 	}
 
 	private void insertAtTheEnd(VisibilityEnum currentVisibility) {
-		ASTRewrite rewrite = collector.rewriterForTranslationUnit(nodeClass.getTranslationUnit());
+		ASTRewrite rewrite = collector.rewriterForTranslationUnit(classNode.getTranslationUnit());
 		
 		if (!currentVisibility.equals(visibility)) {
 			ICPPASTVisibilityLabel label =
 					new CPPASTVisibilityLabel(visibility.getICPPASTVisiblityLabelVisibility());
-			rewrite.insertBefore(nodeClass, null, label, createEditDescription());
+			rewrite.insertBefore(classNode, null, label, createEditDescription());
 		}
 		
 		for (IASTNode node : fieldNodes) {
-			rewrite.insertBefore(nodeClass, null, node, createEditDescription());
+			rewrite.insertBefore(classNode, null, node, createEditDescription());
 		}
 	}
 	
 	private TextEditGroup createEditDescription() {
 		return new TextEditGroup(NLS.bind(Messages.AddDeclarationNodeToClassChange_AddDeclaration,
-				nodeClass.getName()));
+				classNode.getName()));
 	}
 }
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/Messages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/Messages.properties
index e7df79b214e..d422dd488e6 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/Messages.properties
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/Messages.properties
@@ -7,14 +7,14 @@
 # http://www.eclipse.org/legal/epl-v10.html  
 # 
 # Contributors: 
-# 		Martin Schwab & Thomas Kallenberg - initial API and implementation 
+# 	  Martin Schwab & Thomas Kallenberg - initial API and implementation 
 ###############################################################################
 DeclaratorFinder_NestedFunction=Nested function declarations not supported
-DeclaratorFinder_NoDeclarator=cannot work without declarator
-DeclaratorFinder_MultipleDeclarators=cannot work with multiple declarators
-RefactoringJob_UndoName=toggle function definition
+DeclaratorFinder_NoDeclarator=Cannot work without declarator
+DeclaratorFinder_MultipleDeclarators=Cannot work with multiple declarators
+RefactoringJob_UndoName=Toggle function definition
 ToggleFileCreator_andMove=\ and move 
-ToggleFileCreator_CanNotCreateNewFile=Cannot create new filechange
+ToggleFileCreator_CanNotCreateNewFile=Cannot create new file change
 ToggleFileCreator_CreateNewFile=Create a new file named: 
 ToggleFileCreator_NewImplFile=New Implementation file?
 ToggleFileCreator_NoTuForSibling=Cannot find translation unit for sibling file
@@ -22,18 +22,18 @@ ToggleFileCreator_QMark=?
 ToggleFromClassToInHeaderStrategy_DefAndDecInsideClass=Definition and Declaration both inside class. Behavior is undefined.
 ToggleFromImplementationToHeaderOrClassStrategy_CanNotCreateNewFile=Cannot create new File
 ToggleFromImplementationToHeaderOrClassStrategy_CanNotToggle=Not a free function. Cannot decide where to toggle
-ToggleFromInHeaderToClassStrategy_CanNotToggleTemplateFreeFunction=Cannot toggle templated free function
+ToggleFromInHeaderToClassStrategy_CanNotToggleTemplateFreeFunction=Cannot toggle template free function
 EditGroupName=Toggle function body placement
 ToggleFromInHeaderToImplementationStrategy_CanNotCreateImplFile=Cannot create new Implementation File
 ToggleRefactoring_AnalyseSelection=analyzing user text selection
 ToggleRefactoring_CalculateModifications=calculating required code modifications
 ToggleRefactoring_CanNotSaveFiles=Cannot save files
 ToggleRefactoring_InvalidSelection=Invalid selection
-ToggleRefactoring_NoIndex=cannot work without the indexer
+ToggleRefactoring_NoIndex=Cannot work without the index
 ToggleRefactoring_WaitingForIndexer=waiting for indexer
-ToggleRefactoringContext_MultipleDeclarations=multiple declarations would result in ambiguous results
-ToggleRefactoringContext_MultipleDefinitions=one-definition-rule broken
-ToggleRefactoringContext_NoDefinitionFound=cannot work without definition
-ToggleRefactoringContext_NoTuFound=cannot work without translation unit
-ToggleStrategyFactory_NoDefinitionFound=cannot work without function definition
+ToggleRefactoringContext_MultipleDeclarations=Multiple declarations would result in ambiguous results
+ToggleRefactoringContext_MultipleDefinitions=One-definition-rule broken
+ToggleRefactoringContext_NoDefinitionFound=Cannot work without definition
+ToggleRefactoringContext_NoTuFound=Cannot work without translation unit
+ToggleStrategyFactory_NoDefinitionFound=Cannot work without function definition
 ToggleStrategyFactory_UnsupportedSituation=Unsupported situation for moving function body.
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleNodeHelper.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleNodeHelper.java
index f13fd5a7a44..bcfeee84ff8 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleNodeHelper.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleNodeHelper.java
@@ -7,7 +7,7 @@
  * http://www.eclipse.org/legal/epl-v10.html  
  * 
  * Contributors: 
- * 		Martin Schwab & Thomas Kallenberg - initial API and implementation 
+ *     Martin Schwab & Thomas Kallenberg - initial API and implementation 
  ******************************************************************************/
 package org.eclipse.cdt.internal.ui.refactoring.togglefunction;
 
@@ -70,7 +70,6 @@ import org.eclipse.cdt.internal.ui.refactoring.ModificationCollector;
 import org.eclipse.cdt.internal.ui.refactoring.utils.NodeHelper;
 
 public class ToggleNodeHelper extends NodeHelper {
-	
 	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
 
 	private static void removeParameterInitializations(IASTFunctionDeclarator funcDecl) {
@@ -85,7 +84,7 @@ public class ToggleNodeHelper extends NodeHelper {
 	private static ArrayList 
 			getInitializerList(IASTFunctionDefinition definition) {
 		ArrayList initalizers = 
-			new ArrayList();
+				new ArrayList();
 	
 		for (IASTNode node : definition.getChildren()) {
 			if (node instanceof ICPPASTConstructorChainInitializer) {
@@ -145,8 +144,7 @@ public class ToggleNodeHelper extends NodeHelper {
 			IASTTranslationUnit definitionUnit, IASTNode nameSpace) {
 		
 		ICPPASTDeclSpecifier newDeclSpec = 
- (ICPPASTDeclSpecifier) oldDefinition.getDeclSpecifier().copy(
-				CopyStyle.withLocations);
+				(ICPPASTDeclSpecifier) oldDefinition.getDeclSpecifier().copy(CopyStyle.withLocations);
 		
 		newDeclSpec.setVirtual(false);
 		newDeclSpec.setInline(true);
@@ -157,7 +155,7 @@ public class ToggleNodeHelper extends NodeHelper {
 		removeParameterInitializations(newDeclarator);
 		
 		ICPPASTFunctionDefinition newFunction = 
-			createFunctionSignatureWithEmptyBody(newDeclSpec, newDeclarator, oldDefinition);
+				createFunctionSignatureWithEmptyBody(newDeclSpec, newDeclarator, oldDefinition);
 	
 		return newFunction;
 	}
@@ -172,7 +170,7 @@ public class ToggleNodeHelper extends NodeHelper {
 			ArrayList templdecs, IASTFunctionDefinition newfunc) {
 		ListIterator iter1 = templdecs.listIterator();
 		ICPPASTTemplateDeclaration child = null;
-		while(iter1.hasNext()) {
+		while (iter1.hasNext()) {
 			child = iter1.next();
 			child.setDeclaration(newfunc);
 			ListIterator iter2 = iter1;
@@ -198,10 +196,8 @@ public class ToggleNodeHelper extends NodeHelper {
 		return templdecs;
 	}
 
-	static IASTFunctionDefinition createInClassDefinition(
-			IASTFunctionDeclarator dec, 
-			IASTFunctionDefinition def, 
-			IASTTranslationUnit insertionunit) {
+	static IASTFunctionDefinition createInClassDefinition(IASTFunctionDeclarator dec, 
+			IASTFunctionDefinition def, IASTTranslationUnit insertionunit) {
 		IASTFunctionDeclarator declarator = dec.copy(CopyStyle.withLocations);
 		ICPPASTDeclSpecifier declSpec = (ICPPASTDeclSpecifier) def.getDeclSpecifier().copy(
 				CopyStyle.withLocations);
@@ -232,9 +228,10 @@ public class ToggleNodeHelper extends NodeHelper {
 
 	static IASTNode getParentRemovePoint(IASTFunctionDefinition definition) {
 		IASTNode toremove = definition;
-		while (toremove.getParent() != null && 
-				toremove.getParent() instanceof ICPPASTTemplateDeclaration)
+		while (toremove.getParent() != null &&
+				toremove.getParent() instanceof ICPPASTTemplateDeclaration) {
 			toremove = toremove.getParent();
+		}
 		return toremove;
 	}
 
@@ -252,15 +249,13 @@ public class ToggleNodeHelper extends NodeHelper {
 
 	private static CPPASTQualifiedName reAssembleQualifiedName(Stack nodes) {
 		CPPASTQualifiedName qName = new CPPASTQualifiedName();
-		while(!nodes.isEmpty()) {
+		while (!nodes.isEmpty()) {
 			IASTNode nnode = nodes.pop();
 			if (nnode instanceof IASTCompositeTypeSpecifier) {
 				qName.addName(((IASTCompositeTypeSpecifier) nnode).getName());
-			}
-			else if (nnode instanceof ICPPASTNamespaceDefinition) {
+			} else if (nnode instanceof ICPPASTNamespaceDefinition) {
 				qName.addName(((ICPPASTNamespaceDefinition) nnode).getName());
-			}
-			else if (nnode instanceof ICPPASTTemplateId) {
+			} else if (nnode instanceof ICPPASTTemplateId) {
 				qName.addName((ICPPASTTemplateId) nnode);
 			}
 		}
@@ -271,17 +266,15 @@ public class ToggleNodeHelper extends NodeHelper {
 			IASTFunctionDeclarator declarator, IASTNode limiter, IASTNode node) {
 		IASTName lastName = declarator.getName();
 		Stack nodes = new Stack();
-		while(node.getParent() != null && node.getParent() != limiter) {
+		while (node.getParent() != null && node.getParent() != limiter) {
 			node = node.getParent();
 			if (node instanceof IASTCompositeTypeSpecifier) {
 				nodes.push(((IASTCompositeTypeSpecifier) node).copy(CopyStyle.withLocations));
 				lastName = ((IASTCompositeTypeSpecifier) node).getName();
-			}
-			else if (node instanceof ICPPASTNamespaceDefinition) {
+			} else if (node instanceof ICPPASTNamespaceDefinition) {
 				nodes.push(((ICPPASTNamespaceDefinition) node).copy(CopyStyle.withLocations));
 				lastName = ((ICPPASTNamespaceDefinition) node).getName();
-			}
-			else if (shouldAddTemplateBrackets(node)) {
+			} else if (shouldAddTemplateBrackets(node)) {
 				if (!nodes.isEmpty())
 					nodes.pop();
 				ICPPASTTemplateId templateID = ToggleNodeHelper.getTemplateParameter(node, lastName);
@@ -315,40 +308,48 @@ public class ToggleNodeHelper extends NodeHelper {
 		return templateID;
 	}
 
-	static IASTTranslationUnit getSiblingFile(IFile file, IASTTranslationUnit asttu) throws CoreException {
+	/**
+	 * @deprecated Use SourceHeaderPartnerHelper
+	 */
+	@Deprecated
+	static IASTTranslationUnit getSiblingFile(IFile file, IASTTranslationUnit ast) throws CoreException {
 		ICProject cProject = CoreModel.getDefault().create(file).getCProject();
 		ICProject[] projects = CoreModel.getDefault().getCModel().getCProjects();
 		IIndex projectIndex = CCorePlugin.getIndexManager().getIndex(projects);
 		try {
 			projectIndex.acquireReadLock();
 
-			IIndexFile thisFile = projectIndex.getFile(asttu.getLinkage().getLinkageID(),
+			IIndexFile[] thisFileVariants = projectIndex.getFiles(ast.getLinkage().getLinkageID(),
 					IndexLocationFactory.getWorkspaceIFL(file));
 			String fileName = ToggleNodeHelper.getFilenameWithoutExtension(
 					file.getFullPath().toString());
-			if (asttu.isHeaderUnit()) {
-				for (IIndexInclude include : projectIndex.findIncludedBy(thisFile)) {
-					if (ToggleNodeHelper.getFilenameWithoutExtension(include.getIncludedBy().getLocation().getFullPath()).equals(fileName)) {
-						ITranslationUnit tu = CoreModelUtil.findTranslationUnitForLocation(include.getIncludedBy().getLocation().getURI(), cProject);
-						return tu.getAST(projectIndex, ITranslationUnit.AST_SKIP_ALL_HEADERS);
+			if (ast.isHeaderUnit()) {
+				for (IIndexFile thisFile : thisFileVariants) {
+					for (IIndexInclude include : projectIndex.findIncludedBy(thisFile)) {
+						if (ToggleNodeHelper.getFilenameWithoutExtension(include.getIncludedBy().getLocation().getFullPath()).equals(fileName)) {
+							ITranslationUnit tu = CoreModelUtil.findTranslationUnitForLocation(include.getIncludedBy().getLocation().getURI(), cProject);
+							return tu.getAST(projectIndex, ITranslationUnit.AST_SKIP_ALL_HEADERS);
+						}
 					}
 				}
 			} else {
-				for (IIndexInclude include : projectIndex.findIncludes(thisFile)) {
-					if (ToggleNodeHelper.getFilenameWithoutExtension(include.getFullName()).equals(fileName)) {
-						if (include.getIncludesLocation() == null){
-							throw new NotSupportedException("The include file does not exist"); //$NON-NLS-1$
+				for (IIndexFile thisFile : thisFileVariants) {
+					for (IIndexInclude include : projectIndex.findIncludes(thisFile)) {
+						if (ToggleNodeHelper.getFilenameWithoutExtension(include.getFullName()).equals(fileName)) {
+							if (include.getIncludesLocation() == null){
+								throw new NotSupportedException("The include file does not exist"); //$NON-NLS-1$
+							}
+							String loc = include.getIncludesLocation().getFullPath();
+		                	ICElement tufile = CoreModel.getDefault().create(new Path(loc));
+		                	if (tufile instanceof TranslationUnit) {
+		                		return ((TranslationUnit) tufile).getAST(null, ITranslationUnit.AST_SKIP_ALL_HEADERS);
+		                	}
 						}
-						String loc = include.getIncludesLocation().getFullPath();
-	                	ICElement tufile = CoreModel.getDefault().create(new Path(loc));
-	                	if (tufile instanceof TranslationUnit) {
-	                		   return ((TranslationUnit) tufile).getAST(null, ITranslationUnit.AST_SKIP_ALL_HEADERS);
-	                	}
 					}
 				}
 			}
-		}catch (InterruptedException e) {
-			e.printStackTrace();
+		} catch (InterruptedException e) {
+			// Ignore
 		} finally {
 			projectIndex.releaseReadLock();
  		}
@@ -403,16 +404,16 @@ public class ToggleNodeHelper extends NodeHelper {
 			ModificationCollector modifications) {
 		String leadingComments = getCommentsAsString(getLeadingCommentsFromNode(oldDefinition.getBody(),
 				oldUnit, modifications));
-		String trailingComments = getCommentsAsString(getTrailingComments(oldDefinition.getBody(), oldUnit,
-				modifications));
+		String trailingComments = getCommentsAsString(getTrailingComments(oldDefinition.getBody(),
+				oldUnit, modifications));
 		return leadingComments + oldDefinition.getBody().getRawSignature() + trailingComments;
 	}
 
 	private static String getCatchHandlers(IASTFunctionDefinition oldDefinition, IASTTranslationUnit oldUnit,
 			ModificationCollector modifications) {
 		if (oldDefinition instanceof ICPPASTFunctionWithTryBlock) {
-			ICPPASTCatchHandler[] oldCatches = ((ICPPASTFunctionWithTryBlock) oldDefinition)
-					.getCatchHandlers();
+			ICPPASTCatchHandler[] oldCatches =
+					((ICPPASTFunctionWithTryBlock) oldDefinition).getCatchHandlers();
 			String allCatchHandlers = ""; //$NON-NLS-1$
 			for (int i = 0; i < oldCatches.length; i++) {
 				String lead = getCommentsAsString(getLeadingCommentsFromNode(oldCatches[i], oldUnit,
@@ -437,16 +438,13 @@ public class ToggleNodeHelper extends NodeHelper {
 		return rw.getComments(existingNode, CommentPosition.trailing);
 	}
 
-	
-	public static IASTNode getParentTemplateDeclaration(
-			IASTNode def) {
+	public static IASTNode getParentTemplateDeclaration(IASTNode def) {
 		if (def == null)
 			return null;
 		IASTNode lastSeen = def;
 		IASTNode node = def.getParent();
 		while (node != null) {
-			if (node instanceof ICPPASTTemplateDeclaration || 
-					node instanceof IASTSimpleDeclaration) {
+			if (node instanceof ICPPASTTemplateDeclaration || node instanceof IASTSimpleDeclaration) {
 				lastSeen = node;
 				node = node.getParent();
 				continue;
@@ -466,7 +464,7 @@ public class ToggleNodeHelper extends NodeHelper {
 
 	@SuppressWarnings("unchecked")
 	public static  T getAncestorOfType(IASTNode node, Class T) {
-		while(node != null) {
+		while (node != null) {
 			if (T.isInstance(node)) {
 				return (T) node;
 			}
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleRefactoringContext.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleRefactoringContext.java
index a263af8246c..8db57ec62f2 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleRefactoringContext.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/togglefunction/ToggleRefactoringContext.java
@@ -7,7 +7,7 @@
  * http://www.eclipse.org/legal/epl-v10.html  
  * 
  * Contributors: 
- * 		Martin Schwab & Thomas Kallenberg - initial API and implementation 
+ * 	   Martin Schwab & Thomas Kallenberg - initial API and implementation 
  ******************************************************************************/
 package org.eclipse.cdt.internal.ui.refactoring.togglefunction;
 
@@ -33,7 +33,6 @@ import org.eclipse.cdt.internal.ui.refactoring.IndexToASTNameHelper;
 import org.eclipse.cdt.internal.ui.refactoring.utils.TranslationUnitHelper;
 
 public class ToggleRefactoringContext {
-
 	private IASTFunctionDefinition targetDefinition;
 	private IASTFunctionDeclarator targetDeclaration;
 	private IASTTranslationUnit targetDefinitionUnit;
@@ -79,7 +78,7 @@ public class ToggleRefactoringContext {
 				throw new NotSupportedException(
 						Messages.ToggleRefactoringContext_MultipleDeclarations);
 			for (IIndexName iname : decnames) {
-				selectionUnit = getTUForNameinFile(iname);
+				selectionUnit = getTUForNameInFile(iname);
 				IASTName astname = IndexToASTNameHelper.findMatchingASTName(
 						selectionUnit, iname, index);
 				if (astname != null) {
@@ -100,9 +99,8 @@ public class ToggleRefactoringContext {
 				throw new NotSupportedException(Messages.ToggleRefactoringContext_MultipleDefinitions);
 			}
 			for (IIndexName iname : defnames) {
-				IASTTranslationUnit unit = getTUForNameinFile(iname);
-				IASTName astname = IndexToASTNameHelper.findMatchingASTName(
-						unit, iname, index);
+				IASTTranslationUnit unit = getTUForNameInFile(iname);
+				IASTName astname = IndexToASTNameHelper.findMatchingASTName(unit, iname, index);
 				if (astname != null) {
 					targetDefinition = findFunctionDefinition(astname);
 					targetDefinitionUnit = unit;
@@ -150,15 +148,14 @@ public class ToggleRefactoringContext {
 	
 	private void findSelectionUnit() {
 		try {
-			selectionUnit = TranslationUnitHelper.loadTranslationUnit(
-					selectionFile, true);
+			selectionUnit = TranslationUnitHelper.loadTranslationUnit(selectionFile, true);
 		} catch (Exception e) {
 		}
 		if (selectionUnit == null)
 			throw new NotSupportedException(Messages.ToggleRefactoringContext_NoTuFound);
 	}
 
-	private IASTTranslationUnit getTUForNameinFile(IIndexName iname)
+	private IASTTranslationUnit getTUForNameInFile(IIndexName iname)
 			throws CModelException, CoreException {
 		if (isSameFileAsInTU(iname)) {
 			return selectionUnit;
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/utils/FileHelper.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/utils/FileHelper.java
index f80c9d54e4f..f32fbfdfd39 100644
--- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/utils/FileHelper.java
+++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/refactoring/utils/FileHelper.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008 Institute for Software, HSR Hochschule fuer Technik  
+ * Copyright (c) 2008, 2011 Institute for Software, HSR Hochschule fuer Technik  
  * Rapperswil, University of applied sciences and others
  * All rights reserved. This program and the accompanying materials 
  * are made available under the terms of the Eclipse Public License v1.0 
@@ -7,7 +7,7 @@
  * http://www.eclipse.org/legal/epl-v10.html  
  *  
  * Contributors: 
- *    Institute for Software - initial API and implementation
+ *     Institute for Software - initial API and implementation
  *******************************************************************************/
 package org.eclipse.cdt.internal.ui.refactoring.utils;
 
@@ -22,11 +22,10 @@ import org.eclipse.cdt.core.dom.ast.IASTNode;
  * Helper class concerning files.
  * 
  * @author Lukas Felber
- *
  */
 public class FileHelper {
 
-	public static IFile getIFilefromIASTNode(IASTNode node) {
+	public static IFile getFileFromNode(IASTNode node) {
 		IPath implPath = new Path(node.getContainingFilename());
 		return ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(implPath);
 	}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java
index 22aa785ba20..8efc39bfd21 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/disassembly/dsf/AbstractDisassemblyBackend.java
@@ -8,12 +8,16 @@
  * Contributors:
  *     Wind River Systems - initial API and implementation
  *     Freescale Semiconductor - refactoring
- *     Patrick Chuong (Texas Instruments) - Bug fix (329682)
+ *     Patrick Chuong (Texas Instruments) - Bug 329682
+ *     Patrick Chuong (Texas Instruments) - Bug 353351
  *******************************************************************************/
 package org.eclipse.cdt.debug.internal.ui.disassembly.dsf;
 
 import java.math.BigInteger;
 
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.dialogs.ErrorDialog;
+
 public abstract class AbstractDisassemblyBackend implements IDisassemblyBackend {
 
 	protected IDisassemblyPartCallback fCallback;
@@ -46,4 +50,17 @@ public abstract class AbstractDisassemblyBackend implements IDisassemblyBackend
     	return null;
 	}
 
+	/**
+	 * Default error handler, sub-class can override this method to provide it's own error handling.
+	 *  
+	 * @param status
+	 */
+	protected void handleError(final IStatus status) {
+		fCallback.asyncExec(new Runnable() {
+			@Override
+			public void run() {
+				ErrorDialog.openError(fCallback.getSite().getShell(), "Error", null, status); //$NON-NLS-1$
+			}
+		});				
+	}
 }
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/pinclone/DebugEventFilterService.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/pinclone/DebugEventFilterService.java
index 1e7a4f20ad6..5687cadbdc7 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/pinclone/DebugEventFilterService.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/pinclone/DebugEventFilterService.java
@@ -7,9 +7,11 @@
  *
  * Contributors:
  *     Patrick Chuong (Texas Instruments) - Pin and Clone Supports (331781)
+ *     Patrick Chuong (Texas Instruments) - Bug 358135
  *****************************************************************/
 package org.eclipse.cdt.debug.internal.ui.pinclone;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -20,6 +22,7 @@ import org.eclipse.debug.ui.contexts.IDebugContextListener;
 import org.eclipse.debug.ui.contexts.IDebugContextService;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.ui.IWorkbenchPart;
 
 /**
@@ -45,16 +48,18 @@ public class DebugEventFilterService {
 		public void debugContextChanged(DebugContextEvent event) {
 			ISelection eventContext = event.getContext();
 			if (eventContext instanceof IStructuredSelection) {
-				
+				List filteredContextList = new ArrayList();
 				List eventContextList = ((IStructuredSelection)eventContext).toList();
 				for (Object o : eventContextList) {
 					if (fProvider.isPinnedTo(o)) {
 						if (fProvider != event.getDebugContextProvider()) {
-							fProvider.delegateEvent(new DebugContextEvent(fProvider, event.getContext(), event.getFlags()));
+							filteredContextList.add(o);
 						}
-						return;
 					}
 				}
+				if (filteredContextList.size() > 0) {
+					fProvider.delegateEvent(new DebugContextEvent(fProvider, new StructuredSelection(filteredContextList), event.getFlags()));
+				}
 			}
  		}
 		
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbSuspendTrigger.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbSuspendTrigger.java
index 81197bbe27c..97fdfd168e0 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbSuspendTrigger.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/GdbSuspendTrigger.java
@@ -15,7 +15,7 @@ import java.util.concurrent.RejectedExecutionException;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.IDMContext;
 import org.eclipse.cdt.dsf.debug.service.IProcesses;
 import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext;
@@ -50,7 +50,7 @@ public class GdbSuspendTrigger extends DsfSuspendTrigger {
 
                     processService.getProcessesBeingDebugged(
                         controlService.getContext(),
-                        new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+                        new ImmediateDataRequestMonitor(rm) {
                             @Override
                             public void handleSuccess() {
                                 IContainerDMContext[] containers = new IContainerDMContext[getData().length];
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/actions/DsfTerminateCommand.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/actions/DsfTerminateCommand.java
index 41f99bf76ff..f233aa6b6cf 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/actions/DsfTerminateCommand.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/actions/DsfTerminateCommand.java
@@ -13,11 +13,10 @@ package org.eclipse.cdt.dsf.gdb.internal.ui.actions;
 
 import java.util.concurrent.RejectedExecutionException;
 
-import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
-import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.debug.service.IProcesses;
 import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext;
@@ -73,7 +72,7 @@ public class DsfTerminateCommand implements ITerminateHandler {
                             request.setEnabled(false);
                             request.done();
                         } else {
-                        	procService.canTerminate(processDmc, new DataRequestMonitor(ImmediateExecutor.getInstance(), null) {
+                        	procService.canTerminate(processDmc, new ImmediateDataRequestMonitor() {
                         		@Override
                         		protected void handleCompleted() {
                         			request.setEnabled(isSuccess() && getData());
@@ -110,7 +109,7 @@ public class DsfTerminateCommand implements ITerminateHandler {
                 public void run() {
                 	IProcesses procService = fTracker.getService(IProcesses.class);
                     if (procService != null) {
-                    	procService.terminate(processDmc, new RequestMonitor(ImmediateExecutor.getInstance(), null) {
+                    	procService.terminate(processDmc, new ImmediateRequestMonitor() {
                             @Override
                             protected void handleCompleted() {
                                 request.setStatus(getStatus());
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/actions/GdbConnectCommand.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/actions/GdbConnectCommand.java
index 5efdb462c77..ff72cce4a54 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/actions/GdbConnectCommand.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/actions/GdbConnectCommand.java
@@ -24,7 +24,7 @@ import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.IDMContext;
@@ -400,11 +400,11 @@ public class GdbConnectCommand implements IConnect {
     		// We need to create a new list so that we can remove elements from it.
     		final List procList = new ArrayList(Arrays.asList(processes));
 
-    		class AttachToProcessRequestMonitor extends DataRequestMonitor {
+    		class AttachToProcessRequestMonitor extends ImmediateDataRequestMonitor {
     			public AttachToProcessRequestMonitor() {
-    				super(ImmediateExecutor.getInstance(), null);
+    				super();
     			}
-
+    			
     			@Override
     			protected void handleCompleted() {
     				if (!isSuccess()) {
@@ -417,7 +417,7 @@ public class GdbConnectCommand implements IConnect {
     					// Check that we can actually attach to the process.
     					// This is because some backends may not support multi-process.
     					// If the backend does not support multi-process, we only attach to the first process.
-    					procService.isDebuggerAttachSupported(controlDmc, new DataRequestMonitor(ImmediateExecutor.getInstance(), null) {
+    					procService.isDebuggerAttachSupported(controlDmc, new ImmediateDataRequestMonitor() {
     						@Override
     						protected void handleCompleted() {
     							if (isSuccess() && getData()) {
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/GdbThreadFilterEditor.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/GdbThreadFilterEditor.java
index 76fda1458b0..8fb3b63a6ba 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/GdbThreadFilterEditor.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/breakpoints/GdbThreadFilterEditor.java
@@ -20,7 +20,7 @@ import java.util.concurrent.RejectedExecutionException;
 import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.datamodel.IDMContext;
@@ -464,7 +464,7 @@ public class GdbThreadFilterEditor {
                 if (processService != null && procDmc != null) {
                 	processService.getExecutionData(
                             procDmc,
-                            new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+                            new ImmediateDataRequestMonitor(rm) {
                                 @Override
                                 public void handleSuccess() {
                                     final StringBuilder builder = new StringBuilder(getData().getName());
@@ -517,8 +517,7 @@ public class GdbThreadFilterEditor {
                 IProcesses procService = tracker.getService(IProcesses.class);
                 if (procService != null) {
                     IThreadDMContext threadDmc = DMContexts.getAncestorOfType(thread, IThreadDMContext.class);
-                	procService.getExecutionData(threadDmc, new DataRequestMonitor(
-                        ImmediateExecutor.getInstance(), rm) {
+                	procService.getExecutionData(threadDmc, new ImmediateDataRequestMonitor(rm) {
                         @Override
                         protected void handleSuccess() {
                             final StringBuilder builder = new StringBuilder(Messages.GdbThreadFilterEditor_Thread);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectNextTraceRecordCommand.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectNextTraceRecordCommand.java
index 16a99f54cb3..30a1b7a9158 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectNextTraceRecordCommand.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectNextTraceRecordCommand.java
@@ -16,9 +16,8 @@ import java.util.concurrent.RejectedExecutionException;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
-import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.gdb.internal.commands.ISelectNextTraceRecordHandler;
 import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin;
@@ -87,7 +86,7 @@ public class GdbSelectNextTraceRecordCommand extends AbstractDebugCommand implem
        							    // Bug 347514
 						            fSession.dispatchEvent(new TraceRecordSelectedChangedEvent(nextDmc), new Hashtable());
 						            
-						            traceControl.selectTraceRecord(nextDmc, new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+						            traceControl.selectTraceRecord(nextDmc, new ImmediateRequestMonitor(rm) {
 						            	@Override
 						            	protected void handleError() {
 						            		// If we weren't able to select the next record, we must notify that we are still on the previous one
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectPrevTraceRecordCommand.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectPrevTraceRecordCommand.java
index ca98c4fac31..764b7a2c233 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectPrevTraceRecordCommand.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/commands/GdbSelectPrevTraceRecordCommand.java
@@ -16,14 +16,13 @@ import java.util.concurrent.RejectedExecutionException;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
-import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.gdb.internal.commands.ISelectPrevTraceRecordHandler;
 import org.eclipse.cdt.dsf.gdb.internal.ui.GdbUIPlugin;
-import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl;
 import org.eclipse.cdt.dsf.gdb.service.GDBTraceControl_7_2.TraceRecordSelectedChangedEvent;
+import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl;
 import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceRecordDMContext;
 import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceStatusDMData;
 import org.eclipse.cdt.dsf.gdb.service.IGDBTraceControl.ITraceTargetDMContext;
@@ -81,7 +80,7 @@ public class GdbSelectPrevTraceRecordCommand extends AbstractDebugCommand implem
        							@Override
        							protected void handleSuccess() {
        							 final ITraceRecordDMContext prevDmc = traceControl.createPrevRecordContext(getData());
-       							 traceControl.selectTraceRecord(prevDmc, new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+       							 traceControl.selectTraceRecord(prevDmc, new ImmediateRequestMonitor(rm) {
        							     @Override
        							     protected void handleSuccess() {
        							         fSession.dispatchEvent(new TraceRecordSelectedChangedEvent(prevDmc), new Hashtable());
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/tracepoints/TraceControlView.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/tracepoints/TraceControlView.java
index 95f758b1820..1e6a127eb14 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/tracepoints/TraceControlView.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb.ui/src/org/eclipse/cdt/dsf/gdb/internal/ui/tracepoints/TraceControlView.java
@@ -20,7 +20,7 @@ import java.util.concurrent.TimeoutException;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -291,7 +291,7 @@ public class TraceControlView extends ViewPart implements IViewPart, SessionEnde
 						final IGDBTraceControl traceControl = getService(IGDBTraceControl.class);
 						if (traceControl != null) {
 							ITraceRecordDMContext emptyDmc = traceControl.createTraceRecordContext(ctx, "-1"); //$NON-NLS-1$
-							traceControl.selectTraceRecord(emptyDmc, new RequestMonitor(ImmediateExecutor.getInstance(), null));
+							traceControl.selectTraceRecord(emptyDmc, new ImmediateRequestMonitor());
 						}
 					}
 				});
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence.java
index 9805cecc1bc..9ab997480a6 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence.java
@@ -21,7 +21,7 @@ import org.eclipse.cdt.debug.core.CDebugUtils;
 import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
 import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.ReflectionSequence;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
@@ -375,7 +375,7 @@ public class FinalLaunchSequence extends ReflectionSequence {
 				fCommandControl.queueCommand(
 						fCommandFactory.createMITargetSelect(fCommandControl.getContext(), 
 								remoteTcpHost, remoteTcpPort, true), 
-								new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+								new ImmediateDataRequestMonitor(rm));
 			} else {
 				String serialDevice = CDebugUtils.getAttribute(
 						fAttributes,
@@ -384,7 +384,7 @@ public class FinalLaunchSequence extends ReflectionSequence {
 				fCommandControl.queueCommand(
 						fCommandFactory.createMITargetSelect(fCommandControl.getContext(), 
 								serialDevice, true), 
-								new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+								new ImmediateDataRequestMonitor(rm));
 			}
 		} else {
 			rm.done();
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence_7_2.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence_7_2.java
index b1bf6cea197..ae5cdd7ad35 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence_7_2.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/FinalLaunchSequence_7_2.java
@@ -16,9 +16,8 @@ import java.util.List;
 import java.util.Map;
 
 import org.eclipse.cdt.debug.core.CDebugUtils;
-import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
 import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants;
@@ -96,6 +95,6 @@ public class FinalLaunchSequence_7_2 extends FinalLaunchSequence {
 
 		fGdbControl.queueCommand(
 				fGdbControl.getCommandFactory().createMIGDBSetDetachOnFork(fGdbControl.getContext(), !debugOnFork), 
-				new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+				new ImmediateDataRequestMonitor(rm));
 	}
 }
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java
index 50cc957fdfa..699795ae7e6 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/launching/GdbLaunch.java
@@ -20,6 +20,7 @@ import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
 import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Sequence;
 import org.eclipse.cdt.dsf.concurrent.ThreadSafe;
@@ -186,7 +187,7 @@ public class GdbLaunch extends DsfLaunch
     ///////////////////////////////////////////////////////////////////////////
     // IServiceEventListener
     @DsfServiceEventHandler public void eventDispatched(ICommandControlShutdownDMEvent event) {
-        shutdownSession(new RequestMonitor(ImmediateExecutor.getInstance(), null));
+        shutdownSession(new ImmediateRequestMonitor());
     }
 
     ///////////////////////////////////////////////////////////////////////////
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence.java
index 33da8c405e4..e296382dcea 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence.java
@@ -18,7 +18,7 @@ import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.ReflectionSequence;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -181,7 +181,7 @@ public class DebugNewProcessSequence extends ReflectionSequence {
 		if (!noFileCommand && fBinaryName != null && fBinaryName.length() > 0) {
 			fCommandControl.queueCommand(
 					fCommandFactory.createMIFileExecAndSymbols(getContainerContext(), fBinaryName), 
-					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+					new ImmediateDataRequestMonitor(rm));
 		} else {
 			rm.done();
 		}
@@ -199,7 +199,7 @@ public class DebugNewProcessSequence extends ReflectionSequence {
 				String[] argArray = args.replaceAll("\n", " ").split(" ");  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				fCommandControl.queueCommand(
 						fCommandFactory.createMIGDBSetArgs(getContainerContext(), argArray), 
-						new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+						new ImmediateDataRequestMonitor(rm));
 			} else {
 				rm.done();
 			}
@@ -239,7 +239,7 @@ public class DebugNewProcessSequence extends ReflectionSequence {
 				fCommandControl.queueCommand(
 						fCommandFactory.createMITargetSelect(fCommandControl.getContext(), 
 								remoteTcpHost, remoteTcpPort, false), 
-								new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+								new ImmediateDataRequestMonitor(rm));
 			} else {
 				String serialDevice = CDebugUtils.getAttribute(
 						fAttributes,
@@ -247,7 +247,7 @@ public class DebugNewProcessSequence extends ReflectionSequence {
 				fCommandControl.queueCommand(
 						fCommandFactory.createMITargetSelect(fCommandControl.getContext(), 
 								serialDevice, false), 
-								new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+								new ImmediateDataRequestMonitor(rm));
 			}
 		} else {
 			rm.done();
@@ -405,7 +405,7 @@ public class DebugNewProcessSequence extends ReflectionSequence {
 			// Bug 342351
 			fAttributes.put(ICDTLaunchConfigurationConstants.ATTR_PROGRAM_NAME, fBinaryName);
 			
-			fProcService.start(getContainerContext(), fAttributes, new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+			fProcService.start(getContainerContext(), fAttributes, new ImmediateDataRequestMonitor(rm) {
 				@Override
 				protected void handleSuccess() {
 					assert getData() instanceof IMIContainerDMContext;
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence_7_2.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence_7_2.java
index a1790cbbb38..c7238712b59 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence_7_2.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/DebugNewProcessSequence_7_2.java
@@ -18,7 +18,7 @@ import java.util.Map;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.IDMContext;
 import org.eclipse.cdt.dsf.gdb.internal.GdbPlugin;
@@ -105,7 +105,7 @@ public class DebugNewProcessSequence_7_2 extends DebugNewProcessSequence {
 		
 		fGdbControl.queueCommand(
 				fGdbControl.getCommandFactory().createMIAddInferior(fGdbControl.getContext()),
-				new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+				new ImmediateDataRequestMonitor(rm) {
 					@Override
 					protected void handleSuccess() {
 						final String groupId = getData().getGroupId();
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend.java
index 1eb1c639fd0..eac33c71b7f 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBackend.java
@@ -30,7 +30,7 @@ import org.eclipse.cdt.core.model.ICProject;
 import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Sequence;
 import org.eclipse.cdt.dsf.gdb.IGDBLaunchConfigurationConstants;
@@ -130,7 +130,7 @@ public class GDBBackend extends AbstractDsfService implements IGDBBackend {
 	
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
-        super.initialize( new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+        super.initialize(new ImmediateRequestMonitor(requestMonitor) {
             @Override
             protected void handleSuccess() {
                 doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_0.java
index 92d975b92f1..e2d7c2d325f 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_0.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_0.java
@@ -17,7 +17,7 @@ import java.util.Map;
 
 import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Sequence.Step;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -63,7 +63,7 @@ public class GDBBreakpoints_7_0 extends MIBreakpoints
 	 */
 	@Override
 	public void initialize(final RequestMonitor rm) {
-		super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		super.initialize(new ImmediateRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				doInitialize(rm);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_2.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_2.java
index 0fdb7b704a6..1ed6a835f44 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_2.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBBreakpoints_7_2.java
@@ -16,7 +16,8 @@ import java.util.Hashtable;
 import java.util.Map;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.IDMContext;
 import org.eclipse.cdt.dsf.debug.service.IBreakpoints;
@@ -57,7 +58,7 @@ public class GDBBreakpoints_7_2 extends GDBBreakpoints_7_0
 	 */
 	@Override
 	public void initialize(final RequestMonitor rm) {
-		super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		super.initialize(new ImmediateRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				doInitialize(rm);
@@ -186,7 +187,7 @@ public class GDBBreakpoints_7_2 extends GDBBreakpoints_7_0
 		// Unless we should only set slow tracepoints, we try to set a fast tracepoint.
 		boolean isFastTracepoint = fTracepointMode != TracepointMode.SLOW_ONLY;
 
-		sendTracepointCommand(context, attributes, isFastTracepoint, new DataRequestMonitor(ImmediateExecutor.getInstance(), drm) {
+		sendTracepointCommand(context, attributes, isFastTracepoint, new ImmediateDataRequestMonitor(drm) {
 			@Override
 			protected void handleSuccess() {
 				// Tracepoint was set successfully.
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBMemory_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBMemory_7_0.java
index d5dfdf8f288..ca41e2bf729 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBMemory_7_0.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBMemory_7_0.java
@@ -14,7 +14,7 @@ import java.util.Hashtable;
 
 import org.eclipse.cdt.core.IAddress;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.datamodel.IDMContext;
@@ -37,7 +37,7 @@ public class GDBMemory_7_0 extends MIMemory {
 	@Override
 	public void initialize(final RequestMonitor requestMonitor) {
 		super.initialize(
-				new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) { 
+				new ImmediateRequestMonitor(requestMonitor) { 
 					@Override
 					public void handleSuccess() {
 						doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java
index d3b7e7349fb..9bedab2a588 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses.java
@@ -22,7 +22,9 @@ import org.eclipse.cdt.debug.core.CDebugUtils;
 import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Sequence;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -99,7 +101,7 @@ public class GDBProcesses extends MIProcesses implements IGDBProcesses {
 
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
-    	super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+    	super.initialize(new ImmediateRequestMonitor(requestMonitor) {
     		@Override
     		protected void handleSuccess() {
     			doInitialize(requestMonitor);
@@ -231,12 +233,12 @@ public class GDBProcesses extends MIProcesses implements IGDBProcesses {
     public void attachDebuggerToProcess(final IProcessDMContext procCtx, String binaryPath, final DataRequestMonitor rm) {
 		final IMIContainerDMContext containerDmc = createContainerContext(procCtx, MIProcesses.UNIQUE_GROUP_ID);
 
-		DataRequestMonitor attachRm = new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		DataRequestMonitor attachRm = new ImmediateDataRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				GDBProcesses.super.attachDebuggerToProcess(
 						procCtx, 
-						new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+						new ImmediateDataRequestMonitor(rm) {
 							@Override
 							protected void handleSuccess() {
 								// For an attach, we actually know the pid, so let's remember it
@@ -369,7 +371,7 @@ public class GDBProcesses extends MIProcesses implements IGDBProcesses {
 		} else if (thread instanceof IMIProcessDMContext) {
 			getDebuggingContext(
 					thread, 
-					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+					new ImmediateDataRequestMonitor(rm) {
 						@Override
 						protected void handleSuccess() {
 							if (getData() instanceof IMIContainerDMContext) {
@@ -381,7 +383,7 @@ public class GDBProcesses extends MIProcesses implements IGDBProcesses {
 								final IMIContainerDMContext container = (IMIContainerDMContext)getData();
 								fGdb.queueCommand(
 										fCommandFactory.createMIInterpreterExecConsoleKill(container),
-										new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+										new ImmediateDataRequestMonitor(rm) {
 											@Override
 											protected void handleSuccess() {
 												// Before GDB 7.0, we must send a container exited event ourselves
@@ -479,7 +481,7 @@ public class GDBProcesses extends MIProcesses implements IGDBProcesses {
     			// Tell GDB to use this PTY
     			fGdb.queueCommand(
     					fCommandFactory.createMIInferiorTTYSet((IMIContainerDMContext)containerDmc, fPty.getSlaveName()), 
-    					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+    					new ImmediateDataRequestMonitor(rm) {
     						@Override
     						protected void handleFailure() {
     							// We were not able to tell GDB to use the PTY
@@ -498,7 +500,7 @@ public class GDBProcesses extends MIProcesses implements IGDBProcesses {
 	 * @since 4.0
 	 */
 	protected void createConsole(final IContainerDMContext containerDmc, final boolean restart, final RequestMonitor rm) {
-		initializeInputOutput(containerDmc, new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		initializeInputOutput(containerDmc, new ImmediateRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				Process inferiorProcess;
@@ -556,7 +558,7 @@ public class GDBProcesses extends MIProcesses implements IGDBProcesses {
     		return;
     	}
     	
-    	createConsole(containerDmc, restart, new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+    	createConsole(containerDmc, restart, new ImmediateRequestMonitor(requestMonitor) {
     		@Override
     		protected void handleSuccess() {
     			final DataRequestMonitor execMonitor = new DataRequestMonitor(getExecutor(), requestMonitor) {
@@ -639,7 +641,7 @@ public class GDBProcesses extends MIProcesses implements IGDBProcesses {
     				IGdbDebugPreferenceConstants.PREF_AUTO_TERMINATE_GDB,
     				true, null)) {
     			// If the inferior finishes, let's terminate GDB
-    			fGdb.terminate(new RequestMonitor(ImmediateExecutor.getInstance(), null));
+    			fGdb.terminate(new ImmediateRequestMonitor());
     		}
     	}
     	super.eventDispatched(e);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java
index 832e2d1881e..ce8a1b8243f 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_0.java
@@ -25,7 +25,9 @@ import org.eclipse.cdt.core.IProcessInfo;
 import org.eclipse.cdt.core.IProcessList;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Immutable;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Sequence;
@@ -496,7 +498,7 @@ public class GDBProcesses_7_0 extends AbstractDsfService
      */
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
-    	super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+    	super.initialize(new ImmediateRequestMonitor(requestMonitor) {
     		@Override
     		protected void handleSuccess() {
     			doInitialize(requestMonitor);
@@ -840,7 +842,7 @@ public class GDBProcesses_7_0 extends AbstractDsfService
 	    						if (binaryPath != null) {
     				    			fCommandControl.queueCommand(
     				    					fCommandFactory.createMIFileExecAndSymbols(fContainerDmc, binaryPath), 
-			    							new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+			    							new ImmediateDataRequestMonitor(rm));
     				    			return;
 	    						}
 
@@ -1196,7 +1198,7 @@ public class GDBProcesses_7_0 extends AbstractDsfService
    		} else if (thread instanceof IMIProcessDMContext) {
 			getDebuggingContext(
 					thread, 
-					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+					new ImmediateDataRequestMonitor(rm) {
 						@Override
 						protected void handleSuccess() {
 							if (getData() instanceof IMIContainerDMContext) {
@@ -1207,7 +1209,7 @@ public class GDBProcesses_7_0 extends AbstractDsfService
 
 								fCommandControl.queueCommand(
 										fCommandFactory.createMIInterpreterExecConsoleKill((IMIContainerDMContext)getData()),
-										new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+										new ImmediateDataRequestMonitor(rm));
 							} else {
 					            rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Invalid process context.", null)); //$NON-NLS-1$
 					            rm.done();								
@@ -1279,7 +1281,7 @@ public class GDBProcesses_7_0 extends AbstractDsfService
 		final String groupId = ((IMIContainerDMContext)containerDmc).getGroupId();
 		
 		// This request monitor actually performs the restart
-		RequestMonitor restartRm = new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		RequestMonitor restartRm = new ImmediateRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				// For a restart, we are given the container context of the original process.  However, we want to start
@@ -1287,7 +1289,7 @@ public class GDBProcesses_7_0 extends AbstractDsfService
 				// Pass in the groupId because starting with GDB 7.2, we must re-use the same groupId.
 				IContainerDMContext newContainerDmc = createContainerContextForRestart(groupId);
 
-				startOrRestart(newContainerDmc, attributes, true, new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+				startOrRestart(newContainerDmc, attributes, true, new ImmediateDataRequestMonitor(rm) {
 					@Override
 					protected void handleCompleted() {
 						if (!isSuccess()) {
@@ -1414,7 +1416,7 @@ public class GDBProcesses_7_0 extends AbstractDsfService
     				// We also do this for a remote attach session, since the 'auto terminate' preference
     				// is enabled.  If users want to keep the session alive to attach to another process,
     				// they can simply disable that preference
-    				fCommandControl.terminate(new RequestMonitor(ImmediateExecutor.getInstance(), null));
+    				fCommandControl.terminate(new ImmediateRequestMonitor());
     			}
     		}
     		fProcRestarting = false;
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_1.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_1.java
index 372a37bf842..89939c30ece 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_1.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_1.java
@@ -11,7 +11,8 @@
 package org.eclipse.cdt.dsf.gdb.service;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Immutable;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -74,7 +75,7 @@ public class GDBProcesses_7_1 extends GDBProcesses_7_0 {
 
 	@Override
 	public void initialize(final RequestMonitor requestMonitor) {
-		super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+		super.initialize(new ImmediateRequestMonitor(requestMonitor) {
 			@Override
 			protected void handleSuccess() {
 				doInitialize(requestMonitor);
@@ -125,7 +126,7 @@ public class GDBProcesses_7_1 extends GDBProcesses_7_0 {
 			// running on (each core that has a thread of that process).
 			// We have to use -list-thread-groups to obtain that information
 			// Note that -list-thread-groups does not show the 'user' field
-			super.getExecutionData(dmc, new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+			super.getExecutionData(dmc, new ImmediateDataRequestMonitor(rm) {
 				@Override
 				protected void handleSuccess() {
 					final IThreadDMData firstLevelData = getData();
@@ -135,7 +136,7 @@ public class GDBProcesses_7_1 extends GDBProcesses_7_0 {
 
 					fCommandForCoresCache.execute(
 							fCommandFactory.createMIListThreadGroups(controlDmc),
-							new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+							new ImmediateDataRequestMonitor(rm) {
 								@Override
 								protected void handleCompleted() {
 									String[] cores = null;
@@ -165,7 +166,7 @@ public class GDBProcesses_7_1 extends GDBProcesses_7_0 {
 
 			ICommandControlDMContext controlDmc = DMContexts.getAncestorOfType(dmc, ICommandControlDMContext.class);
 			fCommandForCoresCache.execute(fCommandFactory.createMIThreadInfo(controlDmc, threadDmc.getId()),
-					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+					new ImmediateDataRequestMonitor(rm) {
 				        @Override
 			          	protected void handleSuccess() {
 				        	IThreadDMData threadData = null;
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_2.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_2.java
index 3dda911eef5..d9ab8bc5851 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_2.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBProcesses_7_2.java
@@ -18,7 +18,9 @@ import java.util.Set;
 import org.eclipse.cdt.debug.core.CDebugUtils;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Sequence;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -93,7 +95,7 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
 
 	@Override
 	public void initialize(final RequestMonitor requestMonitor) {
-		super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+		super.initialize(new ImmediateRequestMonitor(requestMonitor) {
 			@Override
 			protected void handleSuccess() {
 				doInitialize(requestMonitor);
@@ -204,7 +206,7 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
 		            	    	ICommandControlDMContext controlDmc = DMContexts.getAncestorOfType(procCtx, ICommandControlDMContext.class);
 		            	        fCommandControl.queueCommand(
 		            	        		fCommandFactory.createMIAddInferior(controlDmc),
-		            	        		new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		            	        		new ImmediateDataRequestMonitor(rm) {
 		            	        			@Override
 		            	        			protected void handleSuccess() {
 		            	        				final String groupId = getData().getGroupId();
@@ -237,7 +239,7 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
 		                    				ICommandControlDMContext controlDmc = DMContexts.getAncestorOfType(procCtx, ICommandControlDMContext.class);
 		                    				fCommandControl.queueCommand(
 		                    						fCommandFactory.createMITargetDisconnect(controlDmc),
-		                    						new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		                    						new ImmediateDataRequestMonitor(rm) {
 		                    							@Override
 		                    							protected void handleSuccess() {
 		                    								fNeedToReconnect = true;
@@ -259,7 +261,7 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
 	    						if (binaryPath != null) {
     				    			fCommandControl.queueCommand(
     				    					fCommandFactory.createMIFileExecAndSymbols(fContainerDmc, binaryPath), 
-			    							new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+			    							new ImmediateDataRequestMonitor(rm) {
     				    						@Override
     				    						protected void handleCompleted() {
     						                    	// Because of a GDB 7.2 bug, for remote-attach sessions,
@@ -306,7 +308,7 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
 
 	    						fCommandControl.queueCommand(
 	    								fCommandFactory.createMITargetAttach(fContainerDmc, ((IMIProcessDMContext)procCtx).getProcId(), shouldInterrupt),
-		    							new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+		    							new ImmediateDataRequestMonitor(rm));
 		                    }
 		                },
                     	// Start tracking this process' breakpoints.
@@ -389,7 +391,7 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
 				fCommandControl.queueCommand(
 						fCommandFactory.createMITargetSelect(fCommandControl.getContext(), 
 								remoteTcpHost, remoteTcpPort, true), 
-								new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+								new ImmediateDataRequestMonitor(rm));
 			} else {
 				String serialDevice = CDebugUtils.getAttribute(
 						attributes,
@@ -398,7 +400,7 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
 				fCommandControl.queueCommand(
 						fCommandFactory.createMITargetSelect(fCommandControl.getContext(), 
 								serialDevice, true), 
-								new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+								new ImmediateDataRequestMonitor(rm));
 			}
 		} else {
     		rm.setStatus(new Status(IStatus.ERROR, GdbPlugin.PLUGIN_ID, INTERNAL_ERROR, "Cannot reconnect to target.", null)); //$NON-NLS-1$
@@ -522,7 +524,7 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
 	public void restart(final IContainerDMContext containerDmc, Map attributes,
             			DataRequestMonitor rm) {
 		fProcRestarting.add(containerDmc);
-		super.restart(containerDmc, attributes, new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		super.restart(containerDmc, attributes, new ImmediateDataRequestMonitor(rm) {
 			@Override
 			protected void handleCompleted() {
 				if (!isSuccess()) {
@@ -546,7 +548,7 @@ public class GDBProcesses_7_2 extends GDBProcesses_7_1 {
     				IBreakpointsTargetDMContext bpTargetDmc = DMContexts.getAncestorOfType(dmc, IBreakpointsTargetDMContext.class);
     				MIBreakpointsManager bpmService = getServicesTracker().getService(MIBreakpointsManager.class);
     				if (bpmService != null) {
-    					bpmService.stopTrackingBreakpoints(bpTargetDmc, new RequestMonitor(ImmediateExecutor.getInstance(), null) {
+    					bpmService.stopTrackingBreakpoints(bpTargetDmc, new ImmediateRequestMonitor() {
     						@Override
     						protected void handleCompleted() {
     							// Ok, no need to report any error because we may have already shutdown.
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl.java
index 93460d916b9..4b474bf9eea 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl.java
@@ -20,7 +20,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.datamodel.IDMContext;
@@ -94,7 +94,7 @@ public class GDBRunControl extends MIRunControl {
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
         super.initialize(
-            new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) { 
+            new ImmediateRequestMonitor(requestMonitor) { 
                 @Override
                 public void handleSuccess() {
                     doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0.java
index 501778f5fab..828839d1d43 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0.java
@@ -19,7 +19,7 @@ package org.eclipse.cdt.dsf.gdb.service;
 import java.util.Hashtable;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.datamodel.IDMContext;
@@ -100,7 +100,7 @@ public class GDBRunControl_7_0 extends MIRunControl implements IReverseRunContro
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
         super.initialize(
-            new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) { 
+            new ImmediateRequestMonitor(requestMonitor) { 
                 @Override
                 public void handleSuccess() {
                     doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0_NS.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0_NS.java
index 6ed20f6db4a..622df2cf472 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0_NS.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_0_NS.java
@@ -23,7 +23,10 @@ import org.eclipse.cdt.core.IAddress;
 import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
+import org.eclipse.cdt.dsf.concurrent.ImmediateCountingRequestMonitor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Immutable;
 import org.eclipse.cdt.dsf.concurrent.MultiRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
@@ -373,7 +376,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo
 
 	@Override
 	public void initialize(final RequestMonitor rm) {
-		super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		super.initialize(new ImmediateRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				doInitialize(rm);
@@ -1102,7 +1105,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo
 		
 		// This RM propagates any error to the original rm of the actual steps.
 		// Even in case of errors for these steps, we want to continue the overall sequence
-		RequestMonitor stepsRm = new RequestMonitor(ImmediateExecutor.getInstance(), null) {
+		RequestMonitor stepsRm = new ImmediateRequestMonitor() {
 			@Override
 			protected void handleCompleted() {
 				info.rm.setStatus(getStatus());
@@ -1212,7 +1215,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo
 			// If the process is running, get its first thread which we will need to suspend
 			fProcessService.getProcessesBeingDebugged(
 					containerDmc,
-					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+					new ImmediateDataRequestMonitor(rm) {
 						@Override
 						protected void handleSuccess() {
 							IDMContext[] threads = getData();
@@ -1234,7 +1237,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo
 			// and need to be interrupted
 			fProcessService.getProcessesBeingDebugged(
 					fConnection.getContext(),
-					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+					new ImmediateDataRequestMonitor(rm) {
 						@Override
 						protected void handleSuccess() {
 							assert getData() != null;
@@ -1246,7 +1249,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo
 							} else {
 								// Go through every process to see if it is running.
 								// If it is running, get its first thread so we can interrupt it.
-								CountingRequestMonitor crm = new CountingRequestMonitor(ImmediateExecutor.getInstance(), rm);
+								CountingRequestMonitor crm = new ImmediateCountingRequestMonitor(rm);
 								
 								int numThreadsToSuspend = 0;
 								for (IDMContext dmc : getData()) {
@@ -1271,7 +1274,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo
 		@Override
 		public void execute(final RequestMonitor rm) {
 			// Interrupt every first thread of the running processes
-			CountingRequestMonitor crm = new CountingRequestMonitor(ImmediateExecutor.getInstance(), rm);
+			CountingRequestMonitor crm = new ImmediateCountingRequestMonitor(rm);
 			crm.setDoneCount(fExecutionDmcToSuspendSet.size());
 			
 			for (final IMIExecutionDMContext thread : fExecutionDmcToSuspendSet) {
@@ -1282,7 +1285,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo
 				fDisableNextSignalEventDmcSet.add(thread);
 
 				suspend(thread,
-						new RequestMonitor(ImmediateExecutor.getInstance(), crm) {
+						new ImmediateRequestMonitor(crm) {
 					@Override
 					protected void handleFailure() {
 						// We weren't able to suspend, so abort the operation
@@ -1345,7 +1348,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo
 		@Override
 		public void execute(final RequestMonitor rm) {
 			// Resume every thread we had interrupted
-			CountingRequestMonitor crm = new CountingRequestMonitor(ImmediateExecutor.getInstance(), rm);
+			CountingRequestMonitor crm = new ImmediateCountingRequestMonitor(rm);
 			crm.setDoneCount(fExecutionDmcToSuspendSet.size());
 			
 			for (final IMIExecutionDMContext thread : fExecutionDmcToSuspendSet) {
@@ -1357,7 +1360,7 @@ public class GDBRunControl_7_0_NS extends AbstractDsfService implements IMIRunCo
 				// so resume() will not know we are actually stopped
 				fConnection.queueCommand(
 						fCommandFactory.createMIExecContinue(thread),
-						new DataRequestMonitor(ImmediateExecutor.getInstance(), crm) {
+						new ImmediateDataRequestMonitor(crm) {
 							@Override
 							protected void handleSuccess() {
 								fSilencedSignalEventMap.remove(thread);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_2_NS.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_2_NS.java
index 43a6fb51e31..637cda00901 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_2_NS.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBRunControl_7_2_NS.java
@@ -14,7 +14,8 @@ package org.eclipse.cdt.dsf.gdb.service;
 import java.util.Hashtable;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.debug.service.IRunControl;
@@ -59,7 +60,7 @@ public class GDBRunControl_7_2_NS extends GDBRunControl_7_0_NS
 
 	@Override
 	public void initialize(final RequestMonitor rm) {
-		super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		super.initialize(new ImmediateRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				doInitialize(rm);
@@ -113,7 +114,7 @@ public class GDBRunControl_7_2_NS extends GDBRunControl_7_0_NS
 			return;
 		}
 
-		canSuspend(context, new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		canSuspend(context, new ImmediateDataRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				if (getData()) {
@@ -142,7 +143,7 @@ public class GDBRunControl_7_2_NS extends GDBRunControl_7_0_NS
 			return;
 		}
 
-		canResume(context, new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		canResume(context, new ImmediateDataRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				if (getData()) {
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBTraceControl_7_2.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBTraceControl_7_2.java
index 95981034d11..1f7a2dfb1aa 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBTraceControl_7_2.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/GDBTraceControl_7_2.java
@@ -13,7 +13,7 @@ package org.eclipse.cdt.dsf.gdb.service;
 import java.util.Hashtable;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Immutable;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.AbstractDMContext;
@@ -396,7 +396,7 @@ public class GDBTraceControl_7_2 extends AbstractDsfService implements IGDBTrace
 	 */
 	@Override
 	public void initialize(final RequestMonitor requestMonitor) {
-		super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+		super.initialize(new ImmediateRequestMonitor(requestMonitor) {
 			@Override
 			protected void handleSuccess() {
 				doInitialize(requestMonitor);
@@ -698,7 +698,7 @@ public class GDBTraceControl_7_2 extends AbstractDsfService implements IGDBTrace
     							// of the frame when we load a trace file.
     							// To get around this, we can force a select of record 0
     							final ITraceRecordDMContext initialRecord = createTraceRecordContext(context, "0"); //$NON-NLS-1$
-    							selectTraceRecord(initialRecord, new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+    							selectTraceRecord(initialRecord, new ImmediateRequestMonitor(rm) {
     							    @Override
     							    protected void handleSuccess() {
     							        // This event will indicate to the other services that we are visualizing trace data.
@@ -1045,7 +1045,7 @@ public class GDBTraceControl_7_2 extends AbstractDsfService implements IGDBTrace
 	public void getTraceRecordData(final ITraceRecordDMContext context, final DataRequestMonitor rm) {
     	if (context instanceof MITraceRecordDMContext) {
     		
-    		RequestMonitor tdumpRm = new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+    		RequestMonitor tdumpRm = new ImmediateRequestMonitor(rm) {
 				@Override
 				protected void handleSuccess() {
 					fConnection.queueCommand(
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/StartOrRestartProcessSequence_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/StartOrRestartProcessSequence_7_0.java
index 9cfcdf91429..c45a8314e46 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/StartOrRestartProcessSequence_7_0.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/StartOrRestartProcessSequence_7_0.java
@@ -20,7 +20,7 @@ import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.ReflectionSequence;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -203,7 +203,7 @@ public class StartOrRestartProcessSequence_7_0 extends ReflectionSequence {
 
 			fCommandControl.queueCommand(
 					fCommandFactory.createMIBreakInsert(bpTargetDmc, true, false, null, 0, userStopSymbol, 0),
-					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+					new ImmediateDataRequestMonitor(rm) {
 						@Override
 						public void handleSuccess() {
 							if (getData() != null) {
@@ -234,7 +234,7 @@ public class StartOrRestartProcessSequence_7_0 extends ReflectionSequence {
 			fCommandControl.queueCommand(
 					fCommandFactory.createMIBreakInsert(bpTargetDmc, true, false, null, 0, 
 							ICDTLaunchConfigurationConstants.DEBUGGER_STOP_AT_MAIN_SYMBOL_DEFAULT, 0),
-					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+					new ImmediateDataRequestMonitor(rm) {
 						@Override
 						public void handleSuccess() {
 							if (getData() != null) {
@@ -274,7 +274,7 @@ public class StartOrRestartProcessSequence_7_0 extends ReflectionSequence {
     			// Tell GDB to use this PTY
     			fCommandControl.queueCommand(
     					fCommandFactory.createMIInferiorTTYSet((IMIContainerDMContext)getContainerContext(), fPty.getSlaveName()), 
-    					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+    					new ImmediateDataRequestMonitor(rm) {
     						@Override
     						protected void handleFailure() {
     							// We were not able to tell GDB to use the PTY
@@ -373,7 +373,7 @@ public class StartOrRestartProcessSequence_7_0 extends ReflectionSequence {
 		} else {
 			command = fCommandFactory.createMIExecRun(fContainerDmc);	
 		}
-		fCommandControl.queueCommand(command, new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		fCommandControl.queueCommand(command, new ImmediateDataRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				// Now that the process is started, the pid has been allocated
@@ -429,7 +429,7 @@ public class StartOrRestartProcessSequence_7_0 extends ReflectionSequence {
 	public void stepContinue(RequestMonitor rm) {
 		if (fReverseEnabled && !fUserBreakpointIsOnMain) {
 			fCommandControl.queueCommand(fCommandFactory.createMIExecContinue(fContainerDmc),
-					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm));
+					new ImmediateDataRequestMonitor(rm));
 		} else {
 			rm.done();
 		}
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java
index 1ee3a24197a..926b948a333 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl.java
@@ -30,6 +30,7 @@ import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
 import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
 import org.eclipse.cdt.dsf.concurrent.Sequence;
@@ -43,10 +44,10 @@ import org.eclipse.cdt.dsf.gdb.service.IGDBBackend;
 import org.eclipse.cdt.dsf.gdb.service.IGDBProcesses;
 import org.eclipse.cdt.dsf.mi.service.IMIBackend;
 import org.eclipse.cdt.dsf.mi.service.IMIBackend.BackendStateChangedEvent;
-import org.eclipse.cdt.dsf.mi.service.MIProcesses.ContainerExitedDMEvent;
 import org.eclipse.cdt.dsf.mi.service.IMICommandControl;
 import org.eclipse.cdt.dsf.mi.service.IMIRunControl;
 import org.eclipse.cdt.dsf.mi.service.MIProcesses;
+import org.eclipse.cdt.dsf.mi.service.MIProcesses.ContainerExitedDMEvent;
 import org.eclipse.cdt.dsf.mi.service.command.AbstractCLIProcess;
 import org.eclipse.cdt.dsf.mi.service.command.AbstractMIControl;
 import org.eclipse.cdt.dsf.mi.service.command.CLIEventProcessor;
@@ -119,7 +120,7 @@ public class GDBControl extends AbstractMIControl implements IGDBControl {
     
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
-        super.initialize( new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+        super.initialize( new ImmediateRequestMonitor(requestMonitor) {
             @Override
             protected void handleSuccess() {
                 doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java
index 925bd514420..09c8cced6c4 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/command/GDBControl_7_0.java
@@ -30,6 +30,7 @@ import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
 import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitorWithProgress;
 import org.eclipse.cdt.dsf.concurrent.Sequence;
@@ -119,7 +120,7 @@ public class GDBControl_7_0 extends AbstractMIControl implements IGDBControl {
     
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
-        super.initialize( new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+        super.initialize(new ImmediateRequestMonitor(requestMonitor) {
             @Override
             protected void handleSuccess() {
                 doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/macos/MacOSGDBProcesses.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/macos/MacOSGDBProcesses.java
index 809e864be60..c27a31d0463 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/macos/MacOSGDBProcesses.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/macos/MacOSGDBProcesses.java
@@ -13,7 +13,7 @@ package org.eclipse.cdt.dsf.gdb.service.macos;
 
 import java.util.Hashtable;
 
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.debug.service.IProcesses;
 import org.eclipse.cdt.dsf.debug.service.IRunControl.ISuspendedDMEvent;
@@ -32,7 +32,7 @@ public class MacOSGDBProcesses extends GDBProcesses {
 	
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
-    	super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+    	super.initialize(new ImmediateRequestMonitor(requestMonitor) {
     		@Override
     		protected void handleSuccess() {
     			doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/macos/MacOSGDBRunControl.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/macos/MacOSGDBRunControl.java
index 28d744816c0..365e7e72000 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/macos/MacOSGDBRunControl.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/gdb/service/macos/MacOSGDBRunControl.java
@@ -14,7 +14,7 @@ package org.eclipse.cdt.dsf.gdb.service.macos;
 import java.util.Hashtable;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.debug.service.IRunControl;
@@ -42,7 +42,7 @@ public class MacOSGDBRunControl extends GDBRunControl {
 	
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
-    	super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+    	super.initialize(new ImmediateRequestMonitor(requestMonitor) {
     		@Override
     		protected void handleSuccess() {
     			doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/CSourceLookup.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/CSourceLookup.java
index 1454233582a..b93975d2c57 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/CSourceLookup.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/CSourceLookup.java
@@ -21,7 +21,7 @@ import org.eclipse.cdt.debug.core.sourcelookup.CProjectSourceContainer;
 import org.eclipse.cdt.debug.internal.core.sourcelookup.CSourceLookupDirector;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.debug.service.ISourceLookup;
 import org.eclipse.cdt.dsf.debug.service.command.ICommandControl;
@@ -126,7 +126,7 @@ public class CSourceLookup extends AbstractDsfService implements ISourceLookup {
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
         super.initialize(
-        		new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) { 
+        		new ImmediateRequestMonitor(requestMonitor) { 
         			@Override
         			protected void handleSuccess() {
         				doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java
index b33e7bc6ae8..c449af45af7 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpoints.java
@@ -20,7 +20,7 @@ import java.util.Map;
 
 import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Immutable;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Sequence.Step;
@@ -293,7 +293,7 @@ public class MIBreakpoints extends AbstractDsfService implements IBreakpoints, I
 	 */
 	@Override
 	public void initialize(final RequestMonitor rm) {
-		super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+		super.initialize(new ImmediateRequestMonitor(rm) {
 			@Override
 			protected void handleSuccess() {
 				doInitialize(rm);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java
index 137862e1d12..211992419e0 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIBreakpointsManager.java
@@ -41,7 +41,7 @@ import org.eclipse.cdt.debug.internal.core.breakpoints.BreakpointProblems;
 import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.ThreadSafe;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -229,7 +229,7 @@ public class MIBreakpointsManager extends AbstractDsfService implements IBreakpo
     @Override
     public void initialize(final RequestMonitor rm) {
         super.initialize(
-            new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+            new ImmediateRequestMonitor(rm) {
                 @Override
                 protected void handleSuccess() {
                     doInitialize(rm);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIDisassembly.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIDisassembly.java
index 3becb09437e..3486217ddde 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIDisassembly.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIDisassembly.java
@@ -15,7 +15,7 @@ import java.math.BigInteger;
 import java.util.Hashtable;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.debug.service.IDisassembly;
 import org.eclipse.cdt.dsf.debug.service.IInstruction;
@@ -54,7 +54,7 @@ public class MIDisassembly extends AbstractDsfService implements IDisassembly {
      */
     @Override
     public void initialize(final RequestMonitor rm) {
-        super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+        super.initialize(new ImmediateRequestMonitor(rm) {
             @Override
             protected void handleSuccess() {
                 doInitialize(rm);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIExpressions.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIExpressions.java
index a04b53bfa40..e0a567f4fdc 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIExpressions.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIExpressions.java
@@ -19,7 +19,7 @@ import java.util.Map;
 
 import org.eclipse.cdt.core.IAddress;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.AbstractDMContext;
 import org.eclipse.cdt.dsf.datamodel.AbstractDMEvent;
@@ -659,7 +659,7 @@ public class MIExpressions extends AbstractDsfService implements IMIExpressions,
 	 */
 	@Override
 	public void initialize(final RequestMonitor requestMonitor) {
-		super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+		super.initialize(new ImmediateRequestMonitor(requestMonitor) {
 			@Override
 			protected void handleSuccess() {
 				doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java
index 10b91870b10..8263718d4ee 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIMemory.java
@@ -24,7 +24,7 @@ import org.eclipse.cdt.core.IAddress;
 import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.AbstractDMEvent;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -119,7 +119,7 @@ public class MIMemory extends AbstractDsfService implements IMemory, ICachingSer
 	 */
 	@Override
     public void initialize(final RequestMonitor requestMonitor) {
-        super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+        super.initialize(new ImmediateRequestMonitor(requestMonitor) {
             @Override
             protected void handleSuccess() {
                 doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIModules.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIModules.java
index bb5d87155d8..177f9873ba9 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIModules.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIModules.java
@@ -16,7 +16,7 @@ import java.util.Hashtable;
 
 import org.eclipse.cdt.core.IAddress;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.AbstractDMContext;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -54,7 +54,7 @@ public class MIModules extends AbstractDsfService implements IModules, ICachingS
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
         super.initialize(
-            new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) { 
+            new ImmediateRequestMonitor(requestMonitor) { 
                 @Override
                 protected void handleSuccess() {
                     doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java
index 6ad7927ca05..0d3cdbac54c 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIProcesses.java
@@ -13,7 +13,7 @@ package org.eclipse.cdt.dsf.mi.service;
 import java.util.Map;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Immutable;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.AbstractDMContext;
@@ -356,7 +356,7 @@ public class MIProcesses extends AbstractDsfService implements IMIProcesses, ICa
      */
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
-    	super.initialize(new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) {
+    	super.initialize(new ImmediateRequestMonitor(requestMonitor) {
     		@Override
     		protected void handleSuccess() {
     			doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRegisters.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRegisters.java
index 1175f2fe37d..d808baf1c86 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRegisters.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRegisters.java
@@ -16,16 +16,16 @@ import java.util.Hashtable;
 import java.util.List;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.AbstractDMContext;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.datamodel.IDMContext;
 import org.eclipse.cdt.dsf.debug.service.ICachingService;
 import org.eclipse.cdt.dsf.debug.service.IExpressions;
+import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
 import org.eclipse.cdt.dsf.debug.service.IRegisters;
 import org.eclipse.cdt.dsf.debug.service.IRunControl;
-import org.eclipse.cdt.dsf.debug.service.IExpressions.IExpressionDMContext;
 import org.eclipse.cdt.dsf.debug.service.IRunControl.IContainerDMContext;
 import org.eclipse.cdt.dsf.debug.service.IRunControl.StateChangeReason;
 import org.eclipse.cdt.dsf.debug.service.command.BufferedCommandControl;
@@ -165,7 +165,7 @@ public class MIRegisters extends AbstractDsfService implements IRegisters, ICach
     @Override
     public void initialize(final RequestMonitor requestMonitor) {
         super.initialize(
-            new RequestMonitor(ImmediateExecutor.getInstance(), requestMonitor) { 
+            new ImmediateRequestMonitor(requestMonitor) { 
                 @Override
                 protected void handleSuccess() {
                     doInitialize(requestMonitor);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRunControl.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRunControl.java
index 9f536f9d7da..00d00abe18b 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRunControl.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIRunControl.java
@@ -20,6 +20,7 @@ import org.eclipse.cdt.core.IAddress;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
 import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Immutable;
 import org.eclipse.cdt.dsf.concurrent.MultiRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
@@ -397,7 +398,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I
     @Override
     public void initialize(final RequestMonitor rm) {
         super.initialize(
-            new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+            new ImmediateRequestMonitor(rm) {
                 @Override
                 protected void handleSuccess() {
                     doInitialize(rm);
@@ -1093,7 +1094,7 @@ public class MIRunControl extends AbstractDsfService implements IMIRunControl, I
 		
 		// This RM propagates any error to the original rm of the actual steps.
 		// Even in case of errors for these steps, we want to continue the overall sequence
-		RequestMonitor stepsRm = new RequestMonitor(ImmediateExecutor.getInstance(), null) {
+		RequestMonitor stepsRm = new ImmediateRequestMonitor() {
 			@Override
 			protected void handleCompleted() {
 				info.rm.setStatus(getStatus());
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIStack.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIStack.java
index 415e014fb52..df9861beb76 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIStack.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/MIStack.java
@@ -22,7 +22,7 @@ import java.util.Map;
 import org.eclipse.cdt.core.IAddress;
 import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.AbstractDMContext;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -189,7 +189,7 @@ public class MIStack extends AbstractDsfService
     @Override
     public void initialize(final RequestMonitor rm) {
         super.initialize(
-            new RequestMonitor(ImmediateExecutor.getInstance(), rm) { 
+            new ImmediateRequestMonitor(rm) { 
                 @Override
                 protected void handleSuccess() {
                     doInitialize(rm);
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIBackendCLIProcess.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIBackendCLIProcess.java
index aa29f802b4d..e28c5ca8611 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIBackendCLIProcess.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIBackendCLIProcess.java
@@ -22,7 +22,7 @@ import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.debug.service.command.ICommandControlService;
@@ -103,7 +103,7 @@ public class MIBackendCLIProcess extends AbstractCLIProcess {
                         rm.done();
                     } else {
                         fExitedEventListener.fWaitForRMs.add(
-                            new RequestMonitor(ImmediateExecutor.getInstance(), rm) {
+                            new ImmediateRequestMonitor(rm) {
                                 @Override
                                 protected void handleSuccess() {
                                     rm.setData(new Object());
diff --git a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIInferiorProcess.java b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIInferiorProcess.java
index a87b21a9eb5..7a128a82818 100644
--- a/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIInferiorProcess.java
+++ b/dsf-gdb/org.eclipse.cdt.dsf.gdb/src/org/eclipse/cdt/dsf/mi/service/command/MIInferiorProcess.java
@@ -26,9 +26,8 @@ import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DsfRunnable;
 import org.eclipse.cdt.dsf.concurrent.IDsfStatusConstants;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
-import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.ThreadSafe;
 import org.eclipse.cdt.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -353,7 +352,7 @@ public class MIInferiorProcess extends Process
         tracker.dispose();
         if (procService != null) {
         	IProcessDMContext procDmc = DMContexts.getAncestorOfType(fContainerDMContext, IProcessDMContext.class);
-        	procService.terminate(procDmc, new RequestMonitor(ImmediateExecutor.getInstance(), null));
+        	procService.terminate(procDmc, new ImmediateRequestMonitor());
         } else {
         	setTerminated();
         }
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java
index 6cba61a4162..85aad2d9988 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/framework/SyncUtil.java
@@ -20,7 +20,7 @@ import java.util.concurrent.TimeUnit;
 import junit.framework.Assert;
 
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
 import org.eclipse.cdt.dsf.concurrent.ThreadSafeAndProhibitedFromDsfExecutor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
@@ -378,7 +378,7 @@ public class SyncUtil {
     	Query query = new Query() {
             @Override
             protected void execute(final DataRequestMonitor rm) {
-                fStack.getFrames(execCtx, new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+                fStack.getFrames(execCtx, new ImmediateDataRequestMonitor(rm) {
                     @Override
                     protected void handleSuccess() {
                         if (getData().length > level) {
@@ -400,7 +400,7 @@ public class SyncUtil {
       	Query query = new Query() {
     		@Override
     		protected void execute(final DataRequestMonitor rm) {
-    			fStack.getFrames(execCtx, level, level, new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+    			fStack.getFrames(execCtx, level, level, new ImmediateDataRequestMonitor(rm) {
     				@Override
     				protected void handleSuccess() {
     					IFrameDMContext[] frameDmcs = getData();
@@ -557,7 +557,7 @@ public class SyncUtil {
 			protected void execute(final DataRequestMonitor rm) {
 				fProcessesService.getProcessesBeingDebugged(
             			fGdbControl.getContext(), 
-            			new DataRequestMonitor(ImmediateExecutor.getInstance(), null) {
+            			new ImmediateDataRequestMonitor() {
                     @Override
                     protected void handleCompleted() {
                     	if (isSuccess()) {
@@ -598,7 +598,7 @@ public class SyncUtil {
 			protected void execute(final DataRequestMonitor rm) {
 				fProcessesService.getProcessesBeingDebugged(
             			containerDmc, 
-            			new DataRequestMonitor(ImmediateExecutor.getInstance(), null) {
+            			new ImmediateDataRequestMonitor() {
                     @Override
                     protected void handleCompleted() {
                     	if (isSuccess()) {
@@ -638,7 +638,7 @@ public class SyncUtil {
 			protected void execute(final DataRequestMonitor rm) {
 				fProcessesService.canRestart(
             			containerDmc,
-            			new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+            			new ImmediateDataRequestMonitor(rm) {
             				@Override
             				protected void handleSuccess() {
             					rm.setData(getData());
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRegistersTest.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRegistersTest.java
index 62645532a69..e3221e88f71 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRegistersTest.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/MIRegistersTest.java
@@ -21,7 +21,8 @@ import java.util.List;
 import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
 import org.eclipse.cdt.dsf.concurrent.CountingRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateCountingRequestMonitor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
 import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.CompositeDMContext;
@@ -250,13 +251,13 @@ public class MIRegistersTest extends BaseTestCase {
             protected void execute(DataRequestMonitor rm) {
                 final IRegisterDMData[] datas = new IRegisterDMData[regDMCs.length];
                 rm.setData(datas);
-                final CountingRequestMonitor countingRm = new CountingRequestMonitor(ImmediateExecutor.getInstance(), rm);
+                final CountingRequestMonitor countingRm = new ImmediateCountingRequestMonitor(rm);
                 countingRm.setDoneCount(regDMCs.length);
                 for (int i = 0; i < regDMCs.length; i++) {
                     final int index = i; 
                     fRegService.getRegisterData(
                         regDMCs[index], 
-                        new DataRequestMonitor(ImmediateExecutor.getInstance(), countingRm) {
+                        new ImmediateDataRequestMonitor(countingRm) {
                             @Override
                             protected void handleSuccess() {
                                 datas[index] = getData();
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/OperationsWhileTargetIsRunningTest.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/OperationsWhileTargetIsRunningTest.java
index 1bb9327f822..4d0e23c05f5 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/OperationsWhileTargetIsRunningTest.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/OperationsWhileTargetIsRunningTest.java
@@ -18,9 +18,8 @@ import java.util.concurrent.TimeoutException;
 
 import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
-import org.eclipse.cdt.dsf.concurrent.RequestMonitor;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.debug.service.IProcesses.IProcessDMContext;
 import org.eclipse.cdt.dsf.debug.service.IRunControl.IExitedDMEvent;
@@ -172,7 +171,7 @@ public class OperationsWhileTargetIsRunningTest extends BaseTestCase {
         Runnable runnable = new Runnable() {
             public void run() {
     	        IProcessDMContext processDmc = DMContexts.getAncestorOfType(fContainerDmc, IProcessDMContext.class);
-    	    	fProcesses.terminate(processDmc, new RequestMonitor(ImmediateExecutor.getInstance(), null));
+    	    	fProcesses.terminate(processDmc, new ImmediateRequestMonitor());
             }
         };
         fProcesses.getExecutor().execute(runnable);
@@ -260,7 +259,7 @@ public class OperationsWhileTargetIsRunningTest extends BaseTestCase {
         // But that is ok because we wait for a shutdown event right after
         Runnable runnable = new Runnable() {
             public void run() {
-    	    	fProcesses.detachDebuggerFromProcess(fContainerDmc, new RequestMonitor(ImmediateExecutor.getInstance(), null));
+    	    	fProcesses.detachDebuggerFromProcess(fContainerDmc, new ImmediateRequestMonitor());
             }
         };
         fProcesses.getExecutor().execute(runnable);
diff --git a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/LaunchConfigurationAndRestartTest_7_0.java b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/LaunchConfigurationAndRestartTest_7_0.java
index 2c0da703d59..77e3294d9ad 100644
--- a/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/LaunchConfigurationAndRestartTest_7_0.java
+++ b/dsf-gdb/org.eclipse.cdt.tests.dsf.gdb/src/org/eclipse/cdt/tests/dsf/gdb/tests/tests_7_0/LaunchConfigurationAndRestartTest_7_0.java
@@ -19,7 +19,7 @@ import java.util.concurrent.TimeoutException;
 
 import org.eclipse.cdt.debug.core.ICDTLaunchConfigurationConstants;
 import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
-import org.eclipse.cdt.dsf.concurrent.ImmediateExecutor;
+import org.eclipse.cdt.dsf.concurrent.ImmediateDataRequestMonitor;
 import org.eclipse.cdt.dsf.concurrent.Query;
 import org.eclipse.cdt.dsf.datamodel.DMContexts;
 import org.eclipse.cdt.dsf.debug.service.IBreakpoints.IBreakpointsTargetDMContext;
@@ -76,12 +76,12 @@ public class LaunchConfigurationAndRestartTest_7_0 extends LaunchConfigurationAn
     		protected void execute(final DataRequestMonitor rm) {
     			fGdbControl.queueCommand(
     					fGdbControl.getCommandFactory().createCLITrace(bpTargetDmc, "invalid", ""),
-    					new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+    					new ImmediateDataRequestMonitor(rm) {
     						@Override
     						protected void handleSuccess() {
     							fGdbControl.queueCommand(
     									fGdbControl.getCommandFactory().createMIBreakList(bpTargetDmc), 
-    									new DataRequestMonitor(ImmediateExecutor.getInstance(), rm) {
+    									new ImmediateDataRequestMonitor(rm) {
     			    						@Override
     			    						protected void handleSuccess() {
     			    							rm.setData(getData());
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
index 326aecac24f..19b84a4110c 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsf.java
@@ -9,8 +9,9 @@
  *     Wind River Systems - initial API and implementation
  *     Freescale Semiconductor - refactoring
  *     Patrick Chuong (Texas Instruments) - Bug 323279
- *     Patrick Chuong (Texas Instruments) - Bug fix (329682)
+ *     Patrick Chuong (Texas Instruments) - Bug 329682
  *     Patrick Chuong (Texas Instruments) - Bug 328168
+ *     Patrick Chuong (Texas Instruments) - Bug 353351
  *******************************************************************************/
 package org.eclipse.cdt.dsf.debug.internal.ui.disassembly;
 
@@ -67,7 +68,6 @@ import org.eclipse.cdt.dsf.ui.viewmodel.datamodel.IDMVMContext;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.dialogs.ErrorDialog;
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.Position;
 
@@ -336,11 +336,7 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements
 				} else {
 					final IStatus status= getStatus();
 					if (status != null && !status.isOK()) {
-						fCallback.asyncExec(new Runnable() {
-							public void run() {
-				                ErrorDialog.openError(fCallback.getSite().getShell(), "Error", null, getStatus()); //$NON-NLS-1$
-							}
-						});
+						DisassemblyBackendDsf.this.handleError(getStatus());
 					}
 				}
 			}
@@ -967,12 +963,8 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements
 							rm.setStatus(new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, IDsfStatusConstants.REQUEST_FAILED, "", null)); //$NON-NLS-1$
 							
 							if (!suppressError) {
-								fCallback.asyncExec(new Runnable() {
-									public void run() {
-						                ErrorDialog.openError(fCallback.getSite().getShell(), "Error", null,  //$NON-NLS-1$
-						                		new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, IDsfStatusConstants.REQUEST_FAILED, 
-						                		DisassemblyMessages.Disassembly_log_error_expression_eval + " (" + e.getMessage() + ")", null)); //$NON-NLS-1$ //$NON-NLS-2$
-									}});
+								DisassemblyBackendDsf.this.handleError(new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, IDsfStatusConstants.REQUEST_FAILED, 
+						                DisassemblyMessages.Disassembly_log_error_expression_eval + " (" + e.getMessage() + ")", null)); //$NON-NLS-1$ //$NON-NLS-2$
 							}							
 						}
 						rm.setData(address);
@@ -981,10 +973,7 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements
 					@Override
 					protected void handleError() {
 						if (!suppressError) {
-							fCallback.asyncExec(new Runnable() {
-								public void run() {
-					                ErrorDialog.openError(fCallback.getSite().getShell(), "Error", null, getStatus()); //$NON-NLS-1$
-								}});
+							DisassemblyBackendDsf.this.handleError(getStatus());
 						}
 						rm.setStatus(new Status(IStatus.ERROR, DsfUIPlugin.PLUGIN_ID, IDsfStatusConstants.REQUEST_FAILED, "", null)); //$NON-NLS-1$
 						rm.done();
@@ -1043,11 +1032,7 @@ public class DisassemblyBackendDsf extends AbstractDisassemblyBackend implements
 				} else {
 					final IStatus status= getStatus();
 					if (status != null && !status.isOK()) {
-						fCallback.asyncExec(new Runnable() {
-							public void run() {
-				                ErrorDialog.openError(fCallback.getSite().getShell(), "Error", null, getStatus()); //$NON-NLS-1$
-							}
-						});
+						DisassemblyBackendDsf.this.handleError(getStatus());
 					}
 					fCallback.setUpdatePending(false);
 				}
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsfFactory.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsfFactory.java
index 41b172ca4dd..b24b8189d49 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsfFactory.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/internal/ui/disassembly/DisassemblyBackendDsfFactory.java
@@ -7,10 +7,13 @@
  *
  * Contributors:
  *     Freescale Semiconductor - initial API and implementation
+ *     Patrick Chuong (Texas Instruments) - Bug 353351
  *******************************************************************************/
 package org.eclipse.cdt.dsf.debug.internal.ui.disassembly;
 
 import org.eclipse.cdt.debug.internal.ui.disassembly.dsf.IDisassemblyBackend;
+import org.eclipse.cdt.dsf.service.DsfSession;
+import org.eclipse.cdt.dsf.ui.viewmodel.datamodel.IDMVMContext;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.IAdapterFactory;
 
@@ -22,8 +25,18 @@ public class DisassemblyBackendDsfFactory implements IAdapterFactory {
 
 	@SuppressWarnings("rawtypes")
 	public Object getAdapter(Object adaptableObject, Class adapterType) {
-		if (IDisassemblyBackend.class.equals(adapterType)) {
+		if (IDisassemblyBackend.class.equals(adapterType)) {							
 			if (adaptableObject instanceof IAdaptable && DisassemblyBackendDsf.supportsDebugContext_((IAdaptable)adaptableObject)) {
+				String sessionId = ((IDMVMContext) adaptableObject).getDMContext().getSessionId();
+				DsfSession session = DsfSession.getSession(sessionId);
+				if (session.isActive()) {
+					IAdapterFactory factory = (IAdapterFactory) session.getModelAdapter(IAdapterFactory.class);
+					if (factory != null) {
+						Object adapter = factory.getAdapter(adaptableObject, adapterType);
+						if (adapter != null)
+							return adapter;
+					}
+				}
 				return new DisassemblyBackendDsf();
 			}
 		}
diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/ImmediateCountingRequestMonitor.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/ImmediateCountingRequestMonitor.java
new file mode 100644
index 00000000000..8d62b463852
--- /dev/null
+++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/ImmediateCountingRequestMonitor.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Tilera Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     William R. Swanson (Tilera) - initial API and implementation (Bug 365966)
+ *******************************************************************************/
+
+package org.eclipse.cdt.dsf.concurrent;
+
+/**
+ * Convenience extension of CountingRequestMonitor that uses the ImmediateExecutor.
+ * The handleCompleted() method is immediately executed in same thread as done() call.
+ * @since 2.3
+ */
+public class ImmediateCountingRequestMonitor extends CountingRequestMonitor
+{
+	/**
+	 * Constructor without a parent monitor and using ImmediateExecutor.
+	 */
+	public ImmediateCountingRequestMonitor() {
+		super(ImmediateExecutor.getInstance(), null);
+	}
+	
+	/**
+	 * Constructor with an optional parent monitor and using ImmediateExecutor.
+	 */
+	public ImmediateCountingRequestMonitor(RequestMonitor parentMonitor) {
+		super(ImmediateExecutor.getInstance(), parentMonitor);
+	}	
+}
diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/ImmediateDataRequestMonitor.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/ImmediateDataRequestMonitor.java
new file mode 100644
index 00000000000..4c28b6516d6
--- /dev/null
+++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/ImmediateDataRequestMonitor.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Tilera Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     William R. Swanson (Tilera) - initial API and implementation (Bug 365966)
+ *******************************************************************************/
+
+package org.eclipse.cdt.dsf.concurrent;
+
+/**
+ * Convenience extension of DataRequestMonitor that uses the ImmediateExecutor.
+ * The handleCompleted() method is immediately executed in same thread as done() call.
+ * @since 2.3
+ */
+public class ImmediateDataRequestMonitor extends DataRequestMonitor
+{
+	/**
+	 * Constructor without a parent monitor and using ImmediateExecutor.
+	 */
+	public ImmediateDataRequestMonitor() {
+		super(ImmediateExecutor.getInstance(), null);
+	}
+	
+	/**
+	 * Constructor with an optional parent monitor and using ImmediateExecutor.
+	 */
+	public ImmediateDataRequestMonitor(RequestMonitor parentMonitor) {
+		super(ImmediateExecutor.getInstance(), parentMonitor);
+	}	
+}
diff --git a/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/ImmediateRequestMonitor.java b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/ImmediateRequestMonitor.java
new file mode 100644
index 00000000000..22370e0339e
--- /dev/null
+++ b/dsf/org.eclipse.cdt.dsf/src/org/eclipse/cdt/dsf/concurrent/ImmediateRequestMonitor.java
@@ -0,0 +1,34 @@
+/*******************************************************************************
+ * Copyright (c) 2011 Tilera Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     William R. Swanson (Tilera) - initial API and implementation (Bug 365966)
+ *******************************************************************************/
+
+package org.eclipse.cdt.dsf.concurrent;
+
+/**
+ * Convenience extension of RequestMonitor that uses the ImmediateExecutor.
+ * The handleCompleted() method is immediately executed in same thread as done() call.
+ * @since 2.3
+ */
+public class ImmediateRequestMonitor extends RequestMonitor
+{
+	/**
+	 * Constructor without a parent monitor and using ImmediateExecutor.
+	 */
+	public ImmediateRequestMonitor() {
+		super(ImmediateExecutor.getInstance(), null);
+	}
+	
+	/**
+	 * Constructor with an optional parent monitor and using ImmediateExecutor.
+	 */
+	public ImmediateRequestMonitor(RequestMonitor parentMonitor) {
+		super(ImmediateExecutor.getInstance(), parentMonitor);
+	}	
+}
\ No newline at end of file
diff --git a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/ViewerUpdatesListener.java b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/ViewerUpdatesListener.java
index 33985c1d252..57cd986687b 100644
--- a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/ViewerUpdatesListener.java
+++ b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/ViewerUpdatesListener.java
@@ -22,7 +22,6 @@ import junit.framework.Assert;
 import org.eclipse.cdt.dsf.ui.viewmodel.properties.IPropertiesUpdate;
 import org.eclipse.cdt.dsf.ui.viewmodel.properties.IPropertiesUpdateListener;
 import org.eclipse.debug.internal.ui.viewers.model.ILabelUpdateListener;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenCountUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IChildrenUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IHasChildrenUpdate;
@@ -31,6 +30,7 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelChangedList
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelProxy;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IStateUpdateListener;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener;
 import org.eclipse.jface.viewers.TreePath;
diff --git a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/FormattedValueTests.java b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/FormattedValueTests.java
index d6a473cc30c..05ebab878fb 100644
--- a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/FormattedValueTests.java
+++ b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/FormattedValueTests.java
@@ -41,10 +41,10 @@ import org.eclipse.cdt.tests.dsf.IViewerUpdatesListenerConstants;
 import org.eclipse.cdt.tests.dsf.vm.TestModel.TestElement;
 import org.eclipse.cdt.tests.dsf.vm.TestModel.TestElementValidator;
 import org.eclipse.cdt.tests.dsf.vm.TestModel.TestEvent;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
 import org.eclipse.jface.viewers.TreePath;
 import org.eclipse.jface.viewers.ViewerLabel;
@@ -191,7 +191,7 @@ abstract public class FormattedValueTests extends TestCase implements IViewerUpd
         initQuery.get();
     }
     
-    abstract protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell);
+    abstract protected IInternalTreeModelViewer createViewer(Display display, Shell shell);
     
     /**
      * @throws java.lang.Exception
@@ -618,7 +618,7 @@ abstract public class FormattedValueTests extends TestCase implements IViewerUpd
     		int levelStop, int levelIndex, HashMap result) {
     	if (levelStop >= 0 && levelIndex >= levelStop)
     		return;
-    	ITreeModelContentProviderTarget viewer = (ITreeModelContentProviderTarget)_viewer;
+    	IInternalTreeModelViewer viewer = (IInternalTreeModelViewer)_viewer;
     	int childCount = viewer.getChildCount(path);
     	if (childCount == 0)
     		return;
diff --git a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/JFaceViewerFormattedValueTests.java b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/JFaceViewerFormattedValueTests.java
index c28a1b2d0be..89395446a20 100644
--- a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/JFaceViewerFormattedValueTests.java
+++ b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/JFaceViewerFormattedValueTests.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.cdt.tests.dsf.vm;
 
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
 import org.eclipse.swt.SWT;
@@ -27,7 +27,7 @@ public class JFaceViewerFormattedValueTests extends FormattedValueTests {
     }
 
     @Override
-    protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+    protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
         return new TreeModelViewer(fShell, SWT.VIRTUAL, new PresentationContext("TestViewer"));
     }
     
diff --git a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/JFaceViewerPerformanceTests.java b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/JFaceViewerPerformanceTests.java
index 2e77897d749..92c95149ac1 100644
--- a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/JFaceViewerPerformanceTests.java
+++ b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/JFaceViewerPerformanceTests.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.cdt.tests.dsf.vm;
 
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
 import org.eclipse.swt.SWT;
@@ -27,7 +27,7 @@ public class JFaceViewerPerformanceTests extends PerformanceTests {
     }
 
     @Override
-    protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+    protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
         return new TreeModelViewer(fShell, SWT.VIRTUAL, new PresentationContext("TestViewer"));
     }
     
diff --git a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/PerformanceTests.java b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/PerformanceTests.java
index 3438d076bcb..f20b44ce971 100644
--- a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/PerformanceTests.java
+++ b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/PerformanceTests.java
@@ -17,9 +17,9 @@ import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
 import org.eclipse.cdt.dsf.service.DsfSession;
 import org.eclipse.cdt.tests.dsf.IViewerUpdatesListenerConstants;
 import org.eclipse.cdt.tests.dsf.vm.TestModel.TestElement;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
 import org.eclipse.jface.viewers.TreePath;
 import org.eclipse.swt.layout.FillLayout;
@@ -73,7 +73,7 @@ abstract public class PerformanceTests extends TestCase implements IViewerUpdate
         fShell.open ();
     }
 
-    abstract protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell);
+    abstract protected IInternalTreeModelViewer createViewer(Display display, Shell shell);
     
     /**
      * @throws java.lang.Exception
diff --git a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/TestModel.java b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/TestModel.java
index 286d334889c..68abe9282eb 100644
--- a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/TestModel.java
+++ b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/TestModel.java
@@ -24,14 +24,13 @@ import org.eclipse.cdt.dsf.debug.service.IFormattedValues;
 import org.eclipse.cdt.dsf.service.AbstractDsfService;
 import org.eclipse.cdt.dsf.service.DsfSession;
 import org.eclipse.cdt.tests.dsf.DsfTestPlugin;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelCheckProviderTarget;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ICheckUpdate;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementCompareRequest;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IElementMementoRequest;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IModelDelta;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.ModelDelta;
 import org.eclipse.jface.viewers.TreePath;
 import org.osgi.framework.BundleContext;
@@ -297,7 +296,7 @@ public class TestModel extends AbstractDsfService implements IFormattedValues {
         }
     }
     
-    public TestElement getElementFromViewer(ITreeModelContentProviderTarget viewer, TreePath parentPath, int index) {
+    public TestElement getElementFromViewer(IInternalTreeModelViewer viewer, TreePath parentPath, int index) {
         Object element = viewer.getChildElement(parentPath, index);
         if (element instanceof TestElementVMContext) {
             return ((TestElementVMContext)element).getElement();
@@ -339,12 +338,11 @@ public class TestModel extends AbstractDsfService implements IFormattedValues {
 
     public void validateData(ITreeModelViewer _viewer, TreePath path, TestElementValidator validator, boolean expandedElementsOnly) {
         
-        ITreeModelContentProviderTarget viewer = (ITreeModelContentProviderTarget)_viewer;
+        IInternalTreeModelViewer viewer = (IInternalTreeModelViewer)_viewer;
         TestElement element = getElement(path);
         if ( Boolean.TRUE.equals(_viewer.getPresentationContext().getProperty(ICheckUpdate.PROP_CHECK)) ) {
-            ITreeModelCheckProviderTarget checkTarget = (ITreeModelCheckProviderTarget)_viewer;  
-            Assert.assertEquals(element.getChecked(), checkTarget.getElementChecked(path));
-            Assert.assertEquals(element.getGrayed(), checkTarget.getElementGrayed(path));
+            Assert.assertEquals(element.getChecked(), viewer.getElementChecked(path));
+            Assert.assertEquals(element.getGrayed(), viewer.getElementGrayed(path));
         }
         
         if (!expandedElementsOnly || path.getSegmentCount() == 0 || viewer.getExpandedState(path) ) {
diff --git a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/TestModelUpdatesListener.java b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/TestModelUpdatesListener.java
index a98d0a4f97f..24a67a91369 100644
--- a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/TestModelUpdatesListener.java
+++ b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/TestModelUpdatesListener.java
@@ -18,8 +18,8 @@ import java.util.TreeSet;
 
 import org.eclipse.cdt.tests.dsf.ViewerUpdatesListener;
 import org.eclipse.cdt.tests.dsf.vm.TestModel.TestElement;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.ITreeModelViewer;
 import org.eclipse.jface.viewers.TreePath;
 
 /**
@@ -138,7 +138,7 @@ public class TestModelUpdatesListener extends ViewerUpdatesListener
         addUpdates(path, element, levels, ALL_UPDATES_COMPLETE);
     }
 
-    public void addStateUpdates(ITreeModelContentProviderTarget viewer, TreePath path, TestElement element) {
+    public void addStateUpdates(IInternalTreeModelViewer viewer, TreePath path, TestElement element) {
         addUpdates(viewer, path, element, -1, STATE_UPDATES);
     }
     
@@ -146,7 +146,7 @@ public class TestModelUpdatesListener extends ViewerUpdatesListener
         addUpdates(null, path, element, levels, flags);
     }
 
-    public void addUpdates(ITreeModelContentProviderTarget viewer, TreePath path, TestElement element, int levels, int flags) {
+    public void addUpdates(IInternalTreeModelViewer viewer, TreePath path, TestElement element, int levels, int flags) {
         if (!path.equals(TreePath.EMPTY)) {
             if ((flags & LABEL_UPDATES) != 0) {
                 addLabelUpdate(path);
diff --git a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/VirtualViewerPerformanceTests.java b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/VirtualViewerPerformanceTests.java
index 91cca156730..a496bebb09b 100644
--- a/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/VirtualViewerPerformanceTests.java
+++ b/dsf/org.eclipse.cdt.tests.dsf/src/org/eclipse/cdt/tests/dsf/vm/VirtualViewerPerformanceTests.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.cdt.tests.dsf.vm;
 
-import org.eclipse.debug.internal.ui.viewers.model.ITreeModelContentProviderTarget;
+import org.eclipse.debug.internal.ui.viewers.model.IInternalTreeModelViewer;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.PresentationContext;
 import org.eclipse.debug.internal.ui.viewers.model.provisional.VirtualTreeModelViewer;
 import org.eclipse.swt.widgets.Display;
@@ -26,7 +26,7 @@ public class VirtualViewerPerformanceTests extends PerformanceTests {
     }
 
     @Override
-    protected ITreeModelContentProviderTarget createViewer(Display display, Shell shell) {
+    protected IInternalTreeModelViewer createViewer(Display display, Shell shell) {
         return new VirtualTreeModelViewer(fDisplay, 0, new PresentationContext("TestViewer"));
     }
     
diff --git a/pom.xml b/pom.xml
index 366c915af61..0758822d336 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,7 @@
 
 	
 		0.13.0
-		3.7
+		4.2milestones
 		http://download.eclipse.org/eclipse/updates/${platform-version}
 		R20110523182458
 		http://download.eclipse.org/tools/orbit/downloads/drops/${orbit-version}/repository