if (this.annotation == null && this.identifierPtr <= parser.identifierPtr) {
Annotation annot = null;
boolean needUpdateRParenPos = false;
MemberValuePair pendingMemberValueName = null;
if (this.hasPendingMemberValueName && this.identifierPtr < parser.identifierPtr) {
char[] memberValueName = parser.identifierStack[this.identifierPtr + 1];
long pos = parser.identifierPositionStack[this.identifierPtr + 1];
int start = (int) (pos >>> 32);
int end = (int)pos;
int valueEnd = this.memberValuPairEqualEnd > -1 ? this.memberValuPairEqualEnd : end;
SingleNameReference fakeExpression = new SingleNameReference(RecoveryScanner.FAKE_IDENTIFIER, (((long) valueEnd + 1) << 32) + (valueEnd));
pendingMemberValueName = new MemberValuePair(memberValueName, start, end, fakeExpression);
}
parser.identifierPtr = this.identifierPtr;
parser.identifierLengthPtr = this.identifierLengthPtr;
TypeReference typeReference = parser.getAnnotationType();
switch (this.kind) {
case NORMAL:
if (parser.astPtr > -1 && parser.astStack[parser.astPtr] instanceof MemberValuePair) {
MemberValuePair[] memberValuePairs = null;
int argLength = parser.astLengthStack[parser.astLengthPtr];
int argStart = parser.astPtr - argLength + 1;
if (argLength > 0) {
int annotationEnd;
if (pendingMemberValueName != null) {
memberValuePairs = new MemberValuePair[argLength + 1];
System.arraycopy(parser.astStack, argStart, memberValuePairs, 0, argLength);
parser.astLengthPtr--;
parser.astPtr -= argLength;
memberValuePairs[argLength] = pendingMemberValueName;
annotationEnd = pendingMemberValueName.sourceEnd;
} else {
memberValuePairs = new MemberValuePair[argLength];
System.arraycopy(parser.astStack, argStart, memberValuePairs, 0, argLength);
parser.astLengthPtr--;
parser.astPtr -= argLength;
MemberValuePair lastMemberValuePair = memberValuePairs[memberValuePairs.length - 1];
annotationEnd =
lastMemberValuePair.value != null
? lastMemberValuePair.value instanceof Annotation
? ((Annotation)lastMemberValuePair.value).declarationSourceEnd