When contributing code or patches to Jython, please try to follow these guidelines. == Python Code == In general, follow [[http://www.python.org/dev/peps/pep-0008/|PEP 8]]. When importing Java code, always use fully qualified class names, not package names ie from java.lang import String instead of from java import lang. == Java Code == * Javadoc on any publicly exposed method or field. * 4 spaces for indentation, no tabs. * No nested ternary statements (no ternary statments inside other ternarys). * A luxurious 100 characters per line. * No copy and pasted, repeated code: if you're doing the same thing twice, make a method. * Braces on all loops and if else statements * A space between an if and its parenthesis i.e. `if (` instead of `if(`. * Spaces between annotation element-value pairs. i.e. `@ExposedType(name = "unicode", base = PyBaseString.class)` instead of `@ExposedType(name="unicode",base=PyBaseString.class)` * Methods longer than 10 lines should have whitespace and comments breaking them up into coherent operations. * Descriptive names for fields and methods. * [[http://producingoss.com/en/managing-volunteers.html#territoriality|No @author tags in code.]] * Any field on an object that isn't modified after construction should be final. * Fields at the top of the class. * Don't declare fields with their default values ie `private Object blah;` instead of `private Object blah = null;` and `int i;` instead of `int i = 0;` * Comments begin with a space unless they're commented out code: {{{ Wrong: //XXX: Foo needs refactoring // bar.bar() Correct: // XXX: Quux is flakey //Baz baz = new Baz() }}} Beyond these rules, follow the [[http://www.oracle.com/technetwork/java/javase/documentation/codeconvtoc-136057.html|Sun Java standards]]. [[attachment:Eclipse_Formatting.xml]] can be imported into Eclipse to get it to follow the standards. === Example (adapted from Sun document) === {{{ package org.jython.blah; import org.jython.blah.BlahBlah; /** * Class description goes here. */ public class Blah extends SomeClass { /* A class implementation comment can go here. */ /** classVar1 documentation comment */ public static int classVar1; /** * classVar2 documentation comment that happens to be * more than one line long */ private static Object classVar2; /** instanceVar1 documentation comment */ public Object instanceVar1; /** instanceVar2 documentation comment */ protected int instanceVar2; /** instanceVar3 documentation comment */ private Object[] instanceVar3; /** * ...constructor Blah documentation comment... */ public Blah() { // ...implementation goes here... } /** * ...method doSomething documentation comment... */ public void doSomething() { // ...implementation goes here... } /** * ...method doSomethingElse documentation comment... * @param someParam description */ public void doSomethingElse(Object someParam) { // ...implementation goes here... } } }}}