1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Correct field access for getters and setters by Emanuel Graf, bug 232290.

This commit is contained in:
Markus Schorn 2008-05-15 14:31:07 +00:00
parent c7e0b78046
commit 401d6e1845
6 changed files with 156 additions and 31 deletions

View file

@ -54,7 +54,7 @@ public:
}
void setSystemId(int systemId){
this.systemId = systemId;
this->systemId = systemId;
}
};
@ -104,7 +104,7 @@ public:
}
void setSystemId(int systemId){
this.systemId = systemId;
this->systemId = systemId;
}
};
@ -168,7 +168,7 @@ namespace Personal {
}
void setSystemId(int systemId){
this.systemId = systemId;
this->systemId = systemId;
}
};
}
@ -221,7 +221,7 @@ namespace Personal {
}
void setSystemId(int systemId){
this.systemId = systemId;
this->systemId = systemId;
}
};
}
@ -286,7 +286,7 @@ public:
}
void setSystemId(int systemId){
this.systemId = systemId;
this->systemId = systemId;
}
};
@ -329,7 +329,7 @@ public:
int GetUniqueId();
void setName(char *name)
{
this.name = name;
this->name = name;
}
int getSystemId(){
@ -337,7 +337,7 @@ public:
}
void setSystemId(int systemId){
this.systemId = systemId;
this->systemId = systemId;
}
};
@ -402,7 +402,7 @@ public:
}
void setSystemId(int systemId){
this.systemId = systemId;
this->systemId = systemId;
}
};
@ -450,7 +450,7 @@ public:
void setName(char *name)
{
this.name = name;
this->name = name;
}
int getSystemId(){
@ -458,7 +458,7 @@ public:
}
void setSystemId(int systemId){
this.systemId = systemId;
this->systemId = systemId;
}
};
@ -550,7 +550,7 @@ public:
void setSystemId(int systemId)
{
this.systemId = systemId;
this->systemId = systemId;
}
char *getName() const
@ -560,7 +560,7 @@ public:
void setName(char *name)
{
this.name = name;
this->name = name;
}
Person(int socSecNo); // contructor
@ -631,7 +631,7 @@ public:
void setIsOk(bool isOk)
{
this.isOk = isOk;
this->isOk = isOk;
}
int getI() const
@ -641,7 +641,7 @@ public:
void setI(int i)
{
this.i = i;
this->i = i;
}
private:
@ -650,3 +650,95 @@ private:
#endif
//!Generate Getters and Setters no Methods
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
//@.config
filename=C.h
getters=id
setters=id
//@C.h
#ifndef C_H_
#define C_H_
class Person {
private:
int //$id$//;
};
#endif /*C_H_*/
//=
#ifndef C_H_
#define C_H_
class Person {
private:
int id;
public:
int getId() const
{
return id;
}
void setId(int id)
{
this->id = id;
}
};
#endif /*C_H_*/
//!Generate Getters and Setters no Methods
//#org.eclipse.cdt.ui.tests.refactoring.gettersandsetters.GenerateGettersAndSettersTest
//@.config
filename=C.h
getters=i
setters=i
//@C.h
/*
* test.h
*/
#ifndef TEST_H_
#define TEST_H_
//comment1
class test
{
int //$i$//; //comment2
char* b;
//comment3
};
#endif /* TEST_H_ */
//=
/*
* test.h
*/
#ifndef TEST_H_
#define TEST_H_
//comment1
class test
{
int i; //comment2
char* b;
public:
int getI() const
{
return i;
}
void setI(int i)
{
this->i = i;
}
//comment3
};
#endif /* TEST_H_ */

View file

@ -92,6 +92,7 @@ public class FunctionFactory {
litExpr.setValue("this"); //$NON-NLS-1$
fieldRef.setFieldOwner(litExpr);
fieldRef.setFieldName(fieldDeclaration.getDeclarators()[0].getName());
fieldRef.setIsPointerDereference(true);
binExpr.setOperand1(fieldRef);
binExpr.setOperator(IASTBinaryExpression.op_assign);
CPPASTIdExpression idExpr = new CPPASTIdExpression();

View file

@ -13,7 +13,6 @@ package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
import java.util.ArrayList;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
@ -22,6 +21,10 @@ import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.dialogs.ContainerCheckedTreeViewer;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.internal.ui.refactoring.gettersandsetters.GetterAndSetterContext.FieldWrapper;
public class GenerateGettersAndSettersInputPage extends UserInputWizardPage {
private GetterAndSetterContext context;
@ -50,6 +53,23 @@ public class GenerateGettersAndSettersInputPage extends UserInputWizardPage {
variableSelectionView.setAutoExpandLevel(3);
variableSelectionView.setInput(""); //$NON-NLS-1$
for(Object obj : variableSelectionView.getVisibleExpandedElements()) {
System.out.println();
if (obj instanceof FieldWrapper){
if(obj.toString().contains(context.selectedName.getRawSignature())){
variableSelectionView.setSubtreeChecked(obj, true);
}
}
}
ArrayList<GetterSetterInsertEditProvider> checkedFunctions = new ArrayList<GetterSetterInsertEditProvider>();
for(Object currentElement : variableSelectionView.getCheckedElements()){
if (currentElement instanceof GetterSetterInsertEditProvider) {
GetterSetterInsertEditProvider editProvider = (GetterSetterInsertEditProvider) currentElement;
checkedFunctions.add(editProvider);
}
}
context.selectedFunctions = checkedFunctions;
variableSelectionView.addCheckStateListener(new ICheckStateListener(){
public void checkStateChanged(CheckStateChangedEvent event) {
@ -61,12 +81,8 @@ public class GenerateGettersAndSettersInputPage extends UserInputWizardPage {
}
}
context.selectedFunctions = checkedFunctions;
}
});
}
}
}

View file

@ -11,11 +11,15 @@
*******************************************************************************/
package org.eclipse.cdt.internal.ui.refactoring.gettersandsetters;
import java.util.ArrayList;
import java.util.Vector;
import org.eclipse.core.resources.IFile;
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.Region;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
@ -24,6 +28,8 @@ import org.eclipse.cdt.core.dom.ast.IASTDeclaration;
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.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTNode;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.cpp.CPPASTVisitor;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTCompositeTypeSpecifier;
@ -62,8 +68,16 @@ public class GenerateGettersAndSettersRefactoring extends CRefactoring {
private void initRefactoring(IProgressMonitor pm) {
loadTranslationUnit(initStatus, pm);
context.setUnit(unit);
context.selectedName = getSelectedName();
findDeclarations();
}
private IASTName getSelectedName() {
Vector<IASTName> names = findAllMarkedNames();
if (names.size() < 1) {
return null;
}
return names.lastElement();
}
protected void findDeclarations() {
@ -106,19 +120,20 @@ public class GenerateGettersAndSettersRefactoring extends CRefactoring {
@Override
protected void collectModifications(IProgressMonitor pm,ModificationCollector collector) throws CoreException, OperationCanceledException {
// egtodo
// ASTRewrite rewriter = collector.rewriterForTranslationUnit(unit);
ArrayList<IASTNode> getterAndSetters = new ArrayList<IASTNode>();
for(GetterSetterInsertEditProvider currentProvider : context.selectedFunctions){
// egtodo
// TextEditGroup editGroup = new TextEditGroup(Messages.GenerateGettersAndSettersRefactoring_Insert + currentProvider.toString());
ICPPASTCompositeTypeSpecifier classDefinition = (ICPPASTCompositeTypeSpecifier) context.existingFunctionDeclarations.get(context.existingFunctionDeclarations.size()-1).getParent();
AddDeclarationNodeToClassChange.createChange(classDefinition, VisibilityEnum.v_public, currentProvider.getFunction(), false, collector);
getterAndSetters.add(currentProvider.getFunction());
}
ICPPASTCompositeTypeSpecifier classDefinition = (ICPPASTCompositeTypeSpecifier) context.existingFields.get(context.existingFields.size()-1).getParent();
AddDeclarationNodeToClassChange.createChange(classDefinition, VisibilityEnum.v_public, getterAndSetters, false, collector);
}
public GetterAndSetterContext getContext() {
return context;
}
public Region getRegion() {
return region;
}
}

View file

@ -18,8 +18,7 @@ import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
* @author Thomas Corbat
*
*/
public class GenerateGettersAndSettersRefactoringWizard extends
RefactoringWizard {
public class GenerateGettersAndSettersRefactoringWizard extends RefactoringWizard {
private final GenerateGettersAndSettersRefactoring refactoring;

View file

@ -17,6 +17,7 @@ import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.cdt.core.dom.ast.IASTFunctionDefinition;
import org.eclipse.cdt.core.dom.ast.IASTName;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit;
@ -29,6 +30,7 @@ public class GetterAndSetterContext implements ITreeContentProvider{
public ArrayList<IASTSimpleDeclaration> existingFunctionDeclarations = new ArrayList<IASTSimpleDeclaration>();
public ArrayList<GetterSetterInsertEditProvider> selectedFunctions = new ArrayList<GetterSetterInsertEditProvider>();
private IASTTranslationUnit unit;
public IASTName selectedName;
public Object[] getChildren(Object parentElement) {