<s> package org . eclipse . jdt . core . dom ; import org . eclipse . jdt . core . IJavaElement ; import org . eclipse . jdt . internal . compiler . impl . Constant ; import org . eclipse . jdt . internal . compiler . lookup . ElementValuePair ; import org . eclipse . jdt . internal . compiler . lookup . MethodBinding ; import org . eclipse . jdt . internal . compiler . lookup . TypeIds ; class MemberValuePairBinding implements IMemberValuePairBinding { static final MemberValuePairBinding [ ] NoPair = new MemberValuePairBinding [ 0 ] ; private static final Object NoValue = new Object ( ) ; private static final Object [ ] EmptyArray = new Object [ 0 ] ; private ElementValuePair internalPair ; protected Object value = null ; protected BindingResolver bindingResolver ; static void appendValue ( Object value , StringBuffer buffer ) { if ( value instanceof Object [ ] ) { Object [ ] values = ( Object [ ] ) value ; buffer . append ( '{' ) ; for ( int i = 0 , l = values . length ; i < l ; i ++ ) { if ( i != 0 ) buffer . append ( ", " ) ; appendValue ( values [ i ] , buffer ) ; } buffer . append ( '}' ) ; } else if ( value instanceof ITypeBinding ) { buffer . append ( ( ( ITypeBinding ) value ) . getName ( ) ) ; buffer . append ( ".class" ) ; } else { buffer . append ( value ) ; } } static Object buildDOMValue ( final Object internalObject , BindingResolver resolver ) { if ( internalObject == null ) return null ; if ( internalObject instanceof Constant ) { Constant constant = ( Constant ) internalObject ; switch ( constant . typeID ( ) ) { case TypeIds . T_boolean : return Boolean . valueOf ( constant . booleanValue ( ) ) ; case TypeIds . T_byte : return new Byte ( constant . byteValue ( ) ) ; case TypeIds . T_char : return new Character ( constant . charValue ( ) ) ; case TypeIds . T_double : return new Double ( constant . doubleValue ( ) ) ; case TypeIds . T_float : return new Float ( constant . floatValue ( ) ) ; case TypeIds . T_int : return new Integer ( constant . intValue ( ) ) ; case TypeIds . T_long : return new Long ( constant . longValue ( ) ) ; case TypeIds . T_short : return new Short ( constant . shortValue ( ) ) ; case TypeIds . T_JavaLangString : return constant . stringValue ( ) ; } } else if ( internalObject instanceof org . eclipse . jdt . internal . compiler . lookup . TypeBinding ) { return resolver . getTypeBinding ( ( org . eclipse . jdt . internal . compiler . lookup . TypeBinding ) internalObject ) ; } else if ( internalObject instanceof org . eclipse . jdt . internal . compiler . lookup . AnnotationBinding ) { return resolver . getAnnotationInstance ( ( org . eclipse . jdt . internal . compiler . lookup . AnnotationBinding ) internalObject ) ; } else if ( internalObject instanceof org . eclipse . jdt . internal . compiler . lookup . FieldBinding ) { return resolver . getVariableBinding ( ( org . eclipse . jdt . internal . compiler . lookup . FieldBinding ) internalObject ) ; } else if ( internalObject instanceof Object [ ] ) { Object [ ] elements = ( Object [ ] ) internalObject ; int length = elements . length ; Object [ ] values = length == 0 ? EmptyArray : new Object [ length ] ; for ( int i = 0 ; i < length ; i ++ ) values [ i ] = buildDOMValue ( elements [ i ] , resolver ) ; return values ; } return null ; } MemberValuePairBinding ( ElementValuePair pair , BindingResolver resolver ) { this . internalPair = pair ; this . bindingResolver = resolver ; } public IAnnotationBinding [ ] getAnnotations ( ) { return AnnotationBinding . NoAnnotations ; } public IJavaElement getJavaElement ( ) { return null ; } public String getKey ( ) { return null ; } public int getKind ( ) { return IBinding . MEMBER_VALUE_PAIR ; } public IMethodBinding getMethodBinding ( ) { return this . bindingResolver . getMethodBinding ( this . internalPair . getMethodBinding ( ) ) ; } public int getModifiers ( ) { return Modifier . NONE ; } public String getName ( ) { if ( this . internalPair == null ) return null ; final char [ ] membername = this . internalPair . getName ( ) ; return membername == null ? null : new String ( membername ) ; } public Object getValue ( ) { if ( this . value == null ) init ( ) ; return this . value == NoValue ? null : this . value ; } private void init ( ) { this . value = buildDOMValue ( this . internalPair . getValue ( ) , this . bindingResolver ) ; if ( this . value == null ) this . value = NoValue ; } char [ ] internalName ( ) { return this . internalPair == null ? null : this . internalPair . getName ( ) ; } public boolean isDefault ( ) { Object value2 = getValue ( ) ; Object defaultValue = getMethodBinding ( ) . getDefaultValue ( ) ; if ( value2 instanceof IBinding ) { if ( defaultValue instanceof IBinding ) { return ( ( IBinding ) value2 ) . isEqualTo ( ( IBinding ) defaultValue ) ; } return false ; } if ( defaultValue == null ) return false ; return defaultValue . equals ( value2 ) ; } public boolean isDeprecated ( ) { MethodBinding methodBinding = this . internalPair . getMethodBinding ( ) ; return methodBinding == null ? false : methodBinding . isDeprecated ( ) ; } public boolean isEqualTo ( IBinding binding ) { if ( this == binding ) return true ; if ( binding . getKind ( ) != IBinding . MEMBER_VALUE_PAIR ) return false ; IMemberValuePairBinding other = ( IMemberValuePairBinding ) binding ; if ( ! getMethodBinding ( ) . isEqualTo ( other . getMethodBinding ( ) ) ) { return false ; } Object otherValue = other . getValue ( ) ; Object currentValue = getValue ( ) ; if ( currentValue == null ) { return otherValue == null ; } if ( currentValue instanceof IBinding ) { if ( otherValue instanceof IBinding ) { return ( ( IBinding ) currentValue ) . isEqualTo ( ( IBinding ) otherValue ) ; } return false ; } return currentValue . equals ( otherValue ) ; } public boolean isRecovered ( ) { return false ; } public boolean isSynthetic ( ) { return false ; } public String toString ( ) { StringBuffer buffer = new StringBuffer ( ) ; buffer . append ( getName ( ) ) ; buffer . append ( " = " ) ; appendValue ( getValue ( ) , buffer ) ; return buffer . toString ( ) ; } } </s>