package husacct.analyse.task.analyse.csharp.generators; import static husacct.analyse.task.analyse.csharp.generators.CSharpGeneratorToolkit.*; import husacct.analyse.infrastructure.antlr.csharp.CSharpParser; import org.antlr.runtime.tree.CommonTree; import org.antlr.runtime.tree.Tree; public class CSharpPropertyGenerator extends CSharpGenerator { private String belongsToClass = ""; private String propertyName = ""; private CSharpBlockScopeGenerator csBlockScopeGenerator; public void generateProperyToDomain(CommonTree propertyTree, String belongsToClass) { this.belongsToClass = belongsToClass; setPropertyName(propertyTree); findGetterAndSetter(propertyTree); } private void setPropertyName(CommonTree propertyTree) { CommonTree propertyNameTree = getFirstDescendantWithType(propertyTree, CSharpParser.MEMBER_NAME); if (propertyNameTree != null) { this.propertyName = getTypeNameAndParts(propertyNameTree); } } private void findGetterAndSetter(Tree tree) { for (int i = 0; i < tree.getChildCount(); i++) { Tree child = tree.getChild(i); if (child.getType() == CSharpParser.IDENTIFIER) { String type = child.getText(); if (type.equals("get")) { CommonTree propertyGetBlock = (CommonTree)tree.getChild(i + 1); setPropertyGetBlock(propertyGetBlock); } else if (type.equals("set")) { CommonTree propertySetBlock = (CommonTree)tree.getChild(i + 1); setPropertySetBlock(propertySetBlock); } } findGetterAndSetter(child); } } private void setPropertySetBlock(CommonTree propertySetBlock) { String methodName = "set" + propertyName; delegateBlockToBlockScopeGenerator(propertySetBlock, methodName); } private void setPropertyGetBlock(CommonTree propertyGetBlock) { String methodName = "get" + propertyName; delegateBlockToBlockScopeGenerator(propertyGetBlock, methodName); } private void delegateBlockToBlockScopeGenerator(CommonTree tree, String methodName) { csBlockScopeGenerator = new CSharpBlockScopeGenerator(); csBlockScopeGenerator.walkThroughBlockScope(tree, belongsToClass, methodName); } }