diff options
author | Kenny Ballou <kballou@devnulllabs.io> | 2018-11-19 22:59:50 -0700 |
---|---|---|
committer | Kenny Ballou <kballou@devnulllabs.io> | 2018-11-19 22:59:50 -0700 |
commit | ea3e1b949dcbdc09518f17eee0bcf21d41d76896 (patch) | |
tree | 7ec7a7fb4df67815a9b7bb0e4d95d67c4050e2a2 /tutorial/examples/autoimp/AutoImplementerClass.java | |
download | openjava-ea3e1b949dcbdc09518f17eee0bcf21d41d76896.tar.gz openjava-ea3e1b949dcbdc09518f17eee0bcf21d41d76896.tar.xz |
OJ (aka OpenJava) modernization/mirroring
Signed-off-by: Kenny Ballou <kballou@devnulllabs.io>
Diffstat (limited to 'tutorial/examples/autoimp/AutoImplementerClass.java')
-rw-r--r-- | tutorial/examples/autoimp/AutoImplementerClass.java | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/tutorial/examples/autoimp/AutoImplementerClass.java b/tutorial/examples/autoimp/AutoImplementerClass.java new file mode 100644 index 0000000..11f5040 --- /dev/null +++ b/tutorial/examples/autoimp/AutoImplementerClass.java @@ -0,0 +1,78 @@ +/* + * This code was generated by ojc. + */ +/* + * AutoImplementerClass.oj + * + * Apr 29, 1999, by Michiaki Tatsubori + * Feb 2, 1999, by Michiaki Tatsubori + */ +package examples.autoimp; + + +import openjava.mop.*; +import openjava.ptree.*; +import openjava.syntax.*; + + +/** + * The metaclass <code>AutoImprementerClass</code> provides classes + * with a facility automatically implementing null methods for + * not implemented methods. + * <p> + * + * @author Michiaki Tatsubori + * @version 1.0 + * @see openjava.mop.OJClass#translateDefinition() + * @see openjava.mop.OJClass#isRegisteredModifier() + */ +public class AutoImplementerClass extends OJClass +{ + + public void translateDefinition() + throws MOPException + { + OJMethod[] methods = getInheritedMethods(); + for (int i = 0; i < methods.length; ++i) { + if (!methods[i].getModifiers().isAbstract() || hasDeclaredMethod( methods[i] )) { + continue; + } + addMethod( makeNullMethod( methods[i] ) ); + } + } + + private boolean hasDeclaredMethod( OJMethod m ) + { + try { + getDeclaredMethod( m.getName(), m.getParameterTypes() ); + return true; + } catch ( NoSuchMemberException e ) { + return false; + } + } + + private OJMethod makeNullMethod( OJMethod m ) + throws MOPException + { + OJMethod result = new OJMethod( this, m.getModifiers().remove( OJModifier.ABSTRACT ), m.getReturnType(), m.getName(), m.getParameterTypes(), m.getExceptionTypes(), null ); + StatementList body = new StatementList(); + if (m.getReturnType() == OJSystem.VOID) { + body.add( new ReturnStatement() ); + } else { + body.add( new ReturnStatement( Literal.constantNull() ) ); + } + result.setBody( body ); + return result; + } + + public AutoImplementerClass( openjava.mop.Environment oj_param0, openjava.mop.OJClass oj_param1, openjava.ptree.ClassDeclaration oj_param2 ) + { + super( oj_param0, oj_param1, oj_param2 ); + } + + public AutoImplementerClass( java.lang.Class oj_param0, openjava.mop.MetaInfo oj_param1 ) + { + super( oj_param0, oj_param1 ); + } + +} |