blob: 685d438853ca28fffc64db4b4a7d21608b81c726 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.corext.refactoring;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jdt.core.dom.ITypeBinding;
import org.eclipse.jdt.core.dom.IVariableBinding;
public class ParameterInfo {
public static final int INDEX_FOR_ADDED= -1;
public static final String ELLIPSIS= "..."; //$NON-NLS-1$
private IVariableBinding fOldBinding;
private ITypeBinding fOldTypeBinding;
private final String fOldName;
private final String fOldTypeName;
private final int fOldIndex;
private String fNewTypeName;
private ITypeBinding fNewTypeBinding;
private String fDefaultValue;
private String fNewName;
private boolean fIsDeleted;
private boolean fCreateField=true;
private boolean fInlined;
private boolean fResolve= true;
public ParameterInfo(String type, String name, int index) {
this(null, null, type, name, index);
}
public ParameterInfo(IVariableBinding binding, String type, String name, int index) {
this(binding, null, type, name, index);
}
private ParameterInfo(IVariableBinding binding, ITypeBinding typeBinding, String type, String name, int index) {
fOldBinding= binding;
fOldTypeBinding= typeBinding;
fNewTypeBinding= typeBinding;
fOldTypeName= type;
fNewTypeName= type;
fOldName= name;
fNewName= name;
fOldIndex= index;
fDefaultValue= ""; //$NON-NLS-1$
fIsDeleted= false;
}
/**
* Creates a new ParameterInfo. Parameter is marked as added and not resolvable
* @param type the fullyqualified type
* @param name the name
* @return the parameter info object
*/
public static ParameterInfo createInfoForAddedParameter(String type, String name) {
ParameterInfo info= new ParameterInfo("", "", INDEX_FOR_ADDED); //$NON-NLS-1$ //$NON-NLS-2$
info.setNewTypeName(type);
info.setNewName(name);
info.setResolve(false);
return info;
}
private void setResolve(boolean resolve) {
fResolve= resolve;
}
public static ParameterInfo createInfoForAddedParameter(String type, String name, String defaultValue) {
ParameterInfo info= new ParameterInfo("", "", INDEX_FOR_ADDED); //$NON-NLS-1$ //$NON-NLS-2$
info.setNewTypeName(type);
info.setNewName(name);
info.setDefaultValue(defaultValue);
return info;
}
public static ParameterInfo createInfoForAddedParameter(ITypeBinding typeBinding, String type, String name, String defaultValue) {
ParameterInfo info= new ParameterInfo(null, typeBinding, "", "", INDEX_FOR_ADDED); //$NON-NLS-1$ //$NON-NLS-2$
info.setNewTypeName(type);
info.setNewName(name);
info.setDefaultValue(defaultValue);
return info;
}
public int getOldIndex() {
return fOldIndex;
}
public boolean isDeleted(){
return fIsDeleted;
}
public void markAsDeleted(){
Assert.isTrue(! isAdded());//added param infos should be simply removed from the list
fIsDeleted= true;
}
public boolean isAdded(){
return fOldIndex == INDEX_FOR_ADDED;
}
public boolean isTypeNameChanged() {
return !fOldTypeName.equals(fNewTypeName);
}
public boolean isRenamed() {
return !fOldName.equals(fNewName);
}
public boolean isVarargChanged() {
return isOldVarargs() != isNewVarargs();
}
public IVariableBinding getOldBinding() {
return fOldBinding;
}
public String getOldTypeName() {
return fOldTypeName;
}
public String getNewTypeName() {
return fNewTypeName;
}
public void setNewTypeName(String type){
Assert.isNotNull(type);
fNewTypeName= type;
}
public ITypeBinding getNewTypeBinding() {
return fNewTypeBinding;
}
public void setNewTypeBinding(ITypeBinding typeBinding){
fNewTypeBinding= typeBinding;
}
public boolean isOldVarargs() {
return isVarargs(fOldTypeName);
}
public boolean isNewVarargs() {
return isVarargs(fNewTypeName);
}
public String getOldName() {
return fOldName;
}
public String getNewName() {
return fNewName;
}
public void setNewName(String newName) {
Assert.isNotNull(newName);
fNewName= newName;
}
public String getDefaultValue(){
return fDefaultValue;
}
public void setDefaultValue(String value){
Assert.isNotNull(value);
fDefaultValue= value;
}
@Override
public String toString() {
return fOldTypeName + " " + fOldName + " @" + fOldIndex + " -> " //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
+ fNewTypeName + " " + fNewName + ": " + fDefaultValue //$NON-NLS-1$//$NON-NLS-2$
+ (fIsDeleted ? " (deleted)" : " (stays)"); //$NON-NLS-1$//$NON-NLS-2$
}
public static String stripEllipsis(String typeName) {
if (isVarargs(typeName))
return typeName.substring(0, typeName.length() - 3);
else
return typeName;
}
public static boolean isVarargs(String typeName) {
return typeName.endsWith("..."); //$NON-NLS-1$
}
public ITypeBinding getOldTypeBinding() {
return fOldTypeBinding;
}
public boolean isCreateField() {
return fCreateField;
}
public void setCreateField(boolean createField) {
fIsDeleted= createField;
fCreateField= createField;
}
public void setOldBinding(IVariableBinding binding) {
//The variableBinding is needed by IPOR to check what modifier were present
fOldBinding=binding;
fOldTypeBinding=binding.getType();
fNewTypeBinding=binding.getType();
}
public void setInlined(boolean inlined) {
fInlined=inlined;
}
public boolean isInlined() {
return fInlined;
}
public boolean isResolve() {
return fResolve;
}
}