| /******************************************************************************* |
| * Copyright (c) 2005, 2007 Oracle. 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: |
| * Oracle - initial API and implementation |
| ******************************************************************************/ |
| package org.eclipse.jpt.core.internal.jdtutility; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| import org.eclipse.jdt.core.IField; |
| import org.eclipse.jdt.core.IMethod; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.JavaModelException; |
| import org.eclipse.jdt.core.dom.ASTNode; |
| import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; |
| import org.eclipse.jdt.core.dom.BodyDeclaration; |
| import org.eclipse.jdt.core.dom.CompilationUnit; |
| import org.eclipse.jdt.core.dom.ITypeBinding; |
| import org.eclipse.jpt.utility.internal.CommandExecutorProvider; |
| |
| public class Type extends Member { |
| |
| public Type(IType type, CommandExecutorProvider modifySharedDocumentCommandExecutorProvider) { |
| super(type, modifySharedDocumentCommandExecutorProvider); |
| } |
| |
| public Type(IType type, CommandExecutorProvider modifySharedDocumentCommandExecutorProvider, AnnotationEditFormatter annotationEditFormatter) { |
| super(type, modifySharedDocumentCommandExecutorProvider, annotationEditFormatter); |
| } |
| |
| @Override |
| public IType getJdtMember() { |
| return (IType) super.getJdtMember(); |
| } |
| |
| @Override |
| public Type topLevelDeclaringType() { |
| return (this.getDeclaringType() == null) ? this : super.topLevelDeclaringType(); |
| } |
| |
| public IType[] declaredTypes() { |
| try { |
| return getJdtMember().getTypes(); |
| } |
| catch(JavaModelException e) { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| public IField[] fields() { |
| try { |
| return getJdtMember().getFields(); |
| } |
| catch(JavaModelException e) { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| public IMethod[] methods() { |
| try { |
| return getJdtMember().getMethods(); |
| } |
| catch(JavaModelException e) { |
| throw new RuntimeException(e); |
| } |
| } |
| |
| // ********** Member implementation ********** |
| |
| @Override |
| public AbstractTypeDeclaration bodyDeclaration(CompilationUnit astRoot) { |
| Type declaringType = getDeclaringType(); |
| if (declaringType != null) { |
| return typeDeclaration(declaringType.bodyDeclaration(astRoot)); |
| } |
| return typeDeclaration(this.types(astRoot)); |
| } |
| |
| public AbstractTypeDeclaration typeDeclaration(AbstractTypeDeclaration declaringTypeDeclaration) { |
| return typeDeclaration(this.types(declaringTypeDeclaration)); |
| } |
| |
| private AbstractTypeDeclaration typeDeclaration(List<AbstractTypeDeclaration> typeDeclarations) { |
| String name = this.getName(); |
| for (AbstractTypeDeclaration typeDeclaration : typeDeclarations) { |
| if (typeDeclaration.getName().getFullyQualifiedName().equals(name)) { |
| return typeDeclaration; |
| } |
| } |
| return null; |
| } |
| |
| @Override |
| public ITypeBinding binding(CompilationUnit astRoot) { |
| return bodyDeclaration(astRoot).resolveBinding(); |
| } |
| |
| // ********** miscellaneous ********** |
| |
| @SuppressWarnings("unchecked") |
| protected List<AbstractTypeDeclaration> types(CompilationUnit astRoot) { |
| return astRoot.types(); |
| } |
| |
| protected List<AbstractTypeDeclaration> types(AbstractTypeDeclaration typeDeclaration) { |
| List<AbstractTypeDeclaration> typeDeclarations = new ArrayList<AbstractTypeDeclaration>(); |
| for (BodyDeclaration bodyDeclaration : bodyDeclarations(typeDeclaration)) |
| if (bodyDeclaration.getNodeType() == ASTNode.TYPE_DECLARATION || |
| bodyDeclaration.getNodeType() == ASTNode.ANNOTATION_TYPE_DECLARATION || |
| bodyDeclaration.getNodeType() == ASTNode.ENUM_DECLARATION) { |
| typeDeclarations.add((AbstractTypeDeclaration) bodyDeclaration); |
| } |
| return typeDeclarations; |
| } |
| |
| @SuppressWarnings("unchecked") |
| protected List<BodyDeclaration> bodyDeclarations(AbstractTypeDeclaration typeDeclaration) { |
| return typeDeclaration.bodyDeclarations(); |
| } |
| |
| |
| } |