From ea3e1b949dcbdc09518f17eee0bcf21d41d76896 Mon Sep 17 00:00:00 2001 From: Kenny Ballou Date: Mon, 19 Nov 2018 22:59:50 -0700 Subject: OJ (aka OpenJava) modernization/mirroring Signed-off-by: Kenny Ballou --- tutorial/examples/bca/AutoAdaptationClass.oj | 48 ++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 tutorial/examples/bca/AutoAdaptationClass.oj (limited to 'tutorial/examples/bca/AutoAdaptationClass.oj') diff --git a/tutorial/examples/bca/AutoAdaptationClass.oj b/tutorial/examples/bca/AutoAdaptationClass.oj new file mode 100644 index 0000000..9819bc2 --- /dev/null +++ b/tutorial/examples/bca/AutoAdaptationClass.oj @@ -0,0 +1,48 @@ +/* + * AUtoAdaptationClass.oj + * + * Source Code Adaptation example. + * (Not real Binary Code Adaptation) + * + * Oct 29, 1999 by Michiaki Tatsubori + */ +package examples.bca; + + +import openjava.mop.*; +import openjava.ptree.*; +import openjava.syntax.*; + + +/** + * The class RTReflClass patches the class + * implementing Writable to implement Printable. + */ +public class AutoAdaptationClass instantiates Metaclass extends OJClass +{ + /** Overrides to translate definition */ + public convenient void translateDefinition() throws MOPException { + /* only the case this class implements Writable */ + if (! Writable.class.isAssignableFrom( this )) return; + + OJClass newface = Printable.class; + + addInterface( newface ); + + OJMethod facemtd = newface.getMethod( "print", new OJClass[0] ); + + OJMethod impmtd = new OJMethod( this, + facemtd.getModifiers().remove( OJModifier.ABSTRACT ), + facemtd.getReturnType(), + facemtd.getName(), facemtd.getParameterTypes(), + facemtd.getExceptionTypes(), + null + ); + addMethod( impmtd ); + + StatementList body = makeStatementList( + "this.write(java.lang.System.out);" + ); + impmtd.setBody( body ); + } +} -- cgit v1.2.1