See More

#!/usr/bin/env python # -*- coding: utf-8 -*- # This is the default configuration file for java2python. Unless # explicity disabled with the '-n' or '--nodefaults' option, the j2py # script will import this module for runtime configuration. from java2python.mod import basic, transform from java2python.lang.selector import * # Leading indent character or characters. Four spaces are used # because that is the recommendation of PEP 8. indentPrefix = ' ' * 4 # Prefix character or characters for comments. The hash+space is # recommended by PEP 8. commentPrefix = '# ' # These values are strings or generators that yield strings # for a module prologue. modulePrologueHandlers = [ basic.shebangLine, basic.simpleDocString, 'from __future__ import print_function', basic.maybeBsr, basic.maybeAbstractHelpers, basic.maybeSyncHelpers, ] # These generators yield lines for a module epilogue. moduleEpilogueHandlers = [ basic.scriptMainStanza, ] # These generators yield (possibly modified) source strings for a # module. The `basic.outputSubs` handler references the list of # regular expression substitutions near the end of this module. moduleOutputHandlers = [ basic.outputSubs, ] # These generators yield doc strings for a class. classHeadHandlers = [ basic.simpleDocString, ] methodParamHandlers = [ basic.defaultParams, ] # This is the name of the callable used to construct locks for an object with # the synchronized keyword. methodLockFunctionName = 'lock_for_object' classBaseHandlers = [ basic.defaultBases, ] interfaceBaseHandlers = [ basic.defaultBases, ] # These generators are called after a class has been completely # generated. The class content sorter sorts the methods of a class by # 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, ] enumHeadHandlers = [ basic.simpleDocString, ] interfaceHeadHandlers = [ basic.simpleDocString, '__metaclass__ = ABCMeta', ] interfacePostWalkMutators = [ ] methodHeadHandlers = [ basic.simpleDocString, ] methodPrologueHandlers = [ basic.maybeAbstractMethod, basic.maybeClassMethod, basic.overloadedClassMethods, # NB: synchronized should come after classmethod basic.maybeSynchronizedMethod, ] # This handler creates enum values on enum classes after they've been # defined. The handler tries to match Java semantics by using # strings. Refer to the documentation for details. enumValueHandler = basic.enumConstStrings # Alternatively, you can use this handler to construct enum values as # integers. #enumValueHandler = basic.enumConstInts # When the compiler needs to make up a variable name (for example, to # emulate assignment expressions), it calls this handler to produce a # new one. expressionVariableNamingHandler = basic.globalNameCounter # This handler simply creates comments in the file for package # declarations. modulePackageDeclarationHandler = basic.commentedPackages # This handler can be used instead to create __init__.py files for # 'namespace packages' via pkgutil. # modulePackageDeclarationHandler = basic.namespacePackages # This handler is turns java imports into python imports. No mapping # of packages is performed: # moduleImportDeclarationHandler = basic.simpleImports # This import decl. handler can be used instead to produce comments # instead of import statements: # moduleImportDeclarationHandler = basic.commentedImports # The AST transformation function uses these declarations to modify an # AST before compiling it to python source. Having these declarations # in a config file gives clients an opportunity to change the # transformation behavior. astTransforms = [ (Type('NULL'), transform.null2None), (Type('FALSE'), transform.false2False), (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('METHOD_CALL') > Type('DOT') > Type('IDENT', 'length'), transform.lengthToLen), (Type('METHOD_CALL') > Type('DOT') > ( Type('IDENT', 'String') + Type('IDENT', 'format') ), transform.formatString), (Type('TYPE') > Type('QUALIFIED_TYPE_IDENT') > Type('IDENT'), transform.typeSub), ] # not implemented: # minimum parameter count to trigger indentation of parameter names # 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. # module output subs. moduleOutputSubs = [ (r'System\.out\.println\((.*)\)', r'print(\1)'), (r'System\.out\.print_\((.*?)\)', r'print(\1, end="")'), (r'(.*?)\.equals\((.*?)\)', r'\1 == \2'), (r'(.*?)\.equalsIgnoreCase\((.*?)\)', r'\1.lower() == \2.lower()'), (r'([\w.]+)\.size\(\)', r'len(\1)'), #(r'(\w+)\.get\((.*?)\)', r'\1[\2]'), (r'(\s)(\S*?)(\.toString\(\))', r'\1\2.__str__()'), (r'(\s)def toString', r'\1def __str__'), (r'(\s)(\S*?)(\.toLowerCase\(\))', r'\1\2.lower()'), (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'(\s)(\S*?)(\.toString\(\))', r'\1str(\2)'), (r'Math\.', ''), ] typeSubs = { 'Boolean' : 'bool', 'boolean' : 'bool', 'Byte' : 'int', 'byte' : 'int', 'Char' : 'str', 'char' : 'str', 'Integer' : 'int', 'int' : 'int', 'Short' : 'int', 'short' : 'int', 'Long' : 'long', 'long' : 'long', 'Float' : 'float', 'float' : 'float', 'Double' : 'float', 'double' : 'float', 'String' : 'str', 'java.lang.String' : 'str', 'Object' : 'object', 'IndexOutOfBoundsException' : 'IndexError', 'IOException': 'IOError', }