Closed
Description
Description
In some cases codegen works with arrays using reflection even if there is no need for it.
To Reproduce
Run plugin on the following code:
package rndpkg;
class C {
int x;
public C(int x) { this.x = x; }
}
public class SomeClass {
public int f(C[] c) {
c[0].x -= 1;
return c[0].x;
}
}
Expected behavior
Produced tests don't use reflection.
Actual behavior
Tests look like this:
@Test
@DisplayName("f: c = C[0] -> throw ArrayIndexOutOfBoundsException")
public void testFThrowsAIOOBEWithEmptyObjectArray() throws Throwable {
SomeClass someClass = new SomeClass();
Object[] c = createArray("rndpkg.C", 0);
/* This test fails because method [rndpkg.SomeClass.f] produces [java.lang.ArrayIndexOutOfBoundsException: 0]
rndpkg.SomeClass.f(SomeClass.java:10) */
Class someClassClazz = Class.forName("rndpkg.SomeClass");
Class cType = Class.forName("[Lrndpkg.C;");
Method fMethod = someClassClazz.getDeclaredMethod("f", cType);
fMethod.setAccessible(true);
Object[] fMethodArguments = new Object[1];
fMethodArguments[0] = c;
try {
fMethod.invoke(someClass, fMethodArguments);
} catch (InvocationTargetException invocationTargetException) {
throw invocationTargetException.getTargetException();
}
}
Metadata
Metadata
Assignees
Type
Projects
Status
Done