Buggy code:
} type . name = typeInfo . getName ( ) ; int start ; int end ; type . sourceStart = start = typeInfo . getNameSourceStart ( ) ; type . sourceEnd = end = typeInfo . getNameSourceEnd ( ) ; type . modifiers = typeInfo . getModifiers ( ) ; type . declarationSourceStart = typeInfo . getDeclarationSourceStart ( ) ; type . declarationSourceEnd = typeInfo . getDeclarationSourceEnd ( ) ; type . bodyEnd = type . declarationSourceEnd ; char [ ] [ ] typeParameterNames = typeInfo . getTypeParameterNames ( ) ; if ( ( typeParameterNames . length ) > 0 ) { int parameterCount = typeParameterNames . length ; char [ ] [ ] [ ] typeParameterBounds = typeInfo . getTypeParameterBounds ( ) ; type . typeParameters = new TypeParameter [ parameterCount ] ; for ( int i = 0 ; i < parameterCount ; i ++ ) { type . typeParameters [ i ] = createTypeParameter ( typeParameterNames [ i ] , typeParameterBounds [ i ] , start , end ) ; } } if ( ( typeInfo . getSuperclassName ( ) ) != null ) { type . superclass = createTypeReference ( typeInfo . getSuperclassName ( ) , start , end ) ; type . superclass . bits |= ASTNode . IsSuperType ; } char [ ] [ ] interfaceNames = typeInfo . getInterfaceNames ( ) ; int interfaceCount = ( interfaceNames == null ) ? 0 : interfaceNames . length ; if ( interfaceCount > 0 ) { type . superInterfaces = new TypeReference [ interfaceCount ] ; for ( int i = 0 ; i < interfaceCount ; i ++ ) { type . superInterfaces [ i ] = createTypeReference ( interfaceNames [ i ] , start , end ) ; type . superInterfaces [ i ] . bits |= ASTNode . IsSuperType ; } } if ( ( ( this . flags ) & ( SourceTypeConverter . MEMBER_TYPE ) ) != 0 ) { ISourceType [ ] sourceMemberTypes = typeInfo . getMemberTypes ( ) ; int sourceMemberTypeCount = sourceMemberTypes . length ; type . memberTypes = new TypeDeclaration [ sourceMemberTypeCount ] ; for ( int i = 0 ; i < sourceMemberTypeCount ; i ++ ) { type . memberTypes [ i ] = convert ( ( ( SourceTypeElementInfo ) ( sourceMemberTypes [ i ] ) ) , compilationResult ) ; } } InitializerElementInfo [ ] initializers = null ; int initializerCount = 0 ; if ( ( ( this . flags ) & ( SourceTypeConverter . LOCAL_TYPE ) ) != 0 ) { initializers = typeInfo . getInitializers ( ) ; initializerCount = initializers . length ; } ISourceField [ ] sourceFields = null ; int sourceFieldCount = 0 ; if ( ( ( this . flags ) & ( SourceTypeConverter . FIELD ) ) != 0 ) { sourceFields = typeInfo . getFields ( ) ; sourceFieldCount = sourceFields . length ; } int length = initializerCount + sourceFieldCount ; if ( length > 0 ) { type . fields = new FieldDeclaration [ length ] ; for ( int i = 0 ; i < initializerCount ; i ++ ) { type . fields [ i ] = convert ( initializers [ i ] , compilationResult ) ; } int index = 0 ; for ( int i = initializerCount ; i < length ; i ++ ) { type . fields [ i ] = convert ( ( ( SourceFieldElementInfo ) ( sourceFields [ ( index ++ ) ] ) ) , type , compilationResult ) ; } } boolean needConstructor = ( ( this . flags ) & ( SourceTypeConverter . CONSTRUCTOR ) ) != 0 ; boolean needMethod = ( ( this . flags ) & ( SourceTypeConverter . METHOD ) ) != 0 ; if ( needConstructor || needMethod ) { ISourceMethod [ ] sourceMethods = typeInfo . getMethods ( ) ; int sourceMethodCount = sourceMethods . length ; int extraConstructor = 0 ; int methodCount = 0 ; <START_BUG> int kind = type . getKind ( ) ; <END_BUG> boolean isAbstract = ( kind == ( INTERFACE ) ) || ( kind == ( ANNOTATION_TYPE ) ) ; if ( ! isAbstract ) { extraConstructor = ( needConstructor ) ? 1 : 0 ; for ( int i = 0 ; i < sourceMethodCount ; i ++ ) { if ( sourceMethods [ i ] . isConstructor ( ) ) { if ( needConstructor ) { extraConstructor = 0 ; methodCount ++ ; } } else if ( needMethod ) { methodCount ++ ; } } } else { methodCount = ( needMethod ) ? sourceMethodCount : 0 ; } type . methods = new AbstractMethodDeclaration [ methodCount + extraConstructor ] ; if ( extraConstructor != 0 ) { type . methods [ 0 ] = type . createDefaultConstructor ( false , false ) ; } int index = 0 ; boolean hasAbstractMethods = false ; for ( int i = 0 ; i < sourceMethodCount ; i ++ ) { ISourceMethod sourceMethod = sourceMethods [ i ] ; boolean isConstructor = sourceMethod . isConstructor ( ) ; if ( ( ( sourceMethod . getModifiers ( ) ) & ( Flags . AccAbstract ) ) != 0 ) { hasAbstractMethods = true ; } if ( ( isConstructor && needConstructor ) || ( ( ! isConstructor ) && needMethod ) ) { AbstractMethodDeclaration method = convert ( ( ( SourceMethodElementInfo ) ( sourceMethod ) ) , compilationResult ) ; if ( isAbstract || ( method . isAbstract ( ) ) ) { method . modifiers |= AccSemicolonBody ; } type . methods [ ( extraConstructor + ( index ++ ) ) ] = method ; } } if ( hasAbstractMethods ) type . bits |= ASTNode . HasAbstractMethods ; } return type ;

Fix:
int kind = type . kind ( ) ;