package jadx.tests.integration.inner;
import jadx.core.dex.nodes.ClassNode;
import jadx.tests.api.IntegrationTest;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.junit.Test;
import static jadx.tests.api.utils.JadxMatchers.containsOne;
import static org.hamcrest.Matchers.containsString;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.sameInstance;
import static org.junit.Assert.assertThat;
public class TestAnonymousClass5 extends IntegrationTest {
public static class TestCls {
private final Map<String, TestCls> map = new HashMap<String, TestCls>();
private int a;
public Iterable<TestCls> test(String name) {
final TestCls cls = map.get(name);
if (cls == null) {
return null;
}
final int listSize = cls.size();
final Iterator<TestCls> iterator = new Iterator<TestCls>() {
int counter = 0;
@Override
public TestCls next() {
cls.a++;
counter++;
return cls;
}
@Override
public boolean hasNext() {
return counter < listSize;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
};
return new Iterable<TestCls>() {
@Override
public Iterator<TestCls> iterator() {
return iterator;
}
};
}
private int size() {
return 7;
}
public void check() {
TestCls v = new TestCls();
v.a = 3;
map.put("a", v);
Iterable<TestCls> it = test("a");
TestCls next = it.iterator().next();
assertThat(next, sameInstance(v));
assertThat(next.a, is(4));
}
}
@Test
public void test() {
ClassNode cls = getClassNode(TestCls.class);
String code = cls.getCode().toString();
assertThat(code, containsOne("map.get(name);"));
assertThat(code, not(containsString("access$008")));
// TODO
// assertThat(code, not(containsString("synthetic")));
}
}