<s> package org . eclipse . jdt . internal . compiler . ast ; import org . eclipse . jdt . core . compiler . CharOperation ; import org . eclipse . jdt . internal . compiler . ASTVisitor ; import org . eclipse . jdt . internal . compiler . classfmt . ClassFileConstants ; import org . eclipse . jdt . internal . compiler . impl . Constant ; import org . eclipse . jdt . internal . compiler . lookup . * ; public class Argument extends LocalDeclaration { private final static char [ ] SET = "set" . toCharArray ( ) ; public Argument ( char [ ] name , long posNom , TypeReference tr , int modifiers ) { super ( name , ( int ) ( posNom >>> 32 ) , ( int ) posNom ) ; this . declarationSourceEnd = ( int ) posNom ; this . modifiers = modifiers ; this . type = tr ; this . bits |= ( IsLocalDeclarationReachable | IsArgument ) ; } public void bind ( MethodScope scope , TypeBinding typeBinding , boolean used ) { Binding existingVariable = scope . getBinding ( this . name , Binding . VARIABLE , this , false ) ; if ( existingVariable != null && existingVariable . isValidBinding ( ) ) { if ( existingVariable instanceof LocalVariableBinding && this . hiddenVariableDepth == 0 ) { scope . problemReporter ( ) . redefineArgument ( this ) ; } else { boolean isSpecialArgument = false ; if ( existingVariable instanceof FieldBinding ) { if ( scope . isInsideConstructor ( ) ) { isSpecialArgument = true ; } else { AbstractMethodDeclaration methodDecl = scope . referenceMethod ( ) ; if ( methodDecl != null && CharOperation . prefixEquals ( SET , methodDecl . selector ) ) { isSpecialArgument = true ; } } } scope . problemReporter ( ) . localVariableHiding ( this , existingVariable , isSpecialArgument ) ; } } if ( this . binding == null ) { this . binding = new LocalVariableBinding ( this , typeBinding , this . modifiers , true ) ; } else if ( ! this . binding . type . isValidBinding ( ) ) { AbstractMethodDeclaration methodDecl = scope . referenceMethod ( ) ; if ( methodDecl != null ) { MethodBinding methodBinding = methodDecl . binding ; if ( methodBinding != null ) { methodBinding . tagBits |= TagBits . HasUnresolvedArguments ; } } } scope . addLocalVariable ( this . binding ) ; resolveAnnotations ( scope , this . annotations , this . binding ) ; this . binding . declaration = this ; this . binding . useFlag = used ? LocalVariableBinding . USED : LocalVariableBinding . UNUSED ; } public int getKind ( ) { return ( this . bits & ASTNode . IsArgument ) != 0 ? PARAMETER : LOCAL_VARIABLE ; } public boolean isVarArgs ( ) { return this . type != null && ( this . type . bits & IsVarArgs ) != 0 ; } public StringBuffer print ( int indent , StringBuffer output ) { printIndent ( indent , output ) ; printModifiers ( this . modifiers , output ) ; if ( this . annotations != null ) printAnnotations ( this . annotations , output ) ; if ( this . type == null ) { output . append ( "<no type> " ) ; } else { this . type . print ( 0 , output ) . append ( ' ' ) ; } return output . append ( this . name ) ; } public StringBuffer printStatement ( int indent , StringBuffer output ) { return print ( indent , output ) . append ( ';' ) ; } public TypeBinding resolveForCatch ( BlockScope scope ) { TypeBinding exceptionType = this . type . resolveType ( scope , true ) ; boolean hasError ; if ( exceptionType == null ) { hasError = true ; } else { hasError = false ; switch ( exceptionType . kind ( ) ) { case Binding . PARAMETERIZED_TYPE : if ( exceptionType . isBoundParameterizedType ( ) ) { hasError = true ; scope . problemReporter ( ) . invalidParameterizedExceptionType ( exceptionType , this ) ; } break ; case Binding . TYPE_PARAMETER : scope . problemReporter ( ) . invalidTypeVariableAsException ( exceptionType , this ) ; hasError = true ; break ; } if ( exceptionType . findSuperTypeOriginatingFrom ( TypeIds . T_JavaLangThrowable , true ) == null && exceptionType . isValidBinding ( ) ) { scope . problemReporter ( ) . cannotThrowType ( this . type , exceptionType ) ; hasError = true ; } } Binding existingVariable = scope . getBinding ( this . name , Binding . VARIABLE , this , false ) ; if ( existingVariable != null && existingVariable . isValidBinding ( ) ) { if ( existingVariable instanceof LocalVariableBinding && this . hiddenVariableDepth == 0 ) { scope . problemReporter ( ) . redefineArgument ( this ) ; } else { scope . problemReporter ( ) . localVariableHiding ( this , existingVariable , false ) ; } } if ( ( this . type . bits & ASTNode . IsUnionType ) != 0 ) { this . binding = new CatchParameterBinding ( this , exceptionType , this . modifiers | ClassFileConstants . AccFinal , false ) ; this . binding . tagBits |= TagBits . MultiCatchParameter ; } else { this . binding = new CatchParameterBinding ( this , exceptionType , this . modifiers , false ) ; } resolveAnnotations ( scope , this . annotations , this . binding ) ; scope . addLocalVariable ( this . binding ) ; this . binding . setConstant ( Constant . NotAConstant ) ; if ( hasError ) return null ; return exceptionType ; } public void traverse ( ASTVisitor visitor , BlockScope scope ) { if ( visitor . visit ( this , scope ) ) { if ( this . annotations != null ) { int annotationsLength = this . annotations . length ; for ( int i = 0 ; i < annotationsLength ; i ++ ) this . annotations [ i ] . traverse ( visitor , scope ) ; } if ( this . type != null ) this . type . traverse ( visitor , scope ) ; } visitor . endVisit ( this , scope ) ; } public void traverse ( ASTVisitor visitor , ClassScope scope ) { if ( visitor . visit ( this , scope ) ) { if ( this . annotations != null ) { int annotationsLength = this . annotations . length ; for ( int i = 0 ; i < annotationsLength ; i ++ ) this . annotations [ i ] . traverse ( visitor , scope ) ; } if ( this . type != null ) this . type . traverse ( visitor , scope ) ; } visitor . endVisit ( this , scope ) ; } } </s>