From 149e41fd466429497125c03c81044c883d81a64a Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Wed, 21 Sep 2016 18:40:43 -0700 Subject: [PATCH] Improved code reduction refactorings. Change-Id: I2bee9e578810dd9ee1b23341a29713fc594d81f4 --- .../org/eclipse/cdt/ui/tests/reducer/ProblemFinder.java | 4 +++- .../ui/tests/reducer/RemoveFunctionBodiesRefactoring.java | 8 ++++++++ .../reducer/RemoveUnusedDeclarationsRefactoring.java | 5 +++-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/ProblemFinder.java b/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/ProblemFinder.java index c4e123ca056..82825d30f66 100644 --- a/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/ProblemFinder.java +++ b/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/ProblemFinder.java @@ -4,6 +4,7 @@ import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IProblemBinding; +import org.eclipse.cdt.core.parser.util.CharArrayUtils; class ProblemFinder extends ASTVisitor { boolean foundProblem; @@ -21,7 +22,8 @@ class ProblemFinder extends ASTVisitor { @Override public int visit(IASTName name) { - if (name.resolveBinding() instanceof IProblemBinding) { + if (!CharArrayUtils.startsWith(name.getSimpleID(), "__builtin_") + && name.resolveBinding() instanceof IProblemBinding) { foundProblem = true; return PROCESS_ABORT; } diff --git a/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/RemoveFunctionBodiesRefactoring.java b/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/RemoveFunctionBodiesRefactoring.java index 8a72e70f6ee..5a2da7bb723 100644 --- a/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/RemoveFunctionBodiesRefactoring.java +++ b/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/RemoveFunctionBodiesRefactoring.java @@ -17,6 +17,8 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.SubMonitor; +import org.eclipse.jface.text.IRegion; +import org.eclipse.jface.text.Region; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ltk.core.refactoring.Change; import org.eclipse.ltk.core.refactoring.RefactoringChangeDescriptor; @@ -56,6 +58,7 @@ import org.eclipse.cdt.internal.core.dom.rewrite.util.ASTNodes; import org.eclipse.cdt.internal.ui.refactoring.CRefactoring; import org.eclipse.cdt.internal.ui.refactoring.ModificationCollector; import org.eclipse.cdt.internal.ui.refactoring.changes.CCompositeChange; +import org.eclipse.cdt.internal.ui.refactoring.utils.SelectionHelper; public class RemoveFunctionBodiesRefactoring extends CRefactoring { private INodeFactory nodeFactory; @@ -63,6 +66,7 @@ public class RemoveFunctionBodiesRefactoring extends CRefactoring { private IIndex index; private IASTTranslationUnit ast; + private IRegion region; public RemoveFunctionBodiesRefactoring(ICElement element, ISelection selection, ICProject project) { super(element, selection, project); @@ -83,6 +87,8 @@ public class RemoveFunctionBodiesRefactoring extends CRefactoring { ast = getAST(tu, progress.newChild(1)); index = getIndex(); nodeFactory = ast.getASTNodeFactory(); + region = selectedRegion.getLength() == 0 ? + new Region(0, ast.getFileLocation().getNodeLength()) : selectedRegion; if (isProgressMonitorCanceled(progress, initStatus)) return initStatus; @@ -118,6 +124,8 @@ public class RemoveFunctionBodiesRefactoring extends CRefactoring { CTextFileChange fileChange = new CTextFileChange(tu.getElementName(), tu); fileChange.setEdit(new MultiTextEdit()); for (IASTFunctionDefinition definition : finder.functionDefinitions) { + if (!SelectionHelper.isNodeInsideRegion(definition, region)) + continue; IASTStatement body = definition.getBody(); IASTName name = definition.getDeclarator().getName(); IBinding binding = name.resolveBinding(); diff --git a/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/RemoveUnusedDeclarationsRefactoring.java b/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/RemoveUnusedDeclarationsRefactoring.java index 49df8e669e5..61a05a8172e 100644 --- a/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/RemoveUnusedDeclarationsRefactoring.java +++ b/core/org.eclipse.cdt.ui.tests/src/org/eclipse/cdt/ui/tests/reducer/RemoveUnusedDeclarationsRefactoring.java @@ -69,6 +69,7 @@ import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLambdaExpression; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTLinkageSpecification; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceAlias; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTNamespaceDefinition; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTOperatorName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateDeclaration; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTTemplateId; @@ -354,8 +355,8 @@ public class RemoveUnusedDeclarationsRefactoring extends CRefactoring { for (IASTDeclarator declarator : declarators) { declarator = findInnermostDeclarator(declarator); IASTName name = declarator.getName(); - if (name instanceof ICPPASTConversionName) - return null; // Do not remove conversion operators. + if (name instanceof ICPPASTConversionName || name instanceof ICPPASTOperatorName) + return null; // Do not remove operators. names.add(name); } IASTDeclSpecifier declSpecifier = ((IASTSimpleDeclaration) declaration).getDeclSpecifier();