-
Notifications
You must be signed in to change notification settings - Fork 45
Closed
Labels
comp-codegenIssue is related to code generatorIssue is related to code generatorctg-bugIssue is a bugIssue is a bugstatus-verifiedBug fix is verifiedBug fix is verified
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
Labels
comp-codegenIssue is related to code generatorIssue is related to code generatorctg-bugIssue is a bugIssue is a bugstatus-verifiedBug fix is verifiedBug fix is verified
Type
Projects
Status
Done