1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-01 05:15:43 +02:00

Improved Remove Unused Declarations refactoring.

Change-Id: Ibc011f9bacb8565463762f013738118eed839757
This commit is contained in:
Sergey Prigogin 2016-09-22 14:10:40 -07:00 committed by Gerrit Code Review @ Eclipse.org
parent 4470a7a5bb
commit fe0dcb5176

View file

@ -48,6 +48,7 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclarationStatement;
import org.eclipse.cdt.core.dom.ast.IASTDeclarator; import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier; import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTEnumerationSpecifier.IASTEnumerator;
import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator; import org.eclipse.cdt.core.dom.ast.IASTFunctionDeclarator;
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition; import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
import org.eclipse.cdt.core.dom.ast.IASTName; import org.eclipse.cdt.core.dom.ast.IASTName;
@ -357,15 +358,20 @@ public class RemoveUnusedDeclarationsRefactoring extends CRefactoring {
IASTName name = declarator.getName(); IASTName name = declarator.getName();
if (name instanceof ICPPASTConversionName || name instanceof ICPPASTOperatorName) if (name instanceof ICPPASTConversionName || name instanceof ICPPASTOperatorName)
return null; // Do not remove operators. return null; // Do not remove operators.
names.add(name); addNameIfNotEmpty(name, names);
} }
IASTDeclSpecifier declSpecifier = ((IASTSimpleDeclaration) declaration).getDeclSpecifier(); IASTDeclSpecifier declSpecifier = ((IASTSimpleDeclaration) declaration).getDeclSpecifier();
if (declSpecifier instanceof IASTCompositeTypeSpecifier) { if (declSpecifier instanceof IASTCompositeTypeSpecifier) {
names.add(((IASTCompositeTypeSpecifier) declSpecifier).getName()); addNameIfNotEmpty(((IASTCompositeTypeSpecifier) declSpecifier).getName(), names);
} else if (declSpecifier instanceof IASTElaboratedTypeSpecifier) { } else if (declSpecifier instanceof IASTElaboratedTypeSpecifier) {
names.add(((IASTElaboratedTypeSpecifier) declSpecifier).getName()); addNameIfNotEmpty(((IASTElaboratedTypeSpecifier) declSpecifier).getName(), names);
} else if (declSpecifier instanceof IASTEnumerationSpecifier) { } else if (declSpecifier instanceof IASTEnumerationSpecifier) {
names.add(((IASTEnumerationSpecifier) declSpecifier).getName()); IASTEnumerationSpecifier enumSpecifier = (IASTEnumerationSpecifier) declSpecifier;
IASTName name = enumSpecifier.getName();
addNameIfNotEmpty(name, names);
for (IASTEnumerator enumerator : enumSpecifier.getEnumerators()) {
addNameIfNotEmpty(enumerator.getName(), names);
}
} }
return names; return names;
} else if (declaration instanceof IASTFunctionDefinition) { } else if (declaration instanceof IASTFunctionDefinition) {
@ -387,6 +393,11 @@ public class RemoveUnusedDeclarationsRefactoring extends CRefactoring {
return null; return null;
} }
private static void addNameIfNotEmpty(IASTName name, List<IASTName> names) {
if (name.getSimpleID().length != 0)
names.add(name);
}
/** /**
* Returns the topmost non-template declaration declaring the given name, or {@code null} * Returns the topmost non-template declaration declaring the given name, or {@code null}
* if the name appears in a non-declaration context. * if the name appears in a non-declaration context.