summaryrefslogtreecommitdiff
path: root/tutorial/examples/autoimp/AutoImplementerClass.java
diff options
context:
space:
mode:
authorKenny Ballou <kballou@devnulllabs.io>2018-11-19 22:59:50 -0700
committerKenny Ballou <kballou@devnulllabs.io>2018-11-19 22:59:50 -0700
commitea3e1b949dcbdc09518f17eee0bcf21d41d76896 (patch)
tree7ec7a7fb4df67815a9b7bb0e4d95d67c4050e2a2 /tutorial/examples/autoimp/AutoImplementerClass.java
downloadopenjava-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.java78
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 );
+ }
+
+}