summaryrefslogtreecommitdiff
path: root/idlc/inc/idlc/errorhandler.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'idlc/inc/idlc/errorhandler.hxx')
-rw-r--r--idlc/inc/idlc/errorhandler.hxx160
1 files changed, 160 insertions, 0 deletions
diff --git a/idlc/inc/idlc/errorhandler.hxx b/idlc/inc/idlc/errorhandler.hxx
new file mode 100644
index 000000000000..27e429082a85
--- /dev/null
+++ b/idlc/inc/idlc/errorhandler.hxx
@@ -0,0 +1,160 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: errorhandler.hxx,v $
+ * $Revision: 1.10.10.2 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _IDLC_ERRORHANDLER_HXX_
+#define _IDLC_ERRORHANDLER_HXX_
+
+#include <idlc/astdeclaration.hxx>
+#include <idlc/astexpression.hxx>
+#include <idlc/astunion.hxx>
+#include <idlc/astenum.hxx>
+
+enum ErrorCode
+{
+ EIDL_NONE, // No error
+ EIDL_SYNTAX_ERROR, // Syntax error in IDL input
+ // More details will be gleaned from examining
+ // the parse state
+ EIDL_REDEF, // Redefinition
+ EIDL_REDEF_SCOPE, // Redefinition inside defining scope
+ EIDL_DEF_USE, // Definition after use
+ EIDL_MULTIPLE_BRANCH, // More than one union branch with this label
+ EIDL_COERCION_FAILURE, // Coercion failure
+ EIDL_SCOPE_CONFLICT, // Between fwd declare and full declare
+ EIDL_ONEWAY_CONFLICT, // Between op decl and argument direction
+ EIDL_DISC_TYPE, // Illegal discriminator type in union
+ EIDL_LABEL_TYPE, // Mismatch with discriminator type in union
+ EIDL_ILLEGAL_ADD, // Illegal add action
+ EIDL_ILLEGAL_USE, // Illegal type used in expression
+ EIDL_ILLEGAL_RAISES, // Error in "raises" clause
+ EIDL_CANT_INHERIT, // Cannot inherit from non-interface
+ EIDL_LOOKUP_ERROR, // Identifier not found
+ EIDL_INHERIT_FWD_ERROR, // Cannot inherit from fwd decl interface
+ EIDL_CONSTANT_EXPECTED, // We got something else..
+ EIDL_NAME_CASE_ERROR, // Spelling differences found
+ EIDL_ENUM_VAL_EXPECTED, // Expected an enumerator
+ EIDL_ENUM_VAL_NOT_FOUND, // Didnt find an enumerator with that name
+ EIDL_EVAL_ERROR, // Error in evaluating expression
+ EIDL_AMBIGUOUS, // Ambiguous name definition
+ EIDL_DECL_NOT_DEFINED, // Forward declared but never defined
+ EIDL_FWD_DECL_LOOKUP, // Tried to lookup in fwd declared intf
+ EIDL_RECURSIVE_TYPE, // Illegal recursive use of type
+ EIDL_NONVOID_ONEWAY, // Non-void return type in oneway operation
+ EIDL_NOT_A_TYPE, // Not a type
+ EIDL_TYPE_NOT_VALID, // Type is not valid in this context
+ EIDL_INTERFACEMEMBER_LOOKUP, // interface is not defined or a fwd declaration not exists
+ EIDL_SERVICEMEMBER_LOOKUP,
+ EIDL_TYPE_IDENT_CONFLICT, // type and identifier has equal names
+ EIDL_ONEWAY_RAISE_CONFLICT, // oneway function raised excpetion conflict
+ EIDL_WRONGATTRIBUTEFLAG,
+ EIDL_DEFINED_ATTRIBUTEFLAG,
+ EIDL_WRONGATTRIBUTEKEYWORD,
+ EIDL_MISSINGATTRIBUTEKEYWORD,
+ EIDL_BAD_ATTRIBUTE_FLAGS,
+ EIDL_OPTIONALEXPECTED,
+ EIDL_MIXED_INHERITANCE,
+ EIDL_DOUBLE_INHERITANCE,
+ EIDL_DOUBLE_MEMBER,
+ EIDL_CONSTRUCTOR_PARAMETER_NOT_IN,
+ EIDL_CONSTRUCTOR_REST_PARAMETER_NOT_FIRST,
+ EIDL_REST_PARAMETER_NOT_LAST,
+ EIDL_REST_PARAMETER_NOT_ANY,
+ EIDL_METHOD_HAS_REST_PARAMETER,
+ EIDL_READONLY_ATTRIBUTE_SET_EXCEPTIONS,
+ EIDL_UNSIGNED_TYPE_ARGUMENT,
+ EIDL_WRONG_NUMBER_OF_TYPE_ARGUMENTS,
+ EIDL_INSTANTIATED_STRUCT_TYPE_TYPEDEF,
+ EIDL_IDENTICAL_TYPE_PARAMETERS,
+ EIDL_STRUCT_TYPE_TEMPLATE_WITH_BASE,
+ EIDL_PUBLISHED_FORWARD,
+ EIDL_PUBLISHED_USES_UNPUBLISHED,
+ EIDL_SIMILAR_CONSTRUCTORS
+};
+
+enum WarningCode
+{
+ WIDL_EXPID_CONFLICT, // exception id conflict
+ WIDL_REQID_CONFLICT, // request id conflict
+ WIDL_INHERIT_IDCONFLICT, // request id conflict inheritance tree
+ WIDL_TYPE_IDENT_CONFLICT, // type and identifier has equal names
+ WIDL_WRONG_NAMING_CONV // type or identifier doesn't fulfill the UNO naming convention
+};
+
+class ErrorHandler
+{
+public:
+ // Report errors with varying numbers of arguments
+ void error0(ErrorCode e);
+ void error1(ErrorCode e, AstDeclaration const * d);
+ void error2(
+ ErrorCode e, AstDeclaration const * d1, AstDeclaration const * d2);
+ void error3(ErrorCode e, AstDeclaration* d1, AstDeclaration* d2, AstDeclaration* d3);
+
+ // Warning
+ void warning0(WarningCode e, const sal_Char* warningmsg);
+
+ // Report a syntax error in IDL input
+ void syntaxError(ParseState state, sal_Int32 lineNumber, const sal_Char* errmsg);
+
+ // Report an unsuccesful coercion attempt
+ void coercionError(AstExpression *pExpr, ExprType et);
+
+ // Report a failed name lookup attempt
+ void lookupError(const ::rtl::OString& n);
+ // Report a failed name lookup attempt
+ void lookupError(ErrorCode e, const ::rtl::OString& n, AstDeclaration* pScope);
+
+
+ // Report a type error
+ void noTypeError(AstDeclaration const * pDecl);
+
+ void inheritanceError(NodeType nodeType, const ::rtl::OString* name, AstDeclaration* pDecl);
+
+ void flagError(ErrorCode e, sal_uInt32 flag);
+
+ void forwardLookupError(AstDeclaration* pForward, const ::rtl::OString& name);
+
+ void constantExpected(AstDeclaration* pDecl, const ::rtl::OString& name);
+
+ void evalError(AstExpression* pExpr);
+
+ // Report a situation where an enumerator was expected but we got
+ // something else instead. This occurs when a union with an enum
+ // discriminator is being parsed and one of the branch labels is
+ // not an enumerator in that enum
+ void enumValExpected(AstUnion* pUnion);
+
+ // Report a failed enumerator lookup in an enum
+ void enumValLookupFailure(AstUnion* pUnion, AstEnum* pEnum, const ::rtl::OString& name);
+
+ bool checkPublished(AstDeclaration const * decl, bool bOptiional=false);
+};
+
+#endif // _IDLC_ERRORHANDLER_HXX_
+