From f8cbe5bf01a4895452073861c96c22d88316d3d7 Mon Sep 17 00:00:00 2001 From: 212304420 Date: Tue, 30 Jun 2020 09:11:35 -0400 Subject: [PATCH] Initial upload of all modifications to make java2python Python 3 compliant for GE ASKE --- java2python/compiler/block.py | 8 +- java2python/compiler/template.py | 32 ++-- java2python/compiler/visitor.py | 123 +++++---------- java2python/config/__init__.py | 2 +- java2python/config/default.py | 80 +++------- java2python/lang/JavaParser.py | 222 +++++++++++++-------------- java2python/lang/base.py | 8 +- java2python/mod/basic.py | 33 +--- java2python/mod/include/sync_test.py | 2 +- java2python/mod/transform.py | 141 +---------------- 10 files changed, 207 insertions(+), 444 deletions(-) diff --git a/java2python/compiler/block.py b/java2python/compiler/block.py index 4cf7b09..0661fae 100644 --- a/java2python/compiler/block.py +++ b/java2python/compiler/block.py @@ -16,14 +16,16 @@ from java2python.compiler import template, visitor -def addTypeToModule((className, factoryName)): +#def addTypeToModule((className, factoryName)): +def addTypeToModule(cftuple): + (className, factoryName) = cftuple """ Constructs and adds a new type to this module. """ bases = (getattr(template, className), getattr(visitor, className)) newType = type(className, bases, dict(factoryName=factoryName)) setattr(modules[__name__], className, newType) -map(addTypeToModule, ( +list(map(addTypeToModule, ( ('Annotation', 'at'), ('Class', 'klass'), ('Comment', 'comment'), @@ -35,4 +37,4 @@ def addTypeToModule((className, factoryName)): ('Module', 'module'), ('Statement', 'statement'), ) - ) + )) diff --git a/java2python/compiler/template.py b/java2python/compiler/template.py index 4f4dfe1..5c06182 100644 --- a/java2python/compiler/template.py +++ b/java2python/compiler/template.py @@ -13,9 +13,11 @@ # are usually a sign of a bad design and/or language limitations, and # this case is no exception. -from cStringIO import StringIO -from functools import partial -from itertools import chain, ifilter, imap +#from cStringIO import StringIO +from io import StringIO +from functools import partial, reduce +#from itertools import chain, ifilter, imap +from itertools import chain from java2python.lang import tokens from java2python.lib import FS, colors @@ -74,7 +76,8 @@ def __init__(cls, name, bases, namespace): pass -class Base(object): +#class Base(object): +class Base(object, metaclass=FactoryTypeDetector): """ Base -> base class for formatting Python output. This class defines a large set of attributes and methods for the @@ -119,7 +122,6 @@ def __init__(self, config, name=None, type=None, parent=None): self.children = [] self.config = config self.decorators = [] - self.overloaded = None self.factory = Factory(config) self.modifiers = [] self.name = name @@ -162,7 +164,9 @@ def altIdent(self, name): return name if name in method.variables: return name - return ('cls' if method.isStatic else 'self') + '.' + name + #return ('cls' if method.isStatic else 'self') + '.' + name + ## Below change make by VSK on Apr 16, 2020 so as to not generate any Python classmethods for ASKE + return ('self' if method.isStatic else 'self') + '.' + name return name def configHandler(self, part, suffix='Handler', default=None): @@ -173,20 +177,20 @@ def configHandler(self, part, suffix='Handler', default=None): def configHandlers(self, part, suffix='Handlers'): """ Returns config handlers for this type of template """ name = '{0}{1}{2}'.format(self.typeName, part, suffix) - return imap(self.toIter, chain(*self.config.every(name, []))) + return map(self.toIter, self.config.last(name, ())) def dump(self, fd, level=0): """ Writes the Python source code for this template to the given file. """ indent, isNotNone = level * self.indent, lambda x:x is not None lineFormat = '{0}{1}\n'.format - for line in ifilter(isNotNone, self.iterPrologue()): + for line in filter(isNotNone, self.iterPrologue()): line = lineFormat(indent, line) fd.write(line if line.strip() else '\n') - for item in ifilter(isNotNone, self.iterHead()): + for item in filter(isNotNone, self.iterHead()): item.dump(fd, level+1) for item in self.iterBody(): item.dump(fd, level+1) - for line in ifilter(isNotNone, self.iterEpilogue()): + for line in filter(isNotNone, self.iterEpilogue()): line = lineFormat(indent, line) fd.write(line if line.strip() else '\n') @@ -200,7 +204,7 @@ def dumpRepr(self, fd, level=0): """ Writes a debug string for this template to the given file. """ indent, default = self.indent, lambda x, y:None fd.write('{0}{1!r}\n'.format(indent*level, self)) - for child in ifilter(None, self.children): + for child in filter(None, self.children): getattr(child, 'dumpRepr', default)(fd, level+1) @property @@ -230,7 +234,7 @@ def iterPrologue(self): def iterHead(self): """ Yields the items in the head of this template. """ items = chain(*(h(self) for h in self.configHandlers('Head'))) - return imap(self.toExpr, items) + return map(self.toExpr, items) def iterBody(self): """ Yields the items in the body of this template. """ @@ -310,10 +314,6 @@ def __repr__(self): if isinstance(self.right, (basestring, )) and self.right: parts.append(colors.white('right:') + colors.yellow(self.right)) showfs = False - if self.modifiers: - parts.append(colors.white('modifiers:') + colors.cyan(','.join(self.modifiers))) - if self.type: - parts.append(colors.white('type:') + colors.cyan(self.type)) if showfs: parts.append(colors.white('format:') + colors.yellow(self.fs)) if self.tail: diff --git a/java2python/compiler/visitor.py b/java2python/compiler/visitor.py index f62e53e..e11a5ce 100644 --- a/java2python/compiler/visitor.py +++ b/java2python/compiler/visitor.py @@ -13,7 +13,8 @@ from functools import reduce, partial -from itertools import ifilter, ifilterfalse, izip, tee +#from itertools import ifilter, ifilterfalse, izip, tee +from itertools import filterfalse, tee from logging import debug, warn from re import compile as recompile, sub as resub @@ -46,9 +47,9 @@ def insertComments(self, tmpl, tree, index, memo): """ Add comments to the template from tokens in the tree. """ prefix = self.config.last('commentPrefix', '# ') cache, parser, comTypes = memo.comments, tree.parser, tokens.commentTypes - comNew = lambda t:t.type in comTypes and (t.index not in cache) + comNew = lambda t:t.type in comTypes and t.index not in cache - for tok in ifilter(comNew, parser.input.tokens[memo.last:index]): + for tok in filter(comNew, parser.input.tokens[memo.last:index]): cache.add(tok.index) # loop over parents until we find the top expression @@ -70,7 +71,8 @@ def insertComments(self, tmpl, tree, index, memo): def stripComment(self, text): """ Regex substitutions for comments; removes comment characters. """ subText = lambda value, regex:resub(regex, '', value) - for text in ifilter(unicode.strip, text.split('\n')): + #for text in filter(unicode.strip, text.split('\n')): + for text in filter(str.strip, text.split('\n')): yield reduce(subText, self.commentSubs, text) def walk(self, tree, memo=None): @@ -95,7 +97,7 @@ def walk(self, tree, memo=None): def zipWalk(self, nodes, visitors, memo): """ Walk the given nodes zipped with the given visitors. """ - for node, visitor in izip(nodes, visitors): + for node, visitor in zip(nodes, visitors): visitor.walk(node, memo) def nodeTypeToString(self, node): @@ -118,10 +120,7 @@ def makeAcceptType(ft): """ Creates an accept function for the given factory type. """ def acceptType(self, node, memo): """ Creates and returns a new template for a type. """ - try: - name = node.firstChildOfType(tokens.IDENT).text - except (AttributeError, ): - return + name = node.firstChildOfType(tokens.IDENT).text self.variables.append(name) return getattr(self.factory, ft)(name=name, parent=self) return acceptType @@ -129,12 +128,7 @@ def acceptType(self, node, memo): acceptAt = makeAcceptType('at') acceptClass = makeAcceptType('klass') acceptEnum = makeAcceptType('enum') - _acceptInterface = makeAcceptType('interface') - - def acceptInterface(self, node, memo): - module = self.parents(lambda x:x.isModule).next() - module.needsAbstractHelpers = True - return self._acceptInterface(node, memo) + acceptInterface = makeAcceptType('interface') class Module(TypeAcceptor, Base): @@ -161,9 +155,9 @@ class ModifiersAcceptor(object): def acceptModifierList(self, node, memo): """ Accept and process class and method modifiers. """ isAnno = lambda token:token.type==tokens.AT - for ano in ifilter(isAnno, node.children): + for ano in filter(isAnno, node.children): self.nodesToAnnos(ano, memo) - for mod in ifilterfalse(isAnno, node.children): + for mod in filterfalse(isAnno, node.children): self.nodesToModifiers(mod, node) return self @@ -178,7 +172,7 @@ def nodesToAnnos(self, branch, memo): if defKey: deco = self.factory.expr(left=name, fs='@{left}({right})') deco.right = right = self.factory.expr(parent=deco) - right.walk(defKey.firstChild(), memo) + right.walk(defKey.firstChild()) else: deco = self.factory.expr(left=name, fs='@{left}({right})') arg = deco.right = self.factory.expr(parent=deco) @@ -195,8 +189,9 @@ def nodesToModifiers(self, branch, root): """ Convert the modifiers in the given branch to template modifiers. """ if root.parentType in tokens.methodTypes: self.modifiers.extend(n.text for n in root.children) - if self.isStatic and self.parameters: - self.parameters[0]['name'] = 'cls' + ## Below two lines commented out by VSK on April 16, 2020 to ensure that no Python classmethods are generated for ASKE + #if self.isStatic and self.parameters: + # self.parameters[0]['name'] = 'cls' self.modifiers.append(branch.text) @@ -207,17 +202,14 @@ def acceptVarDeclaration(self, node, memo): """ Creates a new expression for a variable declaration. """ varDecls = node.firstChildOfType(tokens.VAR_DECLARATOR_LIST) for varDecl in varDecls.childrenOfType(tokens.VAR_DECLARATOR): + ## The bottom two lines are a hack added by Vijay Kumar (Dec 26, 2019) + ##if not varDecl.firstChildOfType(tokens.EXPR) and not node.firstChildOfType(tokens.TYPE).firstChildOfType(tokens.ARRAY_DECLARATOR_LIST): + ## continue ident = varDecl.firstChildOfType(tokens.IDENT) self.variables.append(ident.text) - identExp = self.factory.expr(left=ident.text, parent=self) - identExp.type = self.nodeTypeToString(node) - if node.firstChildOfType(tokens.MODIFIER_LIST): - identExp.modifiers = [child.text for child in node.firstChildOfType(tokens.MODIFIER_LIST).children] - declExp = varDecl.firstChildOfType(tokens.EXPR) assgnExp = identExp.pushRight(' = ') - declArr = varDecl.firstChildOfType(tokens.ARRAY_INITIALIZER) if declExp: assgnExp.walk(declExp, memo) @@ -233,10 +225,12 @@ def acceptVarDeclaration(self, node, memo): if node.firstChildOfType(tokens.TYPE).firstChildOfType(tokens.ARRAY_DECLARATOR_LIST): val = assgnExp.pushRight('[]') else: - if node.firstChildOfType(tokens.TYPE).firstChild().type != tokens.QUALIFIED_TYPE_IDENT: - val = assgnExp.pushRight('{0}()'.format(identExp.type)) + typ = self.nodeTypeToString(node) + if typ in ('int','float','bool','string'): + val = assgnExp.pushRight(str(eval('{0}()'.format(typ)))) else: - val = assgnExp.pushRight('None') + val = assgnExp.pushRight('{0}()'.format(typ)) + return self @@ -366,7 +360,7 @@ class Interface(Class): """ Interface -> accepts AST branches for Java interfaces. """ -class MethodContent(VarAcceptor, Base): +class MethodContent(Base): """ MethodContent -> accepts trees for blocks within methods. """ def acceptAssert(self, node, memo): @@ -407,10 +401,6 @@ def acceptCatch(self, node, memo): def acceptContinue(self, node, memo): """ Accept and process a continue statement. """ - parent = node.parents(lambda x: x.type in {tokens.FOR, tokens.FOR_EACH, tokens.DO, tokens.WHILE}).next() - if parent.type == tokens.FOR: - updateStat = self.factory.expr(parent=self) - updateStat.walk(parent.firstChildOfType(tokens.FOR_UPDATE), memo) contStat = self.factory.statement('continue', fs=FS.lsr, parent=self) if len(node.children): warn('Detected unhandled continue statement with label; generated code incorrect.') @@ -444,20 +434,17 @@ def acceptExpr(self, node, memo): def acceptFor(self, node, memo): """ Accept and process a 'for' statement. """ - self.walk(node.firstChildOfType(tokens.FOR_INIT), memo) + self.walk(node.firstChildOfType(tokens.FOR_INIT)) whileStat = self.factory.statement('while', fs=FS.lsrc, parent=self) cond = node.firstChildOfType(tokens.FOR_CONDITION) if not cond.children: whileStat.expr.right = 'True' else: - whileStat.expr.walk(cond, memo) + whileStat.expr.walk(cond) whileBlock = self.factory.methodContent(parent=self) - if not node.firstChildOfType(tokens.BLOCK_SCOPE).children: - self.factory.expr(left='pass', parent=whileBlock) - else: - whileBlock.walk(node.firstChildOfType(tokens.BLOCK_SCOPE), memo) + whileBlock.walk(node.firstChildOfType(tokens.BLOCK_SCOPE)) updateStat = self.factory.expr(parent=whileBlock) - updateStat.walk(node.firstChildOfType(tokens.FOR_UPDATE), memo) + updateStat.walk(node.firstChildOfType(tokens.FOR_UPDATE)) def acceptForEach(self, node, memo): """ Accept and process a 'for each' style statement. """ @@ -494,24 +481,16 @@ def acceptIf(self, node, memo): else: nextBlock = self.factory.methodContent(parent=self) nextBlock.walk(nextNode.children[1], memo) - - try: - nextNode = nextNode.children[2] - except (IndexError, ): - nextType = None - else: - nextType = nextNode.type + nextNode = nextNode.children[2] + nextType = nextNode.type if nextType == tokens.EXPR: elseStat = self.factory.statement('else', fs=FS.lc, parent=self) elseBlock = self.factory.expr(parent=elseStat) elseBlock.walk(nextNode, memo) - elif nextType: # nextType != tokens.BLOCK_SCOPE: - elseStat = self.factory.statement('else', fs=FS.lc, parent=self) - if nextNode.children: - self.factory.methodContent(parent=self).walk(nextNode, memo) - else: - self.factory.expr(left='pass', parent=elseStat) + else: # nextType != tokens.BLOCK_SCOPE: + self.factory.statement('else', fs=FS.lc, parent=self) + self.factory.methodContent(parent=self).walk(nextNode, memo) def acceptSwitch(self, node, memo): @@ -528,8 +507,8 @@ def acceptSwitch(self, node, memo): return # we have at least one node... parExpr = self.factory.expr(parent=self) - parExpr.walk(parNode, memo) - eqFs = FS.l + ' == ' + FS.r + parExpr.walk(parNode) + eqFs = FS.l + '==' + FS.r for caseIdx, caseNode in enumerate(caseNodes): isDefault, isFirst = caseNode.type==tokens.DEFAULT, caseIdx==0 @@ -542,7 +521,7 @@ def acceptSwitch(self, node, memo): if not isDefault: right = self.factory.expr(parent=parExpr) - right.walk(caseNode.firstChildOfType(tokens.EXPR), memo) + right.walk(caseNode.firstChildOfType(tokens.EXPR)) caseExpr.expr.right = self.factory.expr(left=parExpr, right=right, fs=eqFs) caseContent = self.factory.methodContent(parent=self) for child in caseNode.children[1:]: @@ -625,7 +604,7 @@ def acceptWhile(self, node, memo): whileStat.walk(blkNode, memo) -class Method(ModifiersAcceptor, MethodContent): +class Method(VarAcceptor, ModifiersAcceptor, MethodContent): """ Method -> accepts AST branches for method-level objects. """ def acceptFormalParamStdDecl(self, node, memo): @@ -664,7 +643,7 @@ def nodeOpExpr(self, node, memo): """ Accept and processes an operator expression. """ factory = self.factory.expr self.fs = FS.l + ' ' + node.text + ' ' + FS.r - self.left, self.right = visitors = factory(parent=self), factory(parent=self) + self.left, self.right = visitors = factory(parent=self), factory() self.zipWalk(node.children, visitors, memo) acceptAnd = nodeOpExpr @@ -701,6 +680,7 @@ def acceptPreformatted(self, node, memo): return acceptPreformatted acceptArrayElementAccess = makeNodePreformattedExpr(FS.l + '[' + FS.r + ']') + acceptCastExpr = makeNodePreformattedExpr(FS.l + '(' + FS.r + ')' ) # problem? acceptDiv = makeNodePreformattedExpr(FS.l + ' / ' + FS.r) acceptLogicalAnd = makeNodePreformattedExpr(FS.l + ' and ' + FS.r) acceptLogicalNot = makeNodePreformattedExpr('not ' + FS.l) @@ -712,29 +692,6 @@ def acceptPreformatted(self, node, memo): acceptUnaryMinus = makeNodePreformattedExpr('-' + FS.l) acceptUnaryPlus = makeNodePreformattedExpr('+' + FS.l) - def acceptCastExpr(self, node, memo): - """ Accept and process a cast expression. """ - # If the type of casting is a primitive type, - # then do the cast, else drop it. - factory = self.factory.expr - typeTok = node.firstChildOfType(tokens.TYPE) - typeIdent = typeTok.firstChild() - typeName = typeIdent.text - if typeIdent.type == tokens.QUALIFIED_TYPE_IDENT: - typeName = typeIdent.firstChild().text - - if typeName in tokens.primitiveTypeNames: - # Cast using the primitive type constructor - self.fs = typeName + '(' + FS.r + ')' - else: - handler = self.configHandler('Cast') - if handler: - handler(self, node) - else: - warn('No handler to perform cast of non-primitive type %s.', typeName) - self.left, self.right = visitors = factory(parent=self), factory(parent=self) - self.zipWalk(node.children, visitors, memo) - def makeAcceptPrePost(suffix, pre): """ Make an accept method for pre- and post- assignment expressions. """ def acceptPrePost(self, node, memo): @@ -847,7 +804,7 @@ def acceptThisConstructorCall(self, node, memo): def acceptStaticArrayCreator(self, node, memo): """ Accept and process a static array expression. """ - self.right = self.factory.expr(fs='[None] * {left}') + self.right = self.factory.expr(fs='[None]*{left}') self.right.left = self.factory.expr() self.right.left.walk(node.firstChildOfType(tokens.EXPR), memo) diff --git a/java2python/config/__init__.py b/java2python/config/__init__.py index 2aa8387..72d6c5e 100644 --- a/java2python/config/__init__.py +++ b/java2python/config/__init__.py @@ -27,7 +27,7 @@ def last(self, key, default=None): @staticmethod def load(name): """ Imports and returns a module from dotted form or filename. """ - if path.exists(name) and path.isfile(name): + if path.exists(name): mod = load_source(str(hash(name)), name) else: mod = reduce(getattr, name.split('.')[1:], __import__(name)) diff --git a/java2python/config/default.py b/java2python/config/default.py index 92c4a27..1a867ba 100644 --- a/java2python/config/default.py +++ b/java2python/config/default.py @@ -24,9 +24,7 @@ modulePrologueHandlers = [ basic.shebangLine, basic.simpleDocString, - 'from __future__ import print_function', basic.maybeBsr, - basic.maybeAbstractHelpers, basic.maybeSyncHelpers, ] @@ -71,7 +69,6 @@ # name. It's commented out because its output differs so greatly # from its input, and because it's really not very useful. classPostWalkHandlers = [ - basic.moveStaticExpressions, ## basic.classContentSort, ] @@ -99,9 +96,9 @@ methodPrologueHandlers = [ basic.maybeAbstractMethod, basic.maybeClassMethod, - basic.overloadedClassMethods, # NB: synchronized should come after classmethod basic.maybeSynchronizedMethod, + basic.overloadedClassMethods, ] @@ -133,7 +130,7 @@ # This handler is turns java imports into python imports. No mapping # of packages is performed: -# moduleImportDeclarationHandler = basic.simpleImports +moduleImportDeclarationHandler = basic.simpleImports # This import decl. handler can be used instead to produce comments # instead of import statements: @@ -150,26 +147,15 @@ (Type('TRUE'), transform.true2True), (Type('IDENT'), transform.keywordSafeIdent), - (Type('DECIMAL_LITERAL'), transform.syntaxSafeDecimalLiteral), - (Type('FLOATING_POINT_LITERAL'), transform.syntaxSafeFloatLiteral), - (Type('TYPE') > Type('BOOLEAN'), transform.typeSub), - (Type('TYPE') > Type('BYTE'), transform.typeSub), - (Type('TYPE') > Type('CHAR'), transform.typeSub), - (Type('TYPE') > Type('FLOAT'), transform.typeSub), - (Type('TYPE') > Type('INT'), transform.typeSub), - (Type('TYPE') > Type('SHORT'), transform.typeSub), - (Type('TYPE') > Type('LONG'), transform.typeSub), - (Type('TYPE') > Type('DOUBLE'), transform.typeSub), + (Type('FLOATING_POINT_LITERAL'), + transform.syntaxSafeFloatLiteral), - (Type('METHOD_CALL') > Type('DOT') > Type('IDENT', 'length'), - transform.lengthToLen), + (Type('TYPE') > Type('BOOLEAN'), + transform.typeSub), - (Type('METHOD_CALL') > Type('DOT') > ( - Type('IDENT', 'String') + - Type('IDENT', 'format') - ), - transform.formatString), + (Type('TYPE') > Type('DOUBLE'), + transform.typeSub), (Type('TYPE') > Type('QUALIFIED_TYPE_IDENT') > Type('IDENT'), transform.typeSub), @@ -183,12 +169,6 @@ # in method declarations. set to 0 to disable. #minIndentParams = 5 -# Specifies handler for cast operations of non-primitive types are handled -# (primitive types are automatically handled). Use basic.castDrop to leave -# cast expressions out of generated source. Use basic.castCtor to transform -# casts into constructor calls. Or you can specify a function of your own. -expressionCastHandler = basic.castDrop - # Values below are used by the handlers. They're here for # convenience. @@ -196,8 +176,12 @@ # module output subs. moduleOutputSubs = [ - (r'System\.out\.println\((.*)\)', r'print(\1)'), - (r'System\.out\.print_\((.*?)\)', r'print(\1, end="")'), + #(r'System\.out\.println\((.*)\)', r'print \1'), + #(r'System\.out\.print_\((.*?)\)', r'print \1,'), + # Below modifications made by VSK on Apr 14, 2020 to ignore all Java print statement hereafter + (r'System\.out\.println\((.*)\)', r''), + (r'System\.out\.print_\((.*?)\)', r''), + (r'System\.out\.printf\((.*?)\)', r''), (r'(.*?)\.equals\((.*?)\)', r'\1 == \2'), (r'(.*?)\.equalsIgnoreCase\((.*?)\)', r'\1.lower() == \2.lower()'), (r'([\w.]+)\.size\(\)', r'len(\1)'), @@ -205,47 +189,25 @@ (r'(\s)(\S*?)(\.toString\(\))', r'\1\2.__str__()'), (r'(\s)def toString', r'\1def __str__'), (r'(\s)(\S*?)(\.toLowerCase\(\))', r'\1\2.lower()'), + (r'(\s)(\S*?)(\.length\(\))', r'\1len(\2)'), (r'(.*?)IndexOutOfBoundsException\((.*?)\)', r'\1IndexError(\2)'), (r'\.__class__\.getName\(\)', '.__class__.__name__'), (r'\.getClass\(\)', '.__class__'), (r'\.getName\(\)', '.__name__'), (r'\.getInterfaces\(\)', '.__bases__'), - (r'String\.valueOf\((.*?)\)', r'str(\1)'), + #(r'String\.valueOf\((.*?)\)', r'str(\1)'), #(r'(\s)(\S*?)(\.toString\(\))', r'\1str(\2)'), - (r'Math\.', ''), ] typeSubs = { 'Boolean' : 'bool', 'boolean' : 'bool', - - 'Byte' : 'int', - 'byte' : 'int', - - 'Char' : 'str', - 'char' : 'str', - + 'IndexOutOfBoundsException' : 'IndexError', 'Integer' : 'int', - 'int' : 'int', - - 'Short' : 'int', - 'short' : 'int', - - 'Long' : 'long', - 'long' : 'long', - - 'Float' : 'float', - 'float' : 'float', - - 'Double' : 'float', - 'double' : 'float', - + 'Object' : 'object', 'String' : 'str', + 'char' : 'str', + 'double' : 'float', 'java.lang.String' : 'str', - - 'Object' : 'object', - - 'IndexOutOfBoundsException' : 'IndexError', - 'IOException': 'IOError', - } +} diff --git a/java2python/lang/JavaParser.py b/java2python/lang/JavaParser.py index 28b9c64..035ff9f 100644 --- a/java2python/lang/JavaParser.py +++ b/java2python/lang/JavaParser.py @@ -473,7 +473,7 @@ def javaSource(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -607,7 +607,7 @@ def compilationUnit(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -698,7 +698,7 @@ def typeDecls(self, ): success = True - except RecognitionException, re: + except (RecognitionException, re): self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -775,7 +775,7 @@ def packageDeclaration(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -892,7 +892,7 @@ def importDeclaration(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -1028,7 +1028,7 @@ def typeDeclaration(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -1218,7 +1218,7 @@ def classTypeDeclaration(self, modifiers): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -1319,7 +1319,7 @@ def classExtendsClause(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -1420,7 +1420,7 @@ def interfaceExtendsClause(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -1521,7 +1521,7 @@ def implementsClause(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -1669,7 +1669,7 @@ def genericTypeParameterList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -1828,7 +1828,7 @@ def genericTypeListClosing(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -1957,7 +1957,7 @@ def genericTypeParameter(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -2096,7 +2096,7 @@ def bound(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -2232,7 +2232,7 @@ def enumTypeDeclaration(self, modifiers): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -2339,7 +2339,7 @@ def enumBody(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -2440,7 +2440,7 @@ def enumScopeDeclarations(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -2562,7 +2562,7 @@ def enumClassScopeDeclarations(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -2660,7 +2660,7 @@ def enumConstants(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -2774,7 +2774,7 @@ def enumConstant(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -2937,7 +2937,7 @@ def interfaceTypeDeclaration(self, modifiers): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -3030,7 +3030,7 @@ def typeList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -3158,7 +3158,7 @@ def classBody(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -3286,7 +3286,7 @@ def interfaceBody(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -4029,7 +4029,7 @@ def classScopeDeclarations(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -4490,7 +4490,7 @@ def interfaceScopeDeclarations(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -4623,7 +4623,7 @@ def classFieldDeclaratorList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -4751,7 +4751,7 @@ def classFieldDeclarator(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -4884,7 +4884,7 @@ def interfaceFieldDeclaratorList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -4995,7 +4995,7 @@ def interfaceFieldDeclarator(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -5081,7 +5081,7 @@ def variableDeclaratorId(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -5177,7 +5177,7 @@ def variableInitializer(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -5274,7 +5274,7 @@ def arrayDeclarator(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -5408,7 +5408,7 @@ def arrayDeclaratorList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -5584,7 +5584,7 @@ def arrayInitializer(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -5685,7 +5685,7 @@ def throwsClause(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -5808,7 +5808,7 @@ def modifierList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -6056,7 +6056,7 @@ def modifier(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -6172,7 +6172,7 @@ def localModifierList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -6268,7 +6268,7 @@ def localModifier(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -6364,7 +6364,7 @@ def type(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -6492,7 +6492,7 @@ def simpleType(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -6617,7 +6617,7 @@ def objectType(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -6739,7 +6739,7 @@ def objectTypeSimplified(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -6877,7 +6877,7 @@ def qualifiedTypeIdent(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -7010,7 +7010,7 @@ def qualifiedTypeIdentSimplified(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -7096,7 +7096,7 @@ def typeIdent(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -7182,7 +7182,7 @@ def typeIdentSimplified(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -7257,7 +7257,7 @@ def primitiveType(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -7410,7 +7410,7 @@ def genericTypeArgumentList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -7574,7 +7574,7 @@ def genericTypeArgument(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -7658,7 +7658,7 @@ def genericWildcardBoundType(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -7806,7 +7806,7 @@ def genericTypeArgumentListSimplified(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -7902,7 +7902,7 @@ def genericTypeArgumentSimplified(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -7995,7 +7995,7 @@ def qualifiedIdentList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -8333,7 +8333,7 @@ def formalParameterList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -8448,7 +8448,7 @@ def formalParameterStandardDecl(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -8569,7 +8569,7 @@ def formalParameterVarArgDecl(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -8732,7 +8732,7 @@ def qualifiedIdentifier(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -8858,7 +8858,7 @@ def annotationList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -8952,7 +8952,7 @@ def annotation(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -9059,7 +9059,7 @@ def annotationInit(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -9265,7 +9265,7 @@ def annotationInitializers(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -9342,7 +9342,7 @@ def annotationInitializer(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -9454,7 +9454,7 @@ def annotationElementValue(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -9549,7 +9549,7 @@ def annotationElementValueExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -9725,7 +9725,7 @@ def annotationElementValueArrayInitializer(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -9840,7 +9840,7 @@ def annotationTypeDeclaration(self, modifiers): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -9968,7 +9968,7 @@ def annotationBody(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -10227,7 +10227,7 @@ def annotationScopeDeclarations(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -10301,7 +10301,7 @@ def annotationDefaultValue(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -10429,7 +10429,7 @@ def block(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -10530,7 +10530,7 @@ def blockStatement(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -10645,7 +10645,7 @@ def localVariableDeclaration(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -11993,7 +11993,7 @@ def statement(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -12122,7 +12122,7 @@ def catches(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -12210,7 +12210,7 @@ def catchClause(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -12305,7 +12305,7 @@ def finallyClause(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -12508,7 +12508,7 @@ def switchBlockLabels(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -12595,7 +12595,7 @@ def switchCaseLabels(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -12696,7 +12696,7 @@ def switchCaseLabel(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -12789,7 +12789,7 @@ def switchDefaultLabel(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -12964,7 +12964,7 @@ def forInit(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -13076,7 +13076,7 @@ def forCondition(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -13188,7 +13188,7 @@ def forUpdater(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -13295,7 +13295,7 @@ def parenthesizedExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -13388,7 +13388,7 @@ def expressionList(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -13483,7 +13483,7 @@ def expression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -13761,7 +13761,7 @@ def assignmentExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -13866,7 +13866,7 @@ def conditionalExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -13964,7 +13964,7 @@ def logicalOrExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -14062,7 +14062,7 @@ def logicalAndExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -14160,7 +14160,7 @@ def inclusiveOrExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -14258,7 +14258,7 @@ def exclusiveOrExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -14356,7 +14356,7 @@ def andExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -14489,7 +14489,7 @@ def equalityExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -14583,7 +14583,7 @@ def instanceOfExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -14745,7 +14745,7 @@ def relationalExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -14892,7 +14892,7 @@ def shiftExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -15025,7 +15025,7 @@ def additiveExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -15172,7 +15172,7 @@ def multiplicativeExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -15459,7 +15459,7 @@ def unaryExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -15693,7 +15693,7 @@ def unaryExpressionNotPlusMinus(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -16384,7 +16384,7 @@ def postfixedExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -17238,7 +17238,7 @@ def primaryExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -17947,7 +17947,7 @@ def qualifiedIdentExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -18262,7 +18262,7 @@ def newExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -18424,7 +18424,7 @@ def innerNewExpression(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -18593,7 +18593,7 @@ def newArrayConstruction(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -18717,7 +18717,7 @@ def arguments(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) @@ -18792,7 +18792,7 @@ def literal(self, ): success = True - except RecognitionException, re: + except RecognitionException as re: self.reportError(re) self.recover(self.input, re) retval.tree = self._adaptor.errorNode(self.input, retval.start, self.input.LT(-1), re) diff --git a/java2python/lang/base.py b/java2python/lang/base.py index 0633b8e..2717b92 100644 --- a/java2python/lang/base.py +++ b/java2python/lang/base.py @@ -47,7 +47,8 @@ # instances. # -from cStringIO import StringIO +#from cStringIO import StringIO +from io import StringIO from antlr3 import ANTLRStringStream as StringStream, CommonTokenStream as TokenStream from antlr3.tree import CommonTreeAdaptor, CommonTree @@ -88,11 +89,6 @@ def methodTypes(self): mod = self.module return (mod.VOID_METHOD_DECL, mod.FUNCTION_METHOD_DECL, ) - @property - def primitiveTypeNames(self): - """ Type name of well-known primitive types """ - return ('bool', 'str', 'int', 'long', 'float', ) - @property def module(self): """ Provides lazy import to the parser module. """ diff --git a/java2python/mod/basic.py b/java2python/mod/basic.py index 02e2f57..e986061 100644 --- a/java2python/mod/basic.py +++ b/java2python/mod/basic.py @@ -7,8 +7,6 @@ from os import path from re import sub as rxsub -from java2python.lib import FS - def shebangLine(module): """ yields the canonical python shebang line. """ @@ -36,7 +34,7 @@ def simpleDocString(obj): def commentedImports(module, expr): - module.factory.comment(parent=module, left=expr, fs='#import {left}') + module.factory.comment(parent=module, left=expr, fs='import: {left}') def simpleImports(module, expr): @@ -109,13 +107,11 @@ def overloadedClassMethods(method): cls = method.parent methods = [o for o in cls.children if o.isMethod and o.name==method.name] if len(methods) == 1: - if methods[0].overloaded: - yield methods[0].overloaded return for i, m in enumerate(methods[1:]): args = [p['type'] for p in m.parameters] args = ', '.join(args) - m.overloaded = '@{0}.register({1})'.format(method.name, args) + m.decorators.append('@{0}.register({1})'.format(method.name, args)) m.name = '{0}_{1}'.format(method.name, i) # for this one only: yield '@overloaded' @@ -133,6 +129,8 @@ def maybeAbstractMethod(method): def maybeSynchronizedMethod(method): if 'synchronized' in method.modifiers: + module = method.parents(lambda x:x.isModule).next() + module.needsSyncHelpers = True yield '@synchronized' @@ -158,11 +156,6 @@ def maybeBsr(module): yield line -def maybeAbstractHelpers(module): - if getattr(module, 'needsAbstractHelpers', False): - yield 'from abc import ABCMeta, abstractmethod' - - def maybeSyncHelpers(module): if getattr(module, 'needsSyncHelpers', False): for line in getSyncHelpersSrc().split('\n'): @@ -232,21 +225,3 @@ def zopeImplementsClassHead(obj): if implAny(obj): for cls in obj.bases: yield 'zope.interface.implements({})'.format(cls) - - -def moveStaticExpressions(cls): - name = '{}.'.format(cls.name) # notice the dot - exprs = [child for child in cls.children if child.isExpression and name in str(child)] - module = cls.parents(lambda x:x.isModule).next() - for expr in exprs: - cls.children.remove(expr) - newExpr = module.factory.expr(fs=name + '{right}', right=expr) - module.adopt(newExpr, index=len(module.children)) - - -def castCtor(expr, node): - expr.fs = FS.l + '(' + FS.r + ')' - - -def castDrop(expr, node): - expr.fs = FS.r diff --git a/java2python/mod/include/sync_test.py b/java2python/mod/include/sync_test.py index 70c13d4..d7d62ea 100755 --- a/java2python/mod/include/sync_test.py +++ b/java2python/mod/include/sync_test.py @@ -84,5 +84,5 @@ def cs2(cls, *values, **kwargs): assert expected_count == len(_locks) - print '[PASS]' + print('[PASS]') diff --git a/java2python/mod/transform.py b/java2python/mod/transform.py index 9b2e567..48d18fd 100644 --- a/java2python/mod/transform.py +++ b/java2python/mod/transform.py @@ -11,14 +11,9 @@ # See the java2python.config.default and java2python.lang.selector modules to # understand how and when selectors are associated with these callables. -import re -from logging import warn - import keyword import types -from java2python.lang import tokens - def invalidPythonNames(): """ Creates a list of valid Java identifiers that are invalid in Python. """ @@ -48,141 +43,18 @@ def xform(node, config): true2True = makeConst('True') -def syntaxSafeDecimalLiteral(node, config): - """ Ensures a Java decimal literal is a valid Python decimal literal. """ - value = node.token.text - if value.endswith(('l', 'L')): - value = value[:-1] - node.token.text = value - - def syntaxSafeFloatLiteral(node, config): """ Ensures a Java float literal is a valid Python float literal. """ value = node.token.text if value.startswith('.'): value = '0' + value - if value.lower().endswith(('f', 'd')): + if value.endswith(('f', 'd')): value = value[:-1] + elif value.endswith(('l', 'L')): + value = value[:-1] + 'L' node.token.text = value -def lengthToLen(node, config): - """ Transforms expressions like 'value.length()' to 'len(value)'. - - This method changes AST branches like this: - - METHOD_CALL [start=45, stop=49] - DOT . [line=4, start=45, stop=47] - IDENT foo [line=4, start=45] - IDENT length [line=4, start=47] - ARGUMENT_LIST [line=4, start=48, stop=49] - - Into branches like this: - - IDENT len(foo) [line=4, start=45] - - Notice that the resulting IDENT node text is invalid. We can't use a - METHOD_CALL token because those are always bound to a class or instance. - It would be best to add a new token type, and that option will be explored - if we run into this problem again. - - """ - dot = node.parent - method = dot.parent - - ident = dot.firstChildOfType(tokens.IDENT) - ident.token.text = 'len({})'.format(ident.text) - - expr = method.parent - expr.children.remove(method) - expr.addChild(ident) - - -def formatSyntaxTransf(match): - """ Helper function for formatString AST transform. - - Translates the Java Formatter syntax into Python .format syntax. - - This function gets called by re.sub which matches all the %...$... groups - inside a format specifier string. - """ - groups = match.groupdict() - if groups['convers'] == 'n': - # Means platform-specific line separator - return '\\n' # Py converts \n to os.linesep - - result = '{' - thous_sep = '' - - if(groups['idx']): - idx = int(groups['idx'][:-1]) - result += str(idx - 1) # Py starts count from 0 - result += ':' - - if(groups['flags']): - if ',' in groups['flags']: - thous_sep = ',' - if '+' in groups['flags']: - result += '+' - elif ' ' in groups['flags']: - result += ' ' - if '#' in groups['flags']: - result += '#' - if '0' in groups['flags']: - result += '0' - - if(groups['width']): - result += groups['width'] - result += thous_sep - - if(groups['precision']): - result += groups['precision'] - - result += groups['convers'] + '}' - - return result - -def formatString(node, config): - """ Transforms string formatting like 'String.format("%d %2$s", i, s)' - into '"{:d} {2:s}".format(i, s)'. - """ - dot = node.parent - method = dot.parent - arg_list = method.firstChildOfType(tokens.ARGUMENT_LIST) - call_args = [arg for arg in arg_list.childrenOfType(tokens.EXPR)] - args = [arg.firstChildOfType(tokens.IDENT) for arg in call_args[1:]] - - # Translate format syntax (if format == string_literal) - format = call_args[0].firstChildOfType(tokens.STRING_LITERAL) - if format: - format.token.text = \ - re.sub(r'%(?P\d+\$)?(?P[-+# 0,]+)?(?P[0-9]+)?(?P\.[0-9]+)?(?P[scdoxefgn])', - formatSyntaxTransf, - format.token.text, - flags=re.IGNORECASE) - else: - # Translation should happen at runtime - format = call_args[0].firstChild() - if format.type == tokens.IDENT: - # String variable - warn('Formatting string %s is not automatically translated.' - % str(format.token.text)) - else: - # Function that returns String - warn('Formatting string returned by %s() is not automatically translated.' - % str(format.firstChildOfType(tokens.IDENT).token.text)) - - left_ident = dot.children[0] - right_ident = dot.children[1] - - # Change AST - arg_list.children.remove(format.parent) - dot.children.remove(left_ident) - dot.children.remove(right_ident) - dot.addChild(format) - dot.addChild(right_ident) - - def typeSub(node, config): """ Maps specific, well-known Java types to their Python counterparts. @@ -190,7 +62,6 @@ def typeSub(node, config): mapping and further discussion. """ ident = node.token.text - for subs in reversed(config.every('typeSubs', {})): - if ident in subs: - node.token.text = subs[ident] - return + subs = config.last('typeSubs') + if ident in subs: + node.token.text = subs[ident]