/* * Copyright (C) 2006, 2007 Dennis Hunziker, Ueli Kistler * Copyright (C) 2007 Reto Schuettel, Robin Stocker * * IFS Institute for Software, HSR Rapperswil, Switzerland * */ package org.python.pydev.refactoring.codegenerator.generateproperties.request; import java.util.List; import org.python.pydev.core.docutils.StringUtils; import org.python.pydev.parser.jython.SimpleNode; import org.python.pydev.parser.jython.ast.factory.AdapterPrefs; import org.python.pydev.parser.jython.ast.factory.NodeHelper; import org.python.pydev.plugin.preferences.PyCodeStylePreferencesPage; import org.python.pydev.refactoring.ast.adapters.IASTNodeAdapter; import org.python.pydev.refactoring.ast.adapters.IClassDefAdapter; import org.python.pydev.refactoring.ast.adapters.INodeAdapter; import org.python.pydev.refactoring.ast.adapters.PropertyTextAdapter; import org.python.pydev.refactoring.core.request.IRefactoringRequest; public class GeneratePropertiesRequest implements IRefactoringRequest { public final INodeAdapter attributeAdapter; public final int offsetMethodStrategy; public final int offsetPropertyStrategy; public final int accessModifier; private IClassDefAdapter classAdapter; private SelectionState state; private NodeHelper nodeHelper; private final AdapterPrefs adapterPrefs; public GeneratePropertiesRequest(IClassDefAdapter classAdapter, INodeAdapter attributeAdapter, List<PropertyTextAdapter> properties, int offsetMethodStrategy, int offsetPropertyStrategy, int accessModifier, AdapterPrefs adapterPrefs) { this.state = new SelectionState(); this.classAdapter = classAdapter; this.attributeAdapter = attributeAdapter; this.offsetMethodStrategy = offsetMethodStrategy; this.offsetPropertyStrategy = offsetPropertyStrategy; this.accessModifier = accessModifier; this.adapterPrefs = adapterPrefs; this.nodeHelper = new NodeHelper(adapterPrefs); initialize(properties); } private void initialize(List<PropertyTextAdapter> properties) { for (PropertyTextAdapter propertyAdapter : properties) { switch (propertyAdapter.getType()) { case (PropertyTextAdapter.GETTER): state.addSelection(SelectionState.GETTER); break; case (PropertyTextAdapter.SETTER): state.addSelection(SelectionState.SETTER); break; case (PropertyTextAdapter.DELETE): state.addSelection(SelectionState.DELETE); break; case (PropertyTextAdapter.DOCSTRING): state.addSelection(SelectionState.DOCSTRING); break; default: break; } } } public AdapterPrefs getAdapterPrefs() { return adapterPrefs; } public SelectionState getSelectionState() { return state; } public IASTNodeAdapter<? extends SimpleNode> getOffsetNode() { return classAdapter; } /** * @return the attribute name, for example "an_attribute" */ public String getAttributeName() { return nodeHelper.getPublicAttr(attributeAdapter.getName()); } /** * @return the property name, for example "_an_attribute" */ public String getPropertyName() { return nodeHelper.getAccessName(getAttributeName(), accessModifier); } /** * Joins the two strings to get the accessor function name, adhering to the * user's preferred style (camelCase or snake_case). * * @param accessType "get", "set" or "del" * @param attributeName for example "an_attribute" * @return for example "set_an_attribute" or "setAnAttribute" */ public static String getAccessorName(String accessType, String attributeName) { accessType += "_" + attributeName; int useMethodsCamelCase = PyCodeStylePreferencesPage.useMethodsCamelCase(); if (useMethodsCamelCase == PyCodeStylePreferencesPage.METHODS_FORMAT_CAMELCASE_FIRST_LOWER) { return StringUtils.asStyleCamelCaseFirstLower(accessType); } if (useMethodsCamelCase == PyCodeStylePreferencesPage.METHODS_FORMAT_CAMELCASE_FIRST_UPPER) { return StringUtils.asStyleCamelCaseFirstUpper(accessType); } //default is underscore return StringUtils.asStyleLowercaseUnderscores(accessType); } }