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:
parent
c7e0b78046
commit
401d6e1845
6 changed files with 156 additions and 31 deletions
|
@ -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_ */
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue