/******************************************************************************* * Copyright (c) 2007, 2008 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.jdt.core.refactoring.participants; import org.eclipse.core.runtime.Assert; import org.eclipse.ltk.core.refactoring.participants.RefactoringArguments; import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.Signature; /** * Change method signature arguments describe the data that a processor * provides to its change signature participants * <p> * This class is not intended to be subclassed by clients. * </p> * * @since 1.2 * * @noextend This class is not intended to be subclassed by clients. */ public class ChangeMethodSignatureArguments extends RefactoringArguments { /** * Instances of {@link ChangeMethodSignatureArguments.Parameter} are used to describe the new parameters * after a change method signature refactoring. */ public final static class Parameter { private final int fOldIndex; private final String fNewName; private final String fNewSignature; private final String fDefaultValue; /** * Creates a {@link ChangeMethodSignatureArguments.Parameter}. * * @param oldIndex the index of the parameter in the original method or <code>-1</code> if the parameter is a new parameter. * @param newName the new name of the parameter. * @param newSignature the new type of the parameter in signature notation (See {@link Signature}). * @param defaultValue the default value for new parameters or <code>null</code>. */ public Parameter(int oldIndex, String newName, String newSignature, String defaultValue) { fOldIndex= oldIndex; fNewName= newName; fNewSignature= newSignature; fDefaultValue= defaultValue; } /** * Returns the index of the parameter in the original method or <code>-1</code> if the parameter * has been added. * * @return the index of the parameter in the original method or <code>-1</code> if the parameter * has been added */ public int getOldIndex() { return fOldIndex; } /** * Returns the new name of the parameter. If the name has not been changed by the refactoring, * the original parameter name is returned. * * @return the new parameter name */ public String getName() { return fNewName; } /** * Returns the new type of the parameter in signature notation (See {@link Signature}). * If the type has not been changed by the refactoring, the original type signature is returned. * * @return the the new type */ public String getType() { return fNewSignature; } /** * The default value for new parameters or <code>null</code>. * * @return returns the default value for new parameters or <code>null</code>. */ public String getDefaultValue() { return fDefaultValue; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return "name: " + fNewName + ", type: " + fNewSignature + ", oldIndex: " + fOldIndex + ", defaultValue: " + fDefaultValue; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } } /** * Instances of {@link ChangeMethodSignatureArguments.ThrownException} are used to describe the new thrown * exceptions after a change method signature refactoring. */ public final static class ThrownException { private final int fOldIndex; private final String fType; /** * Creates a {@link ChangeMethodSignatureArguments.ThrownException}. * * @param oldIndex the index of the thrown exception in the original method * or <code>-1</code> if the thrown exception is a new thrown exception. * @param newSignature the new type of the thrown exception in signature notation * (See {@link Signature}). */ public ThrownException(int oldIndex, String newSignature) { fOldIndex= oldIndex; fType= newSignature; } /** * Returns the index of the thrown exception in the original method or <code>-1</code> if the thrown exception * has been added. * * @return the index of the parameter in the original method or <code>-1</code> if the thrown exception * has been added. */ public int getOldIndex() { return fOldIndex; } /** * Returns the new type of the thrown exception in signature notation (See {@link Signature}). * * @return the the new type */ public String getType() { return fType; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return "type: " + fType + ", oldIndex: " + fOldIndex; //$NON-NLS-1$ //$NON-NLS-2$ } } private String fNewName; private String fNewReturnType; private final int fNewVisibility; private final Parameter[] fNewParameters; private final ThrownException[] fThrownExceptions; private final boolean fKeepOriginal; /** * Creates new change method signature arguments. * * @param newName the new name of the element to be changed * @param newReturnType the new method return type in signature notation (see {@link Signature}). * @param newVisibility the new visibility; one of {@link Flags#AccPublic}, {@link Flags#AccProtected}, * {@link Flags#AccPrivate} or <code>0</code> for the default visibility. * @param newParameters the new parameters of this method * @param thrownExceptions the new exceptions thrown by this method * @param keepOriginal <code>true</code> if the original method is kept as a delegate to the new one, * <code>false</code> otherwise */ public ChangeMethodSignatureArguments(String newName, String newReturnType, int newVisibility, Parameter[] newParameters, ThrownException[] thrownExceptions, boolean keepOriginal) { Assert.isNotNull(newName); fNewName= newName; fNewReturnType= newReturnType; fNewVisibility= newVisibility; fNewParameters= newParameters; fThrownExceptions= thrownExceptions; fKeepOriginal= keepOriginal; } /** * Returns the new method name. If the name has not been changed by the refactoring, the original * parameter name is returned. * * @return the method name */ public String getNewName() { return fNewName; } /** * Returns the type signature of the new return type of this method. * For constructors, this returns the signature for void. * If the return type has not been changed by the refactoring, the original * return type signature is returned. * * @return the new return type */ public String getNewReturnType() { return fNewReturnType; } /** * Returns the new visibility of this method. The visibility is one of {@link Flags#AccPublic}, {@link Flags#AccProtected}, * {@link Flags#AccPrivate} or <code>0</code> for the default visibility. If the visibility has not been changed by the * refactoring, the original visibility is returned. * * @return the visibility of the method */ public int getNewVisibility() { return fNewVisibility; } /** * Returns the new parameters of this method. * * @return the new parameters of this method */ public Parameter[] getNewParameters() { return fNewParameters; } /** * Returns the new thrown exceptions of this method. * * @return new thrown exceptions of this method */ public ThrownException[] getThrownExceptions() { return fThrownExceptions; } /** * Returns whether the original method is kept as a delegate to the new one. * * @return returns <code>true</code> if the original method is kept <code>false</code> otherwise */ public boolean getKeepOriginal() { return fKeepOriginal; } /** * {@inheritDoc} */ public String toString() { StringBuffer buf= new StringBuffer("change signature to "); //$NON-NLS-1$ buf.append("\n\tvisibility: ").append(Flags.toString(fNewVisibility)); //$NON-NLS-1$ buf.append("\n\treturn type sig: ").append(fNewReturnType); //$NON-NLS-1$ buf.append("\n\tnew name: ").append(fNewName); //$NON-NLS-1$ buf.append("\n\tkeep original: ").append(fKeepOriginal); //$NON-NLS-1$ for (int i= 0; i < fNewParameters.length; i++) { buf.append("\n\tparameter ").append(i).append(": ").append(fNewParameters[i]); //$NON-NLS-1$ //$NON-NLS-2$ } for (int i= 0; i < fThrownExceptions.length; i++) { buf.append("\n\texception ").append(i).append(": ").append(fThrownExceptions[i]); //$NON-NLS-1$ //$NON-NLS-2$ } return buf.toString(); } }