blob: 1693df3a06a83e7494252e360f3c3143eb01934f [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef _IDLC_ASTATTRIBUTE_HXX_
#define _IDLC_ASTATTRIBUTE_HXX_
#include <idlc/astdeclaration.hxx>
#include "idlc/astscope.hxx"
#include "registry/types.h"
#include "rtl/ustring.hxx"
namespace typereg { class Writer; }
class AstAttribute: public AstDeclaration, public AstScope {
public:
AstAttribute(
sal_uInt32 flags, AstType const * type, rtl::OString const & name,
AstScope * scope):
AstDeclaration(NT_attribute, name, scope),
AstScope(NT_attribute), m_flags(flags), m_pType(type)
{}
AstAttribute(NodeType nodeType, sal_uInt32 flags, AstType const * pType, const ::rtl::OString& name, AstScope* pScope)
: AstDeclaration(nodeType, name, pScope), AstScope(nodeType)
, m_flags(flags)
, m_pType(pType)
{}
virtual ~AstAttribute() {}
void setExceptions(
rtl::OUString const * getDoc, DeclList const * getExc,
rtl::OUString const * setDoc, DeclList const * setExc)
{
if (getDoc != 0) {
m_getDocumentation = *getDoc;
}
if (getExc != 0) {
m_getExceptions = *getExc;
}
if (setDoc != 0) {
m_setDocumentation = *setDoc;
}
if (setExc != 0) {
m_setExceptions = *setExc;
}
}
DeclList::size_type getGetExceptionCount() const
{ return m_getExceptions.size(); }
DeclList::size_type getSetExceptionCount() const
{ return m_setExceptions.size(); }
AstType const * getType() const
{ return m_pType; }
sal_Bool isReadonly() const
{ return ((m_flags & AF_READONLY) == AF_READONLY); }
sal_Bool isOptional() const
{ return ((m_flags & AF_OPTIONAL) == AF_OPTIONAL); }
sal_Bool isAttribute() const
{ return ((m_flags & AF_ATTRIBUTE) == AF_ATTRIBUTE); }
sal_Bool isProperty() const
{ return ((m_flags & AF_PROPERTY) == AF_PROPERTY); }
sal_Bool isBound() const
{ return ((m_flags & AF_BOUND) == AF_BOUND); }
sal_Bool isMayBeVoid() const
{ return ((m_flags & AF_MAYBEVOID) == AF_MAYBEVOID); }
sal_Bool isConstrained() const
{ return ((m_flags & AF_CONSTRAINED) == AF_CONSTRAINED); }
sal_Bool isTransient() const
{ return ((m_flags & AF_TRANSIENT) == AF_TRANSIENT); }
sal_Bool isMayBeAmbiguous() const
{ return ((m_flags & AF_MAYBEAMBIGUOUS) == AF_MAYBEAMBIGUOUS); }
sal_Bool isMayBeDefault() const
{ return ((m_flags & AF_MAYBEDEFAULT) == AF_MAYBEDEFAULT); }
sal_Bool isRemoveable() const
{ return ((m_flags & AF_REMOVEABLE) == AF_REMOVEABLE); }
sal_Bool dumpBlob(
typereg::Writer & rBlob, sal_uInt16 index, sal_uInt16 * methodIndex);
private:
void dumpExceptions(
typereg::Writer & writer, rtl::OUString const & documentation,
DeclList const & exceptions, RTMethodMode flags,
sal_uInt16 * methodIndex);
const sal_uInt32 m_flags;
AstType const * m_pType;
rtl::OUString m_getDocumentation;
DeclList m_getExceptions;
rtl::OUString m_setDocumentation;
DeclList m_setExceptions;
};
#endif // _IDLC_ASTATTRIBUTE_HXX_