blob: bb7c1d8024a24240083cdaf24cc279cc684c44fa [file] [log] [blame]
/*******************************************************************************
* 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();
}
}