import java.util.Collection; public class TestBug { public abstract class AbstractData {} public interface IScalarData {} private static interface ValueObjectPropertyIterator { public void iterateOnValueObjectProperty(IScalarData scalarObject, T valueObject, Class valueObjectType, final String name, final Class scalarType) throws Exception; } private static void iterateOnValueObjectProperties(IScalarData scalarObject, T valueObject, ValueObjectPropertyIterator valueObjectPropertyIterator) {} public static void loadScalarFromValueObject(IScalarData scalarObject, T valueObject) { iterateOnValueObjectProperties(scalarObject, valueObject, new ValueObjectPropertyIterator() { public void iterateOnValueObjectProperty(IScalarData scalarObject, T valueObject, Class valueObjectType, String name, Class scalarType) throws Exception { if (true) { if (true) { if (true) { final Collection> lazyCollection = createLazyCollection( name, scalarType, null, null, new CollectionProviderForTargetCollection>() { @Override public Collection> provideCollection( final Collection targetCollection, final Class> scalarCollectionType) { return null; } }); } } } } abstract class CollectionProviderForTargetCollection { abstract public Collection provideCollection(Collection targetCollection, Class scalarCollectionType); } private Collection createLazyCollection(String name, Class scalarType, final Collection valueObjectCollection, final Class scalarCollectionType, CollectionProviderForTargetCollection collectionProvider) { return null; } }); } }