diff --git a/src/main/java/soot/dotnet/members/ArrayByReferenceWrapperGenerator.java b/src/main/java/soot/dotnet/members/ArrayByReferenceWrapperGenerator.java
index ae27ace7b9e..b2c341e3af4 100644
--- a/src/main/java/soot/dotnet/members/ArrayByReferenceWrapperGenerator.java
+++ b/src/main/java/soot/dotnet/members/ArrayByReferenceWrapperGenerator.java
@@ -42,16 +42,15 @@
import soot.jimple.JimpleBody;
/**
- * Array elements in .NET can be loaded by reference.
- * Since Jimple does not support this semantic, we generate Wrapper classes.
+ * Array elements in .NET can be loaded by reference. Since Jimple does not support this semantic, we generate Wrapper
+ * classes.
*
- * Note that in .NET, array covariance is allowed for reference types:
- *
+ * Note that in .NET, array covariance is allowed for reference types:
string[] strings = new string[10];
object[] objects = strings;
-
- * However, for value types, this is not the case.
- * So all the reference types may share one object[] wrapper, but value types need their own.
+
However, for value types, this is not the case. So all the reference types may share one object[] wrapper, but
+ * value types need their own.
+ *
* @author Marc Miltenberger
*/
public class ArrayByReferenceWrapperGenerator {
@@ -77,6 +76,7 @@ public synchronized static SootClass getWrapperClass(Type elementType) {
Type arrType = elementType.makeArrayType();
SootClass sc = scene.makeSootClass(name, Modifier.FINAL | Modifier.STATIC);
+ Scene.v().addClass(sc);
sc.setApplicationClass();
SootField arrayField = scene.makeSootField("array", arrType);
arrayField.setModifiers(Modifier.PUBLIC | Modifier.FINAL);
diff --git a/src/main/java/soot/dotnet/members/ByReferenceWrapperGenerator.java b/src/main/java/soot/dotnet/members/ByReferenceWrapperGenerator.java
index b4763f94691..9c0b89abe66 100644
--- a/src/main/java/soot/dotnet/members/ByReferenceWrapperGenerator.java
+++ b/src/main/java/soot/dotnet/members/ByReferenceWrapperGenerator.java
@@ -61,6 +61,7 @@ public synchronized static SootClass getWrapperClass(Type t) {
return rt.getSootClass();
}
SootClass sc = scene.makeSootClass(name, Modifier.FINAL | Modifier.STATIC);
+ scene.addClass(sc);
sc.setApplicationClass();
SootField r = scene.makeSootField(WRAPPER_FIELD_NAME, RefType.v("System.Object"));
r.setModifiers(Modifier.PUBLIC);
diff --git a/src/main/java/soot/dotnet/members/method/DelegateHandler.java b/src/main/java/soot/dotnet/members/method/DelegateHandler.java
index 23cf126a540..6f94ee2ab22 100644
--- a/src/main/java/soot/dotnet/members/method/DelegateHandler.java
+++ b/src/main/java/soot/dotnet/members/method/DelegateHandler.java
@@ -199,38 +199,6 @@ private void createDelegateMethods(Scene sc, SootClass actualDelegateClass, List
}
{
- //public static List remove(List my, List other)
- //{
- // List list = new List(my);
- //
- // int idx = list.Count;
- // idx -= other.Count;
- // if (other.Count == 0)
- // return list;
- // Delegate firstOtherElem = other[0];
- //next:
- // while (idx >= 0)
- // {
- // idx = list.LastIndexOf(firstOtherElem, idx);
- // if (idx == -1)
- // break;
- // int i = idx;
- // int x = 0;
- // while (i < idx + other.Count)
- // {
- // if (list[i] != other[x])
- // {
- // idx--;
- // goto next;
- // }
- // x++;
- // i++;
- // }
- // list.RemoveRange(idx, other.Count);
- // break;
- // }
- // return list;
- //}
SootMethod removeFrom = sc.makeSootMethod(REMOVE_METHOD_NAME, Arrays.asList(delegateInterface.getType()),
delegateInterface.getType(), Modifier.PUBLIC);
@@ -379,7 +347,7 @@ private void createDelegateMethods(Scene sc, SootClass actualDelegateClass, List
Stmt backedge = j.newIfStmt(j.newEqExpr(lclIndex, lclCount), retS);
bodyInvoke.getUnits().add(backedge);
- //loop
+ // loop
List parameters = new ArrayList<>();
Local objFromDelegate = j.newLocal("objFromDelegate", sc.getObjectType());
bodyInvoke.getLocals().add(objFromDelegate);
@@ -428,7 +396,7 @@ private void createDelegateMethods(Scene sc, SootClass actualDelegateClass, List
protected void createSingleConstructor(Scene sc, SootClass actualDelegateClass) {
Jimple j = Jimple.v();
- //we use a long type as a parameter to distinguish it from the one generate by the .NET compiler
+ // we use a long type as a parameter to distinguish it from the one generate by the .NET compiler
mCtorSingle
= sc.makeSootMethod("", Arrays.asList(sc.getObjectType(), LongType.v()), VoidType.v(), Modifier.PUBLIC);
@@ -485,6 +453,7 @@ public static synchronized SootClass createDelegateInterface(Scene sc) {
}
delegateInterface
= sc.makeSootClass(DELEGATE_INTERFACE_CLASSNAME, Modifier.PUBLIC | Modifier.INTERFACE | Modifier.ABSTRACT);
+ Scene.v().addClass(delegateInterface);
delegateInterface.setApplicationClass();
SootMethod combineWith = sc.makeSootMethod(COMBINE_WITH_METHOD_NAME, Arrays.asList(delegateInterface.getType()),
@@ -513,7 +482,7 @@ public static synchronized SootClass createDelegateInterface(Scene sc) {
Unit retTwo = j.newReturnStmt(bd.getParameterLocal(0));
uc.add(j.newIfStmt(j.newEqExpr(bd.getParameterLocal(0), NullConstant.v()), retOne));
uc.add(j.newIfStmt(j.newEqExpr(bd.getParameterLocal(1), NullConstant.v()), retTwo));
- // assign.setRightOp(j.newInterfaceInvokeExpr((Local) inv.getArg(0), combineMRef, inv.getArg(1)));
+ // assign.setRightOp(j.newInterfaceInvokeExpr((Local) inv.getArg(0), combineMRef, inv.getArg(1)));
uc.add(j.newAssignStmt(l,
j.newInterfaceInvokeExpr(bd.getParameterLocal(0), combineWith.makeRef(), bd.getParameterLocal(1))));
uc.add(j.newReturnStmt(l));
@@ -529,6 +498,7 @@ protected static synchronized SootClass createDelegateHolder(Scene sc) {
return dh;
}
SootClass delegateHolder = sc.makeSootClass(DELEGATE_HOLDER_CLASSNAME, Modifier.PUBLIC);
+ Scene.v().addClass(delegateHolder);
delegateHolder.setApplicationClass();
SootField instanceField = sc.makeSootField(INSTANCE_FIELDNAME, sc.getObjectType(), Modifier.PUBLIC);