private ClsJavaCodeReferenceElementImpl getReferenceElement() {
    synchronized (lock) {
      if (myReferenceElement == null) {
        final PsiAnnotationStub stub = getStub();
        final CompositeElement mirror = stub.getTreeElement();
        myReferenceElement =
            new ClsJavaCodeReferenceElementImpl(
                this, mirror.findChildByRole(ChildRole.CLASS_REFERENCE).getText());
      }

      return myReferenceElement;
    }
  }
  @Override
  @NotNull
  public PsiAnnotationParameterList getParameterList() {
    synchronized (lock) {
      if (myParameterList == null) {
        final PsiAnnotationStub stub = getStub();
        final CompositeElement mirror = stub.getTreeElement();

        final PsiAnnotationParameterList paramList =
            (PsiAnnotationParameterList)
                mirror.findChildByRoleAsPsiElement(ChildRole.PARAMETER_LIST);

        myParameterList = new ClsAnnotationParameterListImpl(this, paramList.getAttributes());
      }

      return myParameterList;
    }
  }