| /* |
| * Copyright (c) 1999, 2004, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. Oracle designates this |
| * particular file as subject to the "Classpath" exception as provided |
| * by Oracle in the LICENSE file that accompanied this code. |
| * |
| * This code 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 General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| /* |
| * COMPONENT_NAME: idl.parser |
| * |
| * ORIGINS: 27 |
| * |
| * Licensed Materials - Property of IBM |
| * 5639-D57 (C) COPYRIGHT International Business Machines Corp. 1997, 1999 |
| * RMI-IIOP v1.0 |
| * |
| */ |
| |
| package com.sun.tools.corba.se.idl; |
| |
| // NOTES: |
| // -D56351<daz> Update Prefix pragma directive to CORBA 2.3 (see spec.). |
| // -D57110<daz> Update ID pragma directive to CORBA 2.3 (see spec.). |
| // -D46094<daz> Prohibit exceptions from appearing wihtin structs, unions, exceptions. |
| // -D46094<daz> Prohibit attributes from appearing as operation parameter types, |
| // operation return types, attribute types. |
| // -D59166<daz> Prohibit identifiers form colliding with IDL keywords. |
| // -F60858.1<daz> Add keyword collision warning. |
| // -F60942<daz> Prohibit operations from appearing as operation parameter types. |
| // -D62023<daz> Add deprecated keyword warning; cast char to byte for JDK 1.2 compatability. |
| |
| import java.io.IOException; |
| |
| /** |
| * |
| **/ |
| class ParseException extends Exception |
| { |
| /** |
| * Constructor: print the supplied message to Standard.err |
| * and create a new ParseException |
| * @return a new ParseException. |
| **/ |
| ParseException (String message) |
| { |
| super (message); |
| System.err.println (message); |
| detected = true; |
| } // ctor |
| |
| /** |
| * Constructor: print the supplied message to Standard.err, if it |
| * is not a warning, and create a new ParseException. |
| * @return a new ParseException. |
| **/ |
| ParseException (String message, boolean onlyAWarning) |
| { |
| super (message); |
| System.err.println (message); |
| if (!onlyAWarning) |
| detected = true; |
| } |
| |
| static ParseException abstractValueBox (Scanner scanner) |
| { |
| return arg0 ("abstractValueBox", scanner); |
| } |
| |
| static ParseException alreadyDeclared (Scanner scanner, String type) |
| { |
| return arg1 ("alreadyDeclared", scanner, type); |
| } |
| |
| static ParseException declNotInSameFile( Scanner scanner, String type, |
| String firstFile ) |
| { |
| return arg2 ("declNotInSameFile", scanner, type, firstFile) ; |
| } |
| |
| static ParseException alreadyDefaulted (Scanner scanner) |
| { |
| return arg0 ("alreadydefaulted", scanner); |
| } |
| |
| static ParseException alreadyDerived (Scanner scanner, String derived, String iface) |
| { |
| return arg2 ("alreadyDerived", scanner, derived, iface); |
| } |
| |
| static ParseException alreadyRaised (Scanner scanner, String exception) |
| { |
| return arg1 ("alreadyRaised", scanner, exception); |
| } |
| |
| // <d60942> |
| static ParseException attributeNotType (Scanner scanner, String attr) |
| { |
| return arg1 ("attributeNotType", scanner, attr); |
| } |
| |
| static ParseException badAbstract (Scanner scanner, String name) |
| { |
| return arg1 ("badAbstract", scanner, name); |
| } |
| |
| static ParseException badCustom (Scanner scanner) |
| { |
| return arg0 ("badCustom", scanner); |
| } |
| |
| // <d57110> |
| static ParseException badRepIDAlreadyAssigned (Scanner scanner, String entry) |
| { |
| return arg1 ("badRepIDAlreadyAssigned", scanner, entry); |
| } |
| |
| // <d57110> |
| static ParseException badRepIDForm (Scanner scanner, String entry) |
| { |
| return arg1 ("badRepIDForm", scanner, entry); |
| } |
| |
| // <d56351> |
| static ParseException badRepIDPrefix (Scanner scanner, String entry, String expected, String got) |
| { |
| return arg3 ("badRepIDPrefix", scanner, entry, expected, got); |
| } |
| |
| static ParseException badState (Scanner scanner, String entry) |
| { |
| return arg1 ("badState", scanner, entry); |
| } |
| |
| static ParseException branchLabel (Scanner scanner, String label) |
| { |
| return arg1 ("branchLabel", scanner, label); |
| } |
| |
| static ParseException branchName (Scanner scanner, String name) |
| { |
| return arg1 ("branchName", scanner, name); |
| } |
| |
| static ParseException duplicateInit (Scanner scanner) |
| { |
| return arg0 ("duplicateInit", scanner); |
| } |
| |
| static ParseException duplicateState (Scanner scanner, String name) |
| { |
| return arg1 ("duplicateState", scanner, name); |
| } |
| |
| static ParseException elseNoIf (Scanner scanner) |
| { |
| return arg0 ("elseNoIf", scanner); |
| } |
| |
| static ParseException endNoIf (Scanner scanner) |
| { |
| return arg0 ("endNoIf", scanner); |
| } |
| |
| static ParseException evaluationError (Scanner scanner, String problem) |
| { |
| return arg1 ("evaluation", scanner, problem); |
| } |
| |
| static ParseException forwardEntry (Scanner scanner, String name) |
| { |
| return arg1 ("forwardEntry", scanner, name); |
| } |
| |
| // <f46082.40> Cannot forward value boxes. |
| static ParseException forwardedValueBox (Scanner scanner, String name) |
| { |
| return arg1 ("forwardedValueBox", scanner, name); |
| } |
| |
| static ParseException generic (Scanner scanner, String message) |
| { |
| return arg1 ("generic", scanner, message); |
| } |
| |
| static ParseException illegalArray (Scanner scanner, String name) |
| { |
| return arg1 ("illegalArray", scanner, name); |
| } |
| |
| static ParseException illegalException (Scanner scanner, String name) |
| { |
| return arg1 ("illegalException", scanner, name); |
| } |
| |
| static ParseException invalidConst (Scanner scanner, String mustBe, String is) |
| { |
| return arg2 ("invalidConst1", scanner, mustBe, is); |
| } |
| |
| static ParseException invalidConst (Scanner scanner, String type) |
| { |
| return arg1 ("invalidConst2", scanner, type); |
| } |
| |
| // <d59166> Non-escaped identifiers that collide with keywords are illegal. |
| static ParseException keywordCollision (Scanner scanner, String id) |
| { |
| return arg1 ("keywordCollision", scanner, id); |
| } |
| |
| // <d62023> Warning for keywords that will be removed in a future version of IDL. |
| static ParseException deprecatedKeywordWarning (Scanner scanner, String id) |
| { |
| return arg1Warning ("deprecatedKeywordWarning", scanner, id); |
| } |
| |
| // <f60858.1> Warning for above error. |
| static ParseException keywordCollisionWarning (Scanner scanner, String id) |
| { |
| return arg1Warning ("keywordCollisionWarning", scanner, id); |
| } |
| |
| static ParseException methodClash (Scanner scanner, String interf, String method) |
| { |
| return arg2 ("methodClash", scanner, interf, method); |
| } |
| |
| static ParseException moduleNotType (Scanner scanner, String module) |
| { |
| return arg1 ("moduleNotType", scanner, module); |
| } |
| |
| // <d59067> |
| static ParseException nestedValueBox (Scanner scanner) |
| { |
| return arg0 ("nestedValueBox", scanner); |
| } |
| |
| static ParseException noDefault (Scanner scanner) |
| { |
| return arg0 ("noDefault", scanner); |
| } |
| |
| static ParseException nonAbstractParent (Scanner scanner, String baseClass, String parentClass) |
| { |
| return arg2 ("nonAbstractParent", scanner, baseClass, parentClass); |
| } |
| |
| static ParseException nonAbstractParent2 (Scanner scanner, String baseClass, String parentClass) |
| { |
| return arg2 ("nonAbstractParent2", scanner, baseClass, parentClass); |
| } |
| |
| static ParseException nonAbstractParent3 (Scanner scanner, String baseClass, String parentClass) |
| { |
| return arg2 ("nonAbstractParent3", scanner, baseClass, parentClass); |
| } |
| |
| static ParseException notANumber (Scanner scanner, String notNumber) |
| { |
| return arg1 ("notANumber", scanner, notNumber); |
| } |
| |
| static ParseException nothing (String filename) |
| { |
| return new ParseException (Util.getMessage ("ParseException.nothing", filename)); |
| } |
| |
| static ParseException notPositiveInt (Scanner scanner, String notPosInt) |
| { |
| return arg1 ("notPosInt", scanner, notPosInt); |
| } |
| |
| static ParseException oneway (Scanner scanner, String method) |
| { |
| return arg1 ("oneway", scanner, method); |
| } |
| |
| // <d60942> |
| static ParseException operationNotType (Scanner scanner, String op) |
| { |
| return arg1 ("operationNotType", scanner, op); |
| } |
| |
| static ParseException outOfRange (Scanner scanner, String value, String type) |
| { |
| return arg2 ("outOfRange", scanner, value, type); |
| } |
| |
| static ParseException recursive (Scanner scanner, String type, String name) |
| { |
| return arg2 ("recursive", scanner, type, name); |
| } |
| |
| static ParseException selfInherit (Scanner scanner, String name) |
| { |
| return arg1 ("selfInherit", scanner, name); |
| } |
| |
| static ParseException stringTooLong (Scanner scanner, String str, String max) |
| { |
| return arg2 ("stringTooLong", scanner, str, max); |
| } |
| |
| static ParseException syntaxError (Scanner scanner, int expected, int got) |
| { |
| return arg2 ("syntax1", scanner, Token.toString (expected), Token.toString (got)); |
| } |
| |
| static ParseException syntaxError (Scanner scanner, String expected, String got) |
| { |
| return arg2 ("syntax1", scanner, expected, got); |
| } |
| |
| static ParseException syntaxError (Scanner scanner, int[] expected, int got) |
| { |
| return syntaxError (scanner, expected, Token.toString (got)); |
| } |
| |
| static ParseException syntaxError (Scanner scanner, int[] expected, String got) |
| { |
| String tokenList = ""; |
| for (int i = 0; i < expected.length; ++i) |
| tokenList += " `" + Token.toString (expected[i]) + "'"; |
| return arg2 ("syntax2", scanner, tokenList, got); |
| } |
| |
| static ParseException unclosedComment (String filename) |
| { |
| return new ParseException (Util.getMessage ("ParseException.unclosed", filename)); |
| } |
| |
| static ParseException undeclaredType (Scanner scanner, String undeclaredType) |
| { |
| return arg1 ("undeclaredType", scanner, undeclaredType); |
| } |
| |
| static ParseException warning (Scanner scanner, String message) |
| { |
| scannerInfo (scanner); |
| String[] parameters = { filename, Integer.toString (lineNumber), message, line, pointer }; |
| return new ParseException (Util.getMessage ("ParseException.warning", parameters), true); |
| } |
| |
| static ParseException wrongType (Scanner scanner, String name, String mustBe, String is) |
| { |
| scannerInfo (scanner); |
| String[] parameters = {filename, Integer.toString (lineNumber), name, is, mustBe, line, pointer}; |
| return new ParseException (Util.getMessage ("ParseException.wrongType", parameters)); |
| } |
| |
| static ParseException wrongExprType (Scanner scanner, String mustBe, String is) |
| { |
| scannerInfo (scanner); |
| String[] parameters = {filename, Integer.toString (lineNumber), |
| is, mustBe, line, pointer}; |
| return new ParseException (Util.getMessage ("ParseException.constExprType", |
| parameters)); |
| } |
| |
| static ParseException illegalForwardInheritance( Scanner scanner, String declName, |
| String baseName ) |
| { |
| scannerInfo( scanner ) ; |
| String[] parameters = { filename, Integer.toString(lineNumber), |
| declName, baseName, line, pointer } ; |
| return new ParseException (Util.getMessage( |
| "ParseException.forwardInheritance", parameters ) ) ; |
| } |
| |
| static ParseException illegalIncompleteTypeReference( Scanner scanner, |
| String declName ) |
| { |
| scannerInfo( scanner ) ; |
| String[] parameters = { filename, Integer.toString(lineNumber), |
| declName, line, pointer } ; |
| return new ParseException (Util.getMessage( |
| "ParseException.illegalIncompleteTypeReference", parameters ) ) ; |
| } |
| |
| private static void scannerInfo (Scanner scanner) |
| { |
| filename = scanner.filename (); |
| line = scanner.lastTokenLine (); |
| lineNumber = scanner.lastTokenLineNumber (); |
| int pos = scanner.lastTokenLinePosition (); |
| pointer = "^"; |
| if (pos > 1) |
| { |
| byte[] bytes = new byte[ pos - 1 ]; |
| for (int i = 0; i < pos - 1; ++i) |
| bytes[i] = (byte)' '; // <d62023> |
| pointer = new String (bytes) + pointer; |
| } |
| } |
| |
| private static ParseException arg0 (String msgId, Scanner scanner) |
| { |
| scannerInfo (scanner); |
| String[] parameters = {filename, Integer.toString (lineNumber), line, pointer}; |
| return new ParseException (Util.getMessage ("ParseException." + msgId, parameters)); |
| } |
| |
| private static ParseException arg1 (String msgId, Scanner scanner, String arg1) |
| { |
| scannerInfo (scanner); |
| String[] parameters = {filename, Integer.toString (lineNumber), arg1, line, pointer}; |
| return new ParseException (Util.getMessage ("ParseException." + msgId, parameters)); |
| } |
| |
| // <f60858.1> |
| private static ParseException arg1Warning (String msgId, Scanner scanner, String arg1) |
| { |
| scannerInfo (scanner); |
| String[] parameters = {filename, Integer.toString (lineNumber), arg1, line, pointer}; |
| return new ParseException (Util.getMessage ("ParseException." + msgId, parameters), true); |
| } |
| |
| private static ParseException arg2 (String msgId, Scanner scanner, String arg1, String arg2) |
| { |
| scannerInfo (scanner); |
| String[] parameters = {filename, Integer.toString (lineNumber), arg1, arg2, line, pointer}; |
| return new ParseException (Util.getMessage ("ParseException." + msgId, parameters)); |
| } |
| |
| private static ParseException arg3 (String msgId, Scanner scanner, String arg1, String arg2, String arg3) |
| { |
| scannerInfo (scanner); |
| String[] parameters = {filename, Integer.toString (lineNumber), arg1, arg2, arg3, line, pointer}; |
| return new ParseException (Util.getMessage ("ParseException." + msgId, parameters)); |
| } |
| |
| private static String filename = ""; |
| private static String line = ""; |
| private static int lineNumber = 0; |
| private static String pointer = "^"; |
| |
| static boolean detected = false; |
| } // class ParseException |