blob: 6aa3edb73f5fd1c9e46c52017de15ff143891ad2 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 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.wst.jsdt.internal.corext.refactoring.rename;
import org.eclipse.wst.jsdt.core.IClassFile;
import org.eclipse.wst.jsdt.core.IJavaScriptUnit;
import org.eclipse.wst.jsdt.core.IField;
import org.eclipse.wst.jsdt.core.IImportContainer;
import org.eclipse.wst.jsdt.core.IImportDeclaration;
import org.eclipse.wst.jsdt.core.IInitializer;
import org.eclipse.wst.jsdt.core.IJavaScriptElement;
import org.eclipse.wst.jsdt.core.IJavaScriptModel;
import org.eclipse.wst.jsdt.core.IJavaScriptProject;
import org.eclipse.wst.jsdt.core.ILocalVariable;
import org.eclipse.wst.jsdt.core.IMember;
import org.eclipse.wst.jsdt.core.IFunction;
import org.eclipse.wst.jsdt.core.IPackageDeclaration;
import org.eclipse.wst.jsdt.core.IPackageFragment;
import org.eclipse.wst.jsdt.core.IPackageFragmentRoot;
import org.eclipse.wst.jsdt.core.IType;
import org.eclipse.wst.jsdt.core.ITypeParameter;
public class GenericRefactoringHandleTransplanter {
public final IJavaScriptElement transplantHandle(IJavaScriptElement element) {
IJavaScriptElement parent= element.getParent();
if (parent != null)
parent= transplantHandle(parent); // recursive
switch (element.getElementType()) {
case IJavaScriptElement.JAVASCRIPT_MODEL:
return transplantHandle((IJavaScriptModel) element);
case IJavaScriptElement.JAVASCRIPT_PROJECT:
return transplantHandle((IJavaScriptProject) element);
case IJavaScriptElement.PACKAGE_FRAGMENT_ROOT:
return transplantHandle((IJavaScriptProject) parent, (IPackageFragmentRoot) element);
case IJavaScriptElement.PACKAGE_FRAGMENT:
return transplantHandle((IPackageFragmentRoot) parent, (IPackageFragment) element);
case IJavaScriptElement.JAVASCRIPT_UNIT:
return transplantHandle((IPackageFragment) parent, (IJavaScriptUnit) element);
case IJavaScriptElement.CLASS_FILE:
return transplantHandle((IPackageFragment) parent, (IClassFile) element);
case IJavaScriptElement.TYPE:
return transplantHandle(parent, (IType) element);
case IJavaScriptElement.FIELD:
return transplantHandle((IType) parent, (IField) element);
case IJavaScriptElement.METHOD:
return transplantHandle((IType) parent, (IFunction) element);
case IJavaScriptElement.INITIALIZER:
return transplantHandle((IType) parent, (IInitializer) element);
case IJavaScriptElement.PACKAGE_DECLARATION:
return transplantHandle((IJavaScriptUnit) parent, (IPackageDeclaration) element);
case IJavaScriptElement.IMPORT_CONTAINER:
return transplantHandle((IJavaScriptUnit) parent, (IImportContainer) element);
case IJavaScriptElement.IMPORT_DECLARATION:
return transplantHandle((IImportContainer) parent, (IImportDeclaration) element);
case IJavaScriptElement.LOCAL_VARIABLE:
return transplantHandle((ILocalVariable) element);
case IJavaScriptElement.TYPE_PARAMETER:
return transplantHandle((IMember) parent, (ITypeParameter) element);
default:
throw new IllegalArgumentException(element.toString());
}
}
protected IJavaScriptModel transplantHandle(IJavaScriptModel element) {
return element;
}
protected IJavaScriptProject transplantHandle(IJavaScriptProject element) {
return element;
}
protected IPackageFragmentRoot transplantHandle(IJavaScriptProject parent, IPackageFragmentRoot element) {
return element;
}
protected IPackageFragment transplantHandle(IPackageFragmentRoot parent, IPackageFragment element) {
return parent.getPackageFragment(element.getElementName());
}
protected IJavaScriptUnit transplantHandle(IPackageFragment parent, IJavaScriptUnit element) {
return parent.getJavaScriptUnit(element.getElementName());
}
protected IClassFile transplantHandle(IPackageFragment parent, IClassFile element) {
return parent.getClassFile(element.getElementName());
}
protected IType transplantHandle(IJavaScriptElement parent, IType element) {
switch (parent.getElementType()) {
case IJavaScriptElement.JAVASCRIPT_UNIT:
return ((IJavaScriptUnit) parent).getType(element.getElementName());
case IJavaScriptElement.CLASS_FILE:
return ((IClassFile) parent).getType();
case IJavaScriptElement.METHOD:
return ((IFunction) parent).getType(element.getElementName(), element.getOccurrenceCount());
case IJavaScriptElement.FIELD:
return ((IField) parent).getType(element.getElementName(), element.getOccurrenceCount());
case IJavaScriptElement.INITIALIZER:
return ((IInitializer) parent).getType(element.getElementName(), element.getOccurrenceCount());
case IJavaScriptElement.TYPE:
return ((IType) parent).getType(element.getElementName(), element.getOccurrenceCount());
default:
throw new IllegalStateException(element.toString());
}
}
protected IField transplantHandle(IType parent, IField element) {
return parent.getField(element.getElementName());
}
protected IFunction transplantHandle(IType parent, IFunction element) {
return parent.getFunction(element.getElementName(), element.getParameterTypes());
}
protected IInitializer transplantHandle(IType parent, IInitializer element) {
return parent.getInitializer(element.getOccurrenceCount());
}
protected IPackageDeclaration transplantHandle(IJavaScriptUnit parent, IPackageDeclaration element) {
return parent.getPackageDeclaration(element.getElementName());
}
protected IImportContainer transplantHandle(IJavaScriptUnit parent, IImportContainer element) {
return parent.getImportContainer();
}
protected IImportDeclaration transplantHandle(IImportContainer parent, IImportDeclaration element) {
return parent.getImport(element.getElementName());
}
protected ILocalVariable transplantHandle(ILocalVariable element) {
return element; // can't get from parent!
}
protected ITypeParameter transplantHandle(IMember parent, ITypeParameter element) {
switch (parent.getElementType()) {
case IJavaScriptElement.TYPE:
return ((IType) parent).getTypeParameter(element.getElementName());
case IJavaScriptElement.METHOD:
return ((IFunction) parent).getTypeParameter(element.getElementName());
default:
throw new IllegalStateException(element.toString());
}
}
}