| /******************************************************************************* |
| * Copyright (c) 2006, 2008 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.rename; |
| |
| import org.eclipse.jdt.core.IAnnotatable; |
| import org.eclipse.jdt.core.IAnnotation; |
| import org.eclipse.jdt.core.IClassFile; |
| import org.eclipse.jdt.core.ICompilationUnit; |
| import org.eclipse.jdt.core.IField; |
| import org.eclipse.jdt.core.IImportContainer; |
| import org.eclipse.jdt.core.IImportDeclaration; |
| import org.eclipse.jdt.core.IInitializer; |
| import org.eclipse.jdt.core.IJavaElement; |
| import org.eclipse.jdt.core.IJavaModel; |
| import org.eclipse.jdt.core.IJavaProject; |
| import org.eclipse.jdt.core.ILocalVariable; |
| import org.eclipse.jdt.core.IMember; |
| import org.eclipse.jdt.core.IMethod; |
| import org.eclipse.jdt.core.IOrdinaryClassFile; |
| import org.eclipse.jdt.core.IPackageDeclaration; |
| import org.eclipse.jdt.core.IPackageFragment; |
| import org.eclipse.jdt.core.IPackageFragmentRoot; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.ITypeParameter; |
| |
| public class GenericRefactoringHandleTransplanter { |
| |
| public final IJavaElement transplantHandle(IJavaElement element) { |
| IJavaElement parent= element.getParent(); |
| if (parent != null) |
| parent= transplantHandle(parent); // recursive |
| |
| switch (element.getElementType()) { |
| case IJavaElement.JAVA_MODEL: |
| return transplantHandle((IJavaModel) element); |
| |
| case IJavaElement.JAVA_PROJECT: |
| return transplantHandle((IJavaProject) element); |
| |
| case IJavaElement.PACKAGE_FRAGMENT_ROOT: |
| return transplantHandle((IJavaProject) parent, (IPackageFragmentRoot) element); |
| |
| case IJavaElement.PACKAGE_FRAGMENT: |
| return transplantHandle((IPackageFragmentRoot) parent, (IPackageFragment) element); |
| |
| case IJavaElement.COMPILATION_UNIT: |
| return transplantHandle((IPackageFragment) parent, (ICompilationUnit) element); |
| |
| case IJavaElement.CLASS_FILE: |
| return transplantHandle((IPackageFragment) parent, (IClassFile) element); |
| |
| case IJavaElement.TYPE: |
| return transplantHandle(parent, (IType) element); |
| |
| case IJavaElement.FIELD: |
| return transplantHandle((IType) parent, (IField) element); |
| |
| case IJavaElement.METHOD: |
| return transplantHandle((IType) parent, (IMethod) element); |
| |
| case IJavaElement.INITIALIZER: |
| return transplantHandle((IType) parent, (IInitializer) element); |
| |
| case IJavaElement.PACKAGE_DECLARATION: |
| return transplantHandle((ICompilationUnit) parent, (IPackageDeclaration) element); |
| |
| case IJavaElement.IMPORT_CONTAINER: |
| return transplantHandle((ICompilationUnit) parent, (IImportContainer) element); |
| |
| case IJavaElement.IMPORT_DECLARATION: |
| return transplantHandle((IImportContainer) parent, (IImportDeclaration) element); |
| |
| case IJavaElement.LOCAL_VARIABLE: |
| return transplantHandle((ILocalVariable) element); |
| |
| case IJavaElement.TYPE_PARAMETER: |
| return transplantHandle((IMember) parent, (ITypeParameter) element); |
| |
| case IJavaElement.ANNOTATION: |
| return transplantHandle((IAnnotatable) parent, (IAnnotation) element); |
| |
| default: |
| throw new IllegalArgumentException(element.toString()); |
| } |
| |
| } |
| |
| protected IJavaModel transplantHandle(IJavaModel element) { |
| return element; |
| } |
| |
| protected IJavaProject transplantHandle(IJavaProject element) { |
| return element; |
| } |
| |
| protected IPackageFragmentRoot transplantHandle(IJavaProject parent, IPackageFragmentRoot element) { |
| return element; |
| } |
| |
| protected IPackageFragment transplantHandle(IPackageFragmentRoot parent, IPackageFragment element) { |
| return parent.getPackageFragment(element.getElementName()); |
| } |
| |
| protected ICompilationUnit transplantHandle(IPackageFragment parent, ICompilationUnit element) { |
| return parent.getCompilationUnit(element.getElementName()); |
| } |
| |
| protected IClassFile transplantHandle(IPackageFragment parent, IClassFile element) { |
| return parent.getClassFile(element.getElementName()); |
| } |
| |
| protected IType transplantHandle(IJavaElement parent, IType element) { |
| switch (parent.getElementType()) { |
| case IJavaElement.COMPILATION_UNIT: |
| return ((ICompilationUnit) parent).getType(element.getElementName()); |
| case IJavaElement.CLASS_FILE: |
| if (parent instanceof IOrdinaryClassFile) |
| return ((IOrdinaryClassFile) parent).getType(); |
| throw new IllegalStateException(element.toString()); |
| case IJavaElement.METHOD: |
| return ((IMethod) parent).getType(element.getElementName(), element.getOccurrenceCount()); |
| case IJavaElement.FIELD: |
| return ((IField) parent).getType(element.getElementName(), element.getOccurrenceCount()); |
| case IJavaElement.INITIALIZER: |
| return ((IInitializer) parent).getType(element.getElementName(), element.getOccurrenceCount()); |
| case IJavaElement.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 IMethod transplantHandle(IType parent, IMethod element) { |
| return parent.getMethod(element.getElementName(), element.getParameterTypes()); |
| } |
| |
| protected IInitializer transplantHandle(IType parent, IInitializer element) { |
| return parent.getInitializer(element.getOccurrenceCount()); |
| } |
| |
| protected IPackageDeclaration transplantHandle(ICompilationUnit parent, IPackageDeclaration element) { |
| return parent.getPackageDeclaration(element.getElementName()); |
| } |
| |
| protected IImportContainer transplantHandle(ICompilationUnit 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 IAnnotation transplantHandle(IAnnotatable parent, IAnnotation element) { |
| return parent.getAnnotation(element.getElementName()); |
| } |
| |
| protected ITypeParameter transplantHandle(IMember parent, ITypeParameter element) { |
| switch (parent.getElementType()) { |
| case IJavaElement.TYPE: |
| return ((IType) parent).getTypeParameter(element.getElementName()); |
| case IJavaElement.METHOD: |
| return ((IMethod) parent).getTypeParameter(element.getElementName()); |
| default: |
| throw new IllegalStateException(element.toString()); |
| } |
| } |
| } |