Buggy code:
public class InterTypeConstructorDeclaration extends InterTypeDeclaration { private MethodDeclaration preMethod ; private ExplicitConstructorCall explicitConstructorCall = null ; public InterTypeConstructorDeclaration ( CompilationResult result , TypeReference onType ) { } public void parseStatements ( Parser parser , CompilationUnitDeclaration unit ) { } public void resolve ( ClassScope upperScope ) { } private MethodDeclaration makePreMethod ( ClassScope scope , ExplicitConstructorCall explicitConstructorCall ) { EclipseFactory world = EclipseFactory . fromScopeLookupEnvironment ( scope ) ; TypeX aspectTypeX = EclipseFactory . fromBinding ( declaringClass ) ; TypeX targetTypeX = EclipseFactory . fromBinding ( onTypeBinding ) ; <START_BUG> ArrayBinding objectArrayBinding = scope . createArray ( scope . getJavaLangObject ( ) , 1 ) ; <END_BUG> MethodDeclaration pre = new MethodDeclaration ( compilationResult ) ; pre . modifiers = ( AccPublic ) | ( AccStatic ) ; pre . returnType = AstUtil . makeTypeReference ( objectArrayBinding ) ; pre . selector = NameMangler . postIntroducedConstructor ( aspectTypeX , targetTypeX ) . toCharArray ( ) ; pre . arguments = AstUtil . copyArguments ( this . arguments ) ; pre . scope = new MethodScope ( scope , pre , true ) ; pre . binding = world . makeMethodBinding ( AjcMemberMaker . preIntroducedConstructor ( aspectTypeX , targetTypeX , EclipseFactory . fromBindings ( parameters ) ) ) ; pre . bindArguments ( ) ; pre . bindThrownExceptions ( ) ; if ( explicitConstructorCall == null ) { pre . statements = new Statement [ ] { } ; } else { pre . statements = new Statement [ ] { explicitConstructorCall } ; } InterTypeScope newParent = new InterTypeScope ( scope , onTypeBinding ) ; pre . scope . parent = newParent ; pre . resolveStatements ( ) ; int nParams = pre . arguments . length ; MethodBinding explicitConstructor = null ; if ( explicitConstructorCall != null ) { explicitConstructor = explicitConstructorCall . binding ; if ( explicitConstructor . alwaysNeedsAccessMethod ( ) ) { explicitConstructor = explicitConstructor . getAccessMethod ( true ) ; } } int nExprs ; if ( explicitConstructor == null ) nExprs = 0 ; else nExprs = explicitConstructor . parameters . length ; ArrayInitializer init = new ArrayInitializer ( ) ; init . expressions = new Expression [ nExprs + nParams ] ; int index = 0 ; for ( int i = 0 ; i < nExprs ; i ++ ) { if ( i >= ( explicitConstructorCall . arguments . length ) ) { init . expressions [ ( index ++ ) ] = new NullLiteral ( 0 , 0 ) ; continue ; } Expression arg = explicitConstructorCall . arguments [ i ] ; ResolvedMember conversionMethod = AjcMemberMaker . toObjectConversionMethod ( EclipseFactory . fromBinding ( explicitConstructorCall . binding . parameters [ i ] ) ) ; if ( conversionMethod != null ) { arg = new KnownMessageSend ( world . makeMethodBindingForCall ( conversionMethod ) , new CastExpression ( new NullLiteral ( 0 , 0 ) , AstUtil . makeTypeReference ( world . makeTypeBinding ( CONVERSIONS_TYPE ) ) ) , new Expression [ ] { arg } ) ; } init . expressions [ ( index ++ ) ] = arg ; } for ( int i = 0 ; i < nParams ; i ++ ) { LocalVariableBinding binding = pre . arguments [ i ] . binding ; Expression arg = AstUtil . makeResolvedLocalVariableReference ( binding ) ; ResolvedMember conversionMethod = AjcMemberMaker . toObjectConversionMethod ( EclipseFactory . fromBinding ( binding . type ) ) ; if ( conversionMethod != null ) { arg = new KnownMessageSend ( world . makeMethodBindingForCall ( conversionMethod ) , new CastExpression ( new NullLiteral ( 0 , 0 ) , AstUtil . makeTypeReference ( world . makeTypeBinding ( CONVERSIONS_TYPE ) ) ) , new Expression [ ] { arg } ) ; } init . expressions [ ( index ++ ) ] = arg ; } init . binding = objectArrayBinding ; ArrayAllocationExpression newArray = new ArrayAllocationExpression ( ) ; newArray . initializer = init ; newArray . type = AstUtil . makeTypeReference ( scope . getJavaLangObject ( ) ) ; newArray . dimensions = new Expression [ 1 ] ; newArray . constant = NotAConstant ; pre . statements = new Statement [ ] { new ReturnStatement ( newArray , 0 , 0 ) } ; return pre ; } public EclipseTypeMunger build ( ClassScope classScope ) { } private AjAttribute makeAttribute ( EclipseFactory world ) { } public void generateCode ( ClassScope classScope , ClassFile classFile ) { } protected Kind getShadowKindForBody ( ) { } }

Fix:
ArrayBinding objectArrayBinding = scope . createArrayType ( scope . getJavaLangObject ( ) , 1 ) ;