PsiAnnotationMemberValue () { PsiMethodStub stub = getStub(); if (stub != null) { String text = stub.getDefaultValueText(); if (StringUtil.isEmpty(text)) return null; PsiAnnotationMemberValue value = dereference(myCachedDefaultValue); if (value != null) { return value; } value = JavaPsiFacade.getElementFactory(getProject()).createAnnotationFromText("@Foo(" + text + ")", this).findAttributeValue(null); myCachedDefaultValue = new SoftReference<>(value); return value; } myCachedDefaultValue = null; boolean expectedDefault = false; TreeElement childNode = getNode().getFirstChildNode(); while (childNode != null) { IElementType type = childNode.getElementType(); if (type == JavaTokenType.DEFAULT_KEYWORD) { expectedDefault = true; } else if (expectedDefault && ElementType.ANNOTATION_MEMBER_VALUE_BIT_SET.contains(type)) { return (PsiAnnotationMemberValue)childNode.getPsi(); } childNode = childNode.getTreeNext(); } return null; }