Package org.eclipse.jdt.internal.core

Source Code of org.eclipse.jdt.internal.core.Annotation

/*******************************************************************************
* Copyright (c) 2000, 2009 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.jdt.internal.core;

import org.eclipse.jdt.core.IAnnotation;
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IMemberValuePair;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.SourceRange;
import org.eclipse.jdt.internal.compiler.env.IBinaryAnnotation;
import org.eclipse.jdt.internal.compiler.env.IBinaryElementValuePair;
import org.eclipse.jdt.internal.core.util.Util;

public class Annotation extends SourceRefElement implements IAnnotation {

  public static final IAnnotation[] NO_ANNOTATIONS = new IAnnotation[0];
  public static final IMemberValuePair[] NO_MEMBER_VALUE_PAIRS = new IMemberValuePair[0];

  protected String name;
  // require to distinguish same annotations in different member value pairs
  protected String memberValuePairName;

  public Annotation(JavaElement parent, String name) {
    this(parent, name, null);
  }

  public Annotation(JavaElement parent, String name, String memberValuePairName) {
    super(parent);
    this.name = name;
    this.memberValuePairName = memberValuePairName;
  }

  public boolean equals(Object o) {
    if (!(o instanceof Annotation)) {
      return false;
    }
    Annotation other = (Annotation) o;
    if (this.memberValuePairName == null) {
      if (other.memberValuePairName != null)
        return false;
    } else if (!this.memberValuePairName.equals(other.memberValuePairName)) {
      return false;
    }
    // name equality is checked as part of the super.equals(..)
    return super.equals(o);
  }

  public IMember getDeclaringMember() {
    return (IMember) getParent();
  }

  public String getElementName() {
    return this.name;
  }

  public int getElementType() {
    return ANNOTATION;
  }

  protected char getHandleMementoDelimiter() {
    return JavaElement.JEM_ANNOTATION;
  }

  public IMemberValuePair[] getMemberValuePairs() throws JavaModelException {
    Object info = getElementInfo();
    if (info instanceof AnnotationInfo)
      return ((AnnotationInfo) info).members;
    IBinaryElementValuePair[] binaryAnnotations = ((IBinaryAnnotation) info).getElementValuePairs();
    int length = binaryAnnotations.length;
    IMemberValuePair[] result = new IMemberValuePair[length];
    for (int i = 0; i < length; i++) {
      IBinaryElementValuePair binaryAnnotation = binaryAnnotations[i];
      MemberValuePair memberValuePair = new MemberValuePair(new String(binaryAnnotation.getName()));
      memberValuePair.value = Util.getAnnotationMemberValue(this, memberValuePair, binaryAnnotation.getValue());
      result[i] = memberValuePair;
    }
    return result;
  }

  public ISourceRange getNameRange() throws JavaModelException {
    SourceMapper mapper= getSourceMapper();
    if (mapper != null) {
      ClassFile classFile = (ClassFile)getClassFile();
      if (classFile != null) {
        // ensure the class file's buffer is open so that source ranges are computed
        classFile.getBuffer();
        return mapper.getNameRange(this);
      }
    }
    Object info = getElementInfo();
    if (info instanceof AnnotationInfo) {
      AnnotationInfo annotationInfo = (AnnotationInfo) info;
      return new SourceRange(annotationInfo.nameStart, annotationInfo.nameEnd - annotationInfo.nameStart + 1);
    }
    return null;
  }

  /*
   * @see ISourceReference
   */
  public ISourceRange getSourceRange() throws JavaModelException {
    SourceMapper mapper= getSourceMapper();
    if (mapper != null) {
      // ensure the class file's buffer is open so that source ranges are computed
      ClassFile classFile = (ClassFile)getClassFile();
      if (classFile != null) {
        classFile.getBuffer();
        return mapper.getSourceRange(this);
      }
    }
    return super.getSourceRange();
  }

  public IClassFile getClassFile() {
    return ((JavaElement)getParent()).getClassFile();
  }

  public int hashCode() {
    final int prime = 31;
    int result = super.hashCode();
    result = prime * result + ((this.memberValuePairName == null) ? 0 : this.memberValuePairName.hashCode());
    result = prime * result + this.name.hashCode();
    return result;
  }

  protected void toStringName(StringBuffer buffer) {
    buffer.append('@');
    buffer.append(getElementName());
  }
}
TOP

Related Classes of org.eclipse.jdt.internal.core.Annotation

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.