X-Git-Url: http://secure.phpeclipse.com diff --git a/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/corext/codemanipulation/GetterSetterUtil.java b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/corext/codemanipulation/GetterSetterUtil.java new file mode 100644 index 0000000..2ac2194 --- /dev/null +++ b/net.sourceforge.phpeclipse.ui/src/net/sourceforge/phpdt/internal/corext/codemanipulation/GetterSetterUtil.java @@ -0,0 +1,253 @@ +/******************************************************************************* + * 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 true, 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 true, 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(); + } + +}