/*******************************************************************************
* Copyright (c) 2005, 2015 Zend Technologies 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:
* Zend Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.php.refactoring.core.extract.function;
import org.eclipse.core.runtime.Assert;
import org.eclipse.php.core.ast.nodes.ITypeBinding;
import org.eclipse.php.core.ast.nodes.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 name, int index) {
this(null, name, index);
}
// public ParameterInfo(IVariableBinding binding, String name, int index) {
// this(binding, null, name, index);
// }
public ParameterInfo(IVariableBinding binding, 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, "", 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 String getOldDisplayName() {
// ignore the $;
if (fOldName != null && fOldName.startsWith("$")) { //$NON-NLS-1$
return fOldName.substring(1);
}
return fOldName;
}
public String getNewDisplayName() {
if (fNewName != null && fNewName.startsWith("$")) { //$NON-NLS-1$
return fNewName.substring(1);
}
return fNewName;
}
public void setNewName(String newName) {
Assert.isNotNull(newName);
if (newName != null && !newName.startsWith("$")) { //$NON-NLS-1$
fNewName = "$" + newName; //$NON-NLS-1$
} else {
fNewName = newName;
}
}
public String getDefaultValue() {
return fDefaultValue;
}
public void setDefaultValue(String value) {
Assert.isNotNull(value);
fDefaultValue = value;
}
public String toString() {
return 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;
}
}