--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2000, 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package net.sourceforge.phpdt.internal.corext.codemanipulation;
+
+import net.sourceforge.phpdt.core.Flags;
+import net.sourceforge.phpdt.core.IField;
+import net.sourceforge.phpdt.core.IJavaProject;
+import net.sourceforge.phpdt.core.IMethod;
+import net.sourceforge.phpdt.core.IType;
+import net.sourceforge.phpdt.core.JavaModelException;
+import net.sourceforge.phpdt.core.NamingConventions;
+import net.sourceforge.phpdt.core.Signature;
+import net.sourceforge.phpdt.internal.corext.util.JavaModelUtil;
+import net.sourceforge.phpdt.internal.corext.util.JdtFlags;
+import net.sourceforge.phpdt.ui.CodeGeneration;
+import net.sourceforge.phpdt.ui.PreferenceConstants;
+
+import org.eclipse.core.runtime.CoreException;
+
+public class GetterSetterUtil {
+
+ private static final String[] EMPTY = new String[0];
+
+ // no instances
+ private GetterSetterUtil() {
+ }
+
+ public static String getGetterName(IField field, String[] excludedNames)
+ throws JavaModelException {
+ boolean useIs = PreferenceConstants.getPreferenceStore().getBoolean(
+ PreferenceConstants.CODEGEN_IS_FOR_GETTERS);
+ return getGetterName(field, excludedNames, useIs);
+ }
+
+ private static String getGetterName(IField field, String[] excludedNames,
+ boolean useIsForBoolGetters) throws JavaModelException {
+ if (excludedNames == null) {
+ excludedNames = EMPTY;
+ }
+ return getGetterName(field.getJavaProject(), field.getElementName(),
+ field.getFlags(), useIsForBoolGetters
+ && JavaModelUtil.isBoolean(field), excludedNames);
+ }
+
+ public static String getGetterName(IJavaProject project, String fieldName,
+ int flags, boolean isBoolean, String[] excludedNames) {
+ return NamingConventions.suggestGetterName(project, fieldName, flags,
+ isBoolean, excludedNames);
+ }
+
+ public static String getSetterName(IJavaProject project, String fieldName,
+ int flags, boolean isBoolean, String[] excludedNames) {
+ return NamingConventions.suggestSetterName(project, fieldName, flags,
+ isBoolean, excludedNames);
+ }
+
+ public static String getSetterName(IField field, String[] excludedNames)
+ throws JavaModelException {
+ if (excludedNames == null) {
+ excludedNames = EMPTY;
+ }
+ return NamingConventions.suggestSetterName(field.getJavaProject(),
+ field.getElementName(), field.getFlags(), JavaModelUtil
+ .isBoolean(field), excludedNames);
+ }
+
+ public static IMethod getGetter(IField field) throws JavaModelException {
+ IMethod primaryCandidate = JavaModelUtil.findMethod(getGetterName(
+ field, EMPTY, true), new String[0], false, field
+ .getDeclaringType());
+ if (!JavaModelUtil.isBoolean(field)
+ || (primaryCandidate != null && primaryCandidate.exists()))
+ return primaryCandidate;
+ // bug 30906 describes why we need to look for other alternatives here
+ String secondCandidateName = getGetterName(field, EMPTY, false);
+ return JavaModelUtil.findMethod(secondCandidateName, new String[0],
+ false, field.getDeclaringType());
+ }
+
+ public static IMethod getSetter(IField field) throws JavaModelException {
+ String[] args = new String[] { field.getTypeSignature() };
+ return JavaModelUtil.findMethod(getSetterName(field, EMPTY), args,
+ false, field.getDeclaringType());
+ }
+
+ /**
+ * Create a stub for a getter of the given field using getter/setter
+ * templates. The resulting code has to be formatted and indented.
+ *
+ * @param field
+ * The field to create a getter for
+ * @param setterName
+ * The chosen name for the setter
+ * @param addComments
+ * If <code>true</code>, comments will be added.
+ * @param flags
+ * The flags signaling visibility, if static, synchronized or
+ * final
+ * @return Returns the generated stub.
+ * @throws CoreException
+ */
+ public static String getSetterStub(IField field, String setterName,
+ boolean addComments, int flags) throws CoreException {
+
+ String fieldName = field.getElementName();
+ IType parentType = field.getDeclaringType();
+
+ String returnSig = field.getTypeSignature();
+ String typeName = Signature.toString(returnSig);
+
+ IJavaProject project = field.getJavaProject();
+
+ String accessorName = NamingConventions
+ .removePrefixAndSuffixForFieldName(project, fieldName, field
+ .getFlags());
+ String argname = StubUtility.suggestArgumentName(project, accessorName,
+ EMPTY);
+
+ boolean isStatic = Flags.isStatic(flags);
+ // boolean isSync= Flags.isSynchronized(flags);
+ boolean isFinal = Flags.isFinal(flags);
+
+ // create the setter stub
+ StringBuffer buf = new StringBuffer();
+ if (addComments) {
+ String comment = CodeGeneration.getSetterComment(field
+ .getCompilationUnit(),
+ parentType.getTypeQualifiedName('.'), setterName, field
+ .getElementName(), typeName, argname, accessorName,
+ String.valueOf('\n'));
+ if (comment != null) {
+ buf.append(comment);
+ buf.append('\n');
+ }
+ }
+ buf.append(JdtFlags.getVisibilityString(flags));
+ buf.append(' ');
+ if (isStatic)
+ buf.append("static "); //$NON-NLS-1$
+ // if (isSync)
+ // buf.append("synchronized "); //$NON-NLS-1$
+ if (isFinal)
+ buf.append("final "); //$NON-NLS-1$
+
+ buf.append("void "); //$NON-NLS-1$
+ buf.append(setterName);
+ buf.append('(');
+ buf.append(typeName);
+ buf.append(' ');
+ buf.append(argname);
+ buf.append(") {\n"); //$NON-NLS-1$
+
+ boolean useThis = PreferenceConstants.getPreferenceStore().getBoolean(
+ PreferenceConstants.CODEGEN_KEYWORD_THIS);
+ if (argname.equals(fieldName) || (useThis && !isStatic)) {
+ if (isStatic)
+ fieldName = parentType.getElementName() + '.' + fieldName;
+ else
+ fieldName = "this." + fieldName; //$NON-NLS-1$
+ }
+ String body = CodeGeneration.getSetterMethodBodyContent(field
+ .getCompilationUnit(), parentType.getTypeQualifiedName('.'),
+ setterName, fieldName, argname, String.valueOf('\n'));
+ if (body != null) {
+ buf.append(body);
+ }
+ buf.append("}\n"); //$NON-NLS-1$
+ return buf.toString();
+ }
+
+ /**
+ * Create a stub for a getter of the given field using getter/setter
+ * templates. The resulting code has to be formatted and indented.
+ *
+ * @param field
+ * The field to create a getter for
+ * @param getterName
+ * The chosen name for the getter
+ * @param addComments
+ * If <code>true</code>, comments will be added.
+ * @param flags
+ * The flags signaling visibility, if static, synchronized or
+ * final
+ * @return Returns the generated stub.
+ * @throws CoreException
+ */
+ public static String getGetterStub(IField field, String getterName,
+ boolean addComments, int flags) throws CoreException {
+ String fieldName = field.getElementName();
+ IType parentType = field.getDeclaringType();
+
+ boolean isStatic = Flags.isStatic(flags);
+ // boolean isSync= Flags.isSynchronized(flags);
+ boolean isFinal = Flags.isFinal(flags);
+
+ String typeName = Signature.toString(field.getTypeSignature());
+ String accessorName = NamingConventions
+ .removePrefixAndSuffixForFieldName(field.getJavaProject(),
+ fieldName, field.getFlags());
+
+ // create the getter stub
+ StringBuffer buf = new StringBuffer();
+ if (addComments) {
+ String comment = CodeGeneration.getGetterComment(field
+ .getCompilationUnit(),
+ parentType.getTypeQualifiedName('.'), getterName, field
+ .getElementName(), typeName, accessorName, String
+ .valueOf('\n'));
+ if (comment != null) {
+ buf.append(comment);
+ buf.append('\n');
+ }
+ }
+
+ buf.append(JdtFlags.getVisibilityString(flags));
+ buf.append(' ');
+ if (isStatic)
+ buf.append("static "); //$NON-NLS-1$
+ // if (isSync)
+ // buf.append("synchronized "); //$NON-NLS-1$
+ if (isFinal)
+ buf.append("final "); //$NON-NLS-1$
+
+ buf.append(typeName);
+ buf.append(' ');
+ buf.append(getterName);
+ buf.append("() {\n"); //$NON-NLS-1$
+
+ boolean useThis = PreferenceConstants.getPreferenceStore().getBoolean(
+ PreferenceConstants.CODEGEN_KEYWORD_THIS);
+ if (useThis && !isStatic) {
+ fieldName = "this." + fieldName; //$NON-NLS-1$
+ }
+
+ String body = CodeGeneration.getGetterMethodBodyContent(field
+ .getCompilationUnit(), parentType.getTypeQualifiedName('.'),
+ getterName, fieldName, String.valueOf('\n'));
+ if (body != null) {
+ buf.append(body);
+ }
+ buf.append("}\n"); //$NON-NLS-1$
+ return buf.toString();
+ }
+
+}