interfaces wip

This commit is contained in:
Jean-Marie 'Histausse' Mineau 2025-03-06 12:18:55 +01:00
parent fbf6f3b995
commit bfd260fea6
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
3 changed files with 139 additions and 2 deletions

View file

@ -1,10 +1,17 @@
package com.example.theseus.reflection; package com.example.theseus.reflection;
public class ChildReflectee extends Reflectee { public class ChildReflectee extends Reflectee implements IReflectee {
public static String staticOverridenTransfer(String data) { public static String staticOverridenTransfer(String data) {
return "Static Overrided Transfer ChildReflectee: " + data; return "Static Overrided Transfer ChildReflectee: " + data;
} }
public String overridenTransfer(String data) { public String overridenTransfer(String data) {
return "Inherited Overrided Transfer ChildReflectee: " + data; return "Inherited Overrided Transfer ChildReflectee: " + data;
} }
public static String staticOverridenInterfaceTransfer(String data) {
return "Static Overriden Interface Transfer ChildReflectee: " + data;
}
public String overridenInterfaceTransfer(String data) {
return "Overriden Interface Transfer ChildReflectee: " + data;
}
} }

View file

@ -0,0 +1,14 @@
package com.example.theseus.reflection;
public interface IReflectee {
public static String staticDefaultInterfaceTransfer(String data) {
return "Static Interface Transfer IReflectee: " + data;
}
default public String defaultInterfaceTransfer(String data) {
return "Default Interface Transfer IReflectee: " + data;
}
public String overridenInterfaceTransfer(String data);
}

View file

@ -10,6 +10,7 @@ import android.widget.LinearLayout;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.View; import android.view.View;
import android.widget.Button; import android.widget.Button;
import android.content.res.ColorStateList;
import java.lang.ClassLoader; import java.lang.ClassLoader;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
@ -24,6 +25,7 @@ public class MainActivity extends Activity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
ColorStateList buttonColor = ColorStateList.valueOf(0xff808080);
RelativeLayout relLayout = new RelativeLayout(this); RelativeLayout relLayout = new RelativeLayout(this);
relLayout.generateViewId(); relLayout.generateViewId();
@ -87,6 +89,22 @@ public class MainActivity extends Activity {
b11.generateViewId(); b11.generateViewId();
linLayout.addView(b11); linLayout.addView(b11);
Button b12 = new Button(this);
b12.generateViewId();
linLayout.addView(b12);
Button b13 = new Button(this);
b13.generateViewId();
linLayout.addView(b13);
Button b14 = new Button(this);
b14.generateViewId();
linLayout.addView(b14);
Button b15 = new Button(this);
b15.generateViewId();
linLayout.addView(b15);
scrollView.addView(linLayout); scrollView.addView(linLayout);
relLayout.addView(scrollView); relLayout.addView(scrollView);
setContentView(relLayout); setContentView(relLayout);
@ -94,6 +112,7 @@ public class MainActivity extends Activity {
b1.setText("Virtual control"); b1.setText("Virtual control");
b1.setOnClickListener(new View.OnClickListener() { b1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callVirtualMethod(); callVirtualMethod();
} catch(Exception e) { } catch(Exception e) {
@ -105,6 +124,7 @@ public class MainActivity extends Activity {
b2.setText("Virtual rflct"); b2.setText("Virtual rflct");
b2.setOnClickListener(new View.OnClickListener() { b2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callVirtualMethodReflectCall(); callVirtualMethodReflectCall();
} catch(Exception e) { } catch(Exception e) {
@ -116,6 +136,7 @@ public class MainActivity extends Activity {
b3.setText("Instanciation rflct"); b3.setText("Instanciation rflct");
b3.setOnClickListener(new View.OnClickListener() { b3.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callConstructorVirtualMethodReflectConstr(); callConstructorVirtualMethodReflectConstr();
callVirtualMethodReflectOldConst(); callVirtualMethodReflectOldConst();
@ -128,6 +149,7 @@ public class MainActivity extends Activity {
b4.setText("Virtual with scalar control"); b4.setText("Virtual with scalar control");
b4.setOnClickListener(new View.OnClickListener() { b4.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callVirtualMethodCallAllScalar(); callVirtualMethodCallAllScalar();
} catch(Exception e) { } catch(Exception e) {
@ -139,6 +161,7 @@ public class MainActivity extends Activity {
b5.setText("Virtual with scalar rflct"); b5.setText("Virtual with scalar rflct");
b5.setOnClickListener(new View.OnClickListener() { b5.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callVirtualMethodReflectCallAllScalar(); callVirtualMethodReflectCallAllScalar();
} catch(Exception e) { } catch(Exception e) {
@ -150,6 +173,7 @@ public class MainActivity extends Activity {
b6.setText("Virtual with variable args number control"); b6.setText("Virtual with variable args number control");
b6.setOnClickListener(new View.OnClickListener() { b6.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callVirtualMethodCallVarArg(); callVirtualMethodCallVarArg();
} catch(Exception e) { } catch(Exception e) {
@ -161,6 +185,7 @@ public class MainActivity extends Activity {
b7.setText("Virtual with variable args number rflct"); b7.setText("Virtual with variable args number rflct");
b7.setOnClickListener(new View.OnClickListener() { b7.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callVirtualMethodReflectVarArg(); callVirtualMethodReflectVarArg();
} catch(Exception e) { } catch(Exception e) {
@ -172,6 +197,7 @@ public class MainActivity extends Activity {
b8.setText("Static control"); b8.setText("Static control");
b8.setOnClickListener(new View.OnClickListener() { b8.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callStaticMethod(); callStaticMethod();
} catch(Exception e) { } catch(Exception e) {
@ -183,6 +209,7 @@ public class MainActivity extends Activity {
b9.setText("Static rflct"); b9.setText("Static rflct");
b9.setOnClickListener(new View.OnClickListener() { b9.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callStaticMethodReflectCall(); callStaticMethodReflectCall();
} catch(Exception e) { } catch(Exception e) {
@ -194,6 +221,7 @@ public class MainActivity extends Activity {
b10.setText("Extends control"); b10.setText("Extends control");
b10.setOnClickListener(new View.OnClickListener() { b10.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callVirtualInherited(); callVirtualInherited();
callVirtualOverriden(); callVirtualOverriden();
@ -208,6 +236,7 @@ public class MainActivity extends Activity {
b11.setText("Extends rflct"); b11.setText("Extends rflct");
b11.setOnClickListener(new View.OnClickListener() { b11.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) { public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try { try {
callVirtualInheritedReflect(); callVirtualInheritedReflect();
callVirtualOverridenReflect(); callVirtualOverridenReflect();
@ -218,6 +247,34 @@ public class MainActivity extends Activity {
} }
} }
}); });
b12.setText("Interface control");
b12.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try {
callVirtualInheritedInterface();
callVirtualOverridenInterface();
callStaticInheritedInterface();
} catch(Exception e) {
Log.e("THESEUS", "Error: ", e);
}
}
});
b13.setText("Interface rflct");
b13.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
v.setBackgroundTintList(buttonColor);
try {
//callVirtualInheritedInterfaceReflect();
//callVirtualOverridenInterfaceReflect();
callStaticInheritedInterfaceReflect();
} catch(Exception e) {
Log.e("THESEUS", "Error: ", e);
}
}
});
} }
// A normal virtual method call // A normal virtual method call
@ -440,7 +497,66 @@ public class MainActivity extends Activity {
Utils.sink(this, newData); Utils.sink(this, newData);
} }
// TODO: Interface public void callVirtualInheritedInterface() {
String data = Utils.source("T9 control virtual interface default");
String newData = new ChildReflectee().defaultInterfaceTransfer(data);
Utils.sink(this, newData);
}
public void callVirtualOverridenInterface() {
String data = Utils.source("T10 control virtual interface overriden");
String newData = new ChildReflectee().overridenInterfaceTransfer(data);
Utils.sink(this, newData);
}
public void callStaticInheritedInterface() {
String data = Utils.source("T11 control static interface");
String newData = IReflectee.staticDefaultInterfaceTransfer(data);
Utils.sink(this, newData);
}
public void callVirtualInheritedInterfaceReflect() throws
ClassNotFoundException,
NoSuchMethodException,
IllegalAccessException,
InvocationTargetException
{
String data = Utils.source("R9 reflect virtual interface default");
ChildReflectee obj = new ChildReflectee();
ClassLoader cl = MainActivity.class.getClassLoader();
Class clz = cl.loadClass("com.example.theseus.reflection.ChildReflectee");
Method mth = clz.getMethod("defaultInterfaceTransfer", String.class);
String newData = (String) mth.invoke(obj, data);
Utils.testIsChildReflectee(this, obj);
Utils.sink(this, newData);
}
public void callVirtualOverridenInterfaceReflect() throws
ClassNotFoundException,
NoSuchMethodException,
IllegalAccessException,
InvocationTargetException
{
String data = Utils.source("R10 reflect virtual interface overriden");
ChildReflectee obj = new ChildReflectee();
ClassLoader cl = MainActivity.class.getClassLoader();
Class clz = cl.loadClass("com.example.theseus.reflection.ChildReflectee");
Method mth = clz.getMethod("overridenInterfaceTransfer", String.class);
String newData = (String) mth.invoke(obj, data);
Utils.testIsChildReflectee(this, obj);
Utils.sink(this, newData);
}
public void callStaticInheritedInterfaceReflect() throws
ClassNotFoundException,
NoSuchMethodException,
IllegalAccessException,
InvocationTargetException
{
String data = Utils.source("R11 reflect static interface");
ClassLoader cl = MainActivity.class.getClassLoader();
Class clz = cl.loadClass("com.example.theseus.reflection.IReflectee");
//Method mth = clz.getDeclaredMethod("staticDefaultInterfaceTransfer", String.class);
Method mth = clz.getMethod("staticDefaultInterfaceTransfer", String.class);
String newData = (String) mth.invoke(null, data);
Utils.sink(this, newData);
}
// TODO: many argument methods // TODO: many argument methods
// TODO: factory patern // TODO: factory patern
} }