mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
FIXED - bug 246058: [Refactoring] issues generating getters setters with 2 classes
https://bugs.eclipse.org/bugs/show_bug.cgi?id=246058
This commit is contained in:
parent
4cdb7e40c9
commit
507c732870
4 changed files with 71 additions and 10 deletions
|
@ -52,13 +52,15 @@ public class GenerateGettersAndSettersInputPage extends UserInputWizardPage {
|
||||||
variableSelectionView.setContentProvider(context);
|
variableSelectionView.setContentProvider(context);
|
||||||
variableSelectionView.setAutoExpandLevel(3);
|
variableSelectionView.setAutoExpandLevel(3);
|
||||||
variableSelectionView.setInput(""); //$NON-NLS-1$
|
variableSelectionView.setInput(""); //$NON-NLS-1$
|
||||||
|
if(context.selectedName != null) {
|
||||||
for(Object obj : variableSelectionView.getVisibleExpandedElements()) {
|
String rawSignature = context.selectedName.getRawSignature();
|
||||||
System.out.println();
|
for(Object obj : variableSelectionView.getVisibleExpandedElements()) {
|
||||||
if (obj instanceof FieldWrapper){
|
if (obj instanceof FieldWrapper){
|
||||||
if(obj.toString().contains(context.selectedName.getRawSignature())){
|
|
||||||
variableSelectionView.setSubtreeChecked(obj, true);
|
if(obj.toString().contains(rawSignature)){
|
||||||
}
|
variableSelectionView.setSubtreeChecked(obj, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ArrayList<GetterSetterInsertEditProvider> checkedFunctions = new ArrayList<GetterSetterInsertEditProvider>();
|
ArrayList<GetterSetterInsertEditProvider> checkedFunctions = new ArrayList<GetterSetterInsertEditProvider>();
|
||||||
|
|
|
@ -23,8 +23,12 @@ import org.eclipse.jface.viewers.ISelection;
|
||||||
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
|
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.ast.ASTNodeProperty;
|
import org.eclipse.cdt.core.dom.ast.ASTNodeProperty;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.ASTVisitor;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTCompositeTypeSpecifier;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
|
import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
|
import org.eclipse.cdt.core.dom.ast.IASTDeclarator;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
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;
|
||||||
|
@ -36,6 +40,7 @@ import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
|
||||||
import org.eclipse.cdt.internal.ui.refactoring.AddDeclarationNodeToClassChange;
|
import org.eclipse.cdt.internal.ui.refactoring.AddDeclarationNodeToClassChange;
|
||||||
import org.eclipse.cdt.internal.ui.refactoring.CRefactoring;
|
import org.eclipse.cdt.internal.ui.refactoring.CRefactoring;
|
||||||
|
import org.eclipse.cdt.internal.ui.refactoring.Container;
|
||||||
import org.eclipse.cdt.internal.ui.refactoring.ModificationCollector;
|
import org.eclipse.cdt.internal.ui.refactoring.ModificationCollector;
|
||||||
import org.eclipse.cdt.internal.ui.refactoring.utils.SelectionHelper;
|
import org.eclipse.cdt.internal.ui.refactoring.utils.SelectionHelper;
|
||||||
import org.eclipse.cdt.internal.ui.refactoring.utils.VisibilityEnum;
|
import org.eclipse.cdt.internal.ui.refactoring.utils.VisibilityEnum;
|
||||||
|
@ -46,6 +51,33 @@ import org.eclipse.cdt.internal.ui.refactoring.utils.VisibilityEnum;
|
||||||
*/
|
*/
|
||||||
public class GenerateGettersAndSettersRefactoring extends CRefactoring {
|
public class GenerateGettersAndSettersRefactoring extends CRefactoring {
|
||||||
|
|
||||||
|
private final class CompositeTypeSpecFinder extends CPPASTVisitor {
|
||||||
|
private final int start;
|
||||||
|
private final Container<IASTCompositeTypeSpecifier> container;
|
||||||
|
{
|
||||||
|
shouldVisitDeclSpecifiers = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private CompositeTypeSpecFinder(int start, Container<IASTCompositeTypeSpecifier> container) {
|
||||||
|
this.start = start;
|
||||||
|
this.container = container;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int visit(IASTDeclSpecifier declSpec) {
|
||||||
|
|
||||||
|
if (declSpec instanceof IASTCompositeTypeSpecifier) {
|
||||||
|
IASTFileLocation loc = declSpec.getFileLocation();
|
||||||
|
if(start > loc.getNodeOffset() && start < loc.getNodeOffset()+ loc.getNodeLength()) {
|
||||||
|
container.setObject((IASTCompositeTypeSpecifier) declSpec);
|
||||||
|
return ASTVisitor.PROCESS_ABORT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.visit(declSpec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static final String MEMBER_DECLARATION = "MEMBER_DECLARATION"; //$NON-NLS-1$
|
private static final String MEMBER_DECLARATION = "MEMBER_DECLARATION"; //$NON-NLS-1$
|
||||||
private final GetterAndSetterContext context = new GetterAndSetterContext();
|
private final GetterAndSetterContext context = new GetterAndSetterContext();
|
||||||
|
|
||||||
|
@ -72,9 +104,34 @@ public class GenerateGettersAndSettersRefactoring extends CRefactoring {
|
||||||
loadTranslationUnit(initStatus, pm);
|
loadTranslationUnit(initStatus, pm);
|
||||||
context.setUnit(unit);
|
context.setUnit(unit);
|
||||||
context.selectedName = getSelectedName();
|
context.selectedName = getSelectedName();
|
||||||
findDeclarations();
|
IASTCompositeTypeSpecifier compositeTypeSpecifier = null;
|
||||||
|
if(context.selectedName != null) {
|
||||||
|
compositeTypeSpecifier = getCompositeTypeSpecifier(context.selectedName);
|
||||||
|
}else {
|
||||||
|
compositeTypeSpecifier = findCurrentCompositeTypeSpecifier();
|
||||||
|
}
|
||||||
|
if(compositeTypeSpecifier != null) {
|
||||||
|
findDeclarations(compositeTypeSpecifier);
|
||||||
|
}else {
|
||||||
|
initStatus.addFatalError(Messages.GenerateGettersAndSettersRefactoring_NoCassDefFound);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IASTCompositeTypeSpecifier findCurrentCompositeTypeSpecifier() {
|
||||||
|
final int start = region.getOffset();
|
||||||
|
Container<IASTCompositeTypeSpecifier> container = new Container<IASTCompositeTypeSpecifier>();
|
||||||
|
unit.accept(new CompositeTypeSpecFinder(start, container));
|
||||||
|
return container.getObject();
|
||||||
|
}
|
||||||
|
|
||||||
|
private IASTCompositeTypeSpecifier getCompositeTypeSpecifier(IASTName selectedName) {
|
||||||
|
IASTNode node = selectedName;
|
||||||
|
while(node != null && !(node instanceof IASTCompositeTypeSpecifier)) {
|
||||||
|
node = node.getParent();
|
||||||
|
}
|
||||||
|
return (IASTCompositeTypeSpecifier) node;
|
||||||
|
}
|
||||||
|
|
||||||
private IASTName getSelectedName() {
|
private IASTName getSelectedName() {
|
||||||
ArrayList<IASTName> names = findAllMarkedNames();
|
ArrayList<IASTName> names = findAllMarkedNames();
|
||||||
if (names.size() < 1) {
|
if (names.size() < 1) {
|
||||||
|
@ -83,9 +140,9 @@ public class GenerateGettersAndSettersRefactoring extends CRefactoring {
|
||||||
return names.get(names.size()-1);
|
return names.get(names.size()-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void findDeclarations() {
|
protected void findDeclarations(IASTCompositeTypeSpecifier compositeTypeSpecifier) {
|
||||||
|
|
||||||
unit.accept(new CPPASTVisitor() {
|
compositeTypeSpecifier.accept(new CPPASTVisitor() {
|
||||||
|
|
||||||
{
|
{
|
||||||
shouldVisitDeclarations = true;
|
shouldVisitDeclarations = true;
|
||||||
|
|
|
@ -21,6 +21,7 @@ public final class Messages extends NLS {
|
||||||
// Do not instantiate
|
// Do not instantiate
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String GenerateGettersAndSettersRefactoring_NoCassDefFound;
|
||||||
public static String GenerateGettersAndSettersRefactoring_NoFields;
|
public static String GenerateGettersAndSettersRefactoring_NoFields;
|
||||||
public static String GettersAndSetters_Name;
|
public static String GettersAndSetters_Name;
|
||||||
|
|
||||||
|
|
|
@ -10,4 +10,5 @@
|
||||||
# Institute for Software - initial API and implementation
|
# Institute for Software - initial API and implementation
|
||||||
###############################################################################
|
###############################################################################
|
||||||
GettersAndSetters_Name=Generate Getters and Setters
|
GettersAndSetters_Name=Generate Getters and Setters
|
||||||
|
GenerateGettersAndSettersRefactoring_NoCassDefFound=No class definition found
|
||||||
GenerateGettersAndSettersRefactoring_NoFields=The class does not contain any fields.
|
GenerateGettersAndSettersRefactoring_NoFields=The class does not contain any fields.
|
||||||
|
|
Loading…
Add table
Reference in a new issue