| /******************************************************************************* |
| * Copyright (c) 2005 BEA Systems, Inc. |
| * 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: |
| * tyeung@bea.com - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.jdt.apt.core.internal.declaration; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.List; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.jdt.apt.core.internal.env.BaseProcessorEnv; |
| import org.eclipse.jdt.core.dom.ASTNode; |
| import org.eclipse.jdt.core.dom.CompilationUnit; |
| import org.eclipse.jdt.core.dom.IBinding; |
| |
| import com.sun.mirror.declaration.Modifier; |
| |
| public abstract class DeclarationImpl extends EclipseDeclarationImpl { |
| |
| /** the type binding corresponding to this declaration */ |
| protected final IBinding _binding; |
| DeclarationImpl(final IBinding binding, final BaseProcessorEnv env ) |
| { |
| super(env); |
| assert binding != null : "binding cannot be null"; //$NON-NLS-1$ |
| _binding = binding; |
| } |
| |
| public boolean equals(Object obj) |
| { |
| if(obj instanceof DeclarationImpl) |
| return _binding.isEqualTo( ((DeclarationImpl)obj)._binding ); |
| |
| return false; |
| } |
| |
| public int hashCode(){ |
| final String key = getDeclarationBinding().getKey(); |
| return key == null ? 0 : key.hashCode(); |
| } |
| |
| /** |
| * @return the binding that corresponds to the original declaration. |
| * For parameterized type or raw type, return the generic type declaration binding. |
| * For parameterized method, return the method declaration binding that has the |
| * type parameters not the one with the parameters substituted with type arguments. |
| * In other cases, simply return the same binding. |
| */ |
| public abstract IBinding getDeclarationBinding(); |
| |
| public Collection<Modifier> getModifiers() |
| { |
| final int modBits = getDeclarationBinding().getModifiers(); |
| final List<Modifier> mods = new ArrayList<Modifier>(4); |
| if( org.eclipse.jdt.core.dom.Modifier.isAbstract(modBits) ) |
| mods.add(Modifier.ABSTRACT); |
| if( org.eclipse.jdt.core.dom.Modifier.isFinal(modBits) ) |
| mods.add(Modifier.FINAL); |
| if( org.eclipse.jdt.core.dom.Modifier.isNative(modBits) ) |
| mods.add(Modifier.NATIVE); |
| if( org.eclipse.jdt.core.dom.Modifier.isPrivate(modBits) ) |
| mods.add(Modifier.PRIVATE); |
| if( org.eclipse.jdt.core.dom.Modifier.isProtected(modBits) ) |
| mods.add(Modifier.PROTECTED); |
| if( org.eclipse.jdt.core.dom.Modifier.isPublic(modBits) ) |
| mods.add(Modifier.PUBLIC); |
| if( org.eclipse.jdt.core.dom.Modifier.isStatic(modBits) ) |
| mods.add(Modifier.STATIC); |
| if( org.eclipse.jdt.core.dom.Modifier.isStrictfp(modBits) ) |
| mods.add(Modifier.STRICTFP); |
| if( org.eclipse.jdt.core.dom.Modifier.isSynchronized(modBits) ) |
| mods.add(Modifier.SYNCHRONIZED); |
| if( org.eclipse.jdt.core.dom.Modifier.isTransient(modBits) ) |
| mods.add(Modifier.TRANSIENT); |
| if( org.eclipse.jdt.core.dom.Modifier.isVolatile(modBits) ) |
| mods.add(Modifier.VOLATILE); |
| return mods; |
| } |
| |
| public boolean isBindingBased(){ return true; } |
| |
| ASTNode getAstNode(){ |
| if( !isFromSource() ) return null; |
| return _env.getASTNodeForBinding(getDeclarationBinding()); |
| } |
| |
| CompilationUnit getCompilationUnit(){ |
| if( !isFromSource() ) return null; |
| return _env.getCompilationUnitForBinding(getDeclarationBinding()); |
| } |
| |
| public IFile getResource(){ |
| if( isFromSource() ){ |
| final IBinding binding = getDeclarationBinding(); |
| return _env.getDeclaringFileForBinding(binding); |
| } |
| return null; |
| } |
| |
| } |