output: #fixed code
                                  @Test
      public void testNestedClass() throws Exception {
          Map<String, FieldGenericTypeBind> map = ReflectUtils.getGenericBeanFields(barRef);
  
          FieldGenericTypeBind barMaps = map.get("maps");
          ParameterizedType parameterizedType = (ParameterizedType) barMaps.getType();
          System.out.println(parameterizedType.getTypeName());
          System.out.println(parameterizedType.getOwnerType());
          Assert.assertThat(parameterizedType.getTypeName(), is("java.util.Map<java.lang.String, java.util.Map<java.lang.String, java.util.List<test.utils.lang.TestGenericTypeReference$Foo>>>"));
          Assert.assertThat(parameterizedType.getOwnerType(), nullValue());
  
          FieldGenericTypeBind bar = map.get("bar");
          parameterizedType = (ParameterizedType) bar.getType();
          System.out.println(parameterizedType.getTypeName());
          System.out.println(parameterizedType.getOwnerType());
          Assert.assertThat(parameterizedType.getTypeName(), is("java.util.List<java.lang.String>"));
          Assert.assertThat(parameterizedType.getOwnerType(), nullValue());
  
  
          map = ReflectUtils.getGenericBeanFields(carRef);
          FieldGenericTypeBind car = map.get("car");
          parameterizedType = (ParameterizedType) car.getType();
          System.out.println(parameterizedType.getTypeName());
          System.out.println(parameterizedType.getOwnerType());
          Assert.assertThat(parameterizedType.getTypeName(), is("java.util.List<java.lang.Integer>"));
          Assert.assertThat(parameterizedType.getOwnerType(), nullValue());
  
          map = ReflectUtils.getGenericBeanFields(parRef);
          FieldGenericTypeBind par = map.get("par");
          Class<?> clazz = (Class<?>) par.getType();
          System.out.println(clazz.getTypeName());
          Assert.assertThat(clazz.getTypeName(), is("java.lang.String"));
  
          Map<String, MethodGenericTypeBind> getterMap = ReflectUtils.getGenericBeanGetterMethods(sarRef);
          MethodGenericTypeBind list = getterMap.get("list");
          System.out.println(list.getType().getTypeName());
          Assert.assertThat(list.getType().getTypeName(), is("java.util.List<java.util.Map<java.lang.String, test.utils.lang.TestGenericTypeReference$Foo>>"));
  
          MethodGenericTypeBind sar = getterMap.get("sar");
          Assert.assertThat(sar.getType().getTypeName(), is("java.lang.Integer"));
      }
input: #vulnerable code 
                                  @Test
      public void testNestedClass() throws Exception {
          Map<String, FieldGenericTypeBind> map = ReflectUtils.getGenericBeanFields(
                  new GenericTypeReference<Request<Map<String, Foo>, String, Map<String, List<Foo>>>.Bar<List<String>>>() {
                  }, null);
  
          FieldGenericTypeBind barMaps = map.get("maps");
          ParameterizedType parameterizedType = (ParameterizedType) barMaps.getType();
          System.out.println(parameterizedType.getTypeName());
          System.out.println(parameterizedType.getOwnerType());
          Assert.assertThat(parameterizedType.getTypeName(), is("java.util.Map<java.lang.String, java.util.Map<java.lang.String, java.util.List<test.utils.lang.TestGenericTypeReference$Foo>>>"));
          Assert.assertThat(parameterizedType.getOwnerType(), nullValue());
  
          FieldGenericTypeBind bar = map.get("bar");
          parameterizedType = (ParameterizedType) bar.getType();
          System.out.println(parameterizedType.getTypeName());
          System.out.println(parameterizedType.getOwnerType());
          Assert.assertThat(parameterizedType.getTypeName(), is("java.util.List<java.lang.String>"));
          Assert.assertThat(parameterizedType.getOwnerType(), nullValue());
  
  
          map = ReflectUtils.getGenericBeanFields(
                  new GenericTypeReference<Request<Map<String, Foo>, String, Map<String, List<Foo>>>.Car<List<String>>>() {
                  }, null);
          FieldGenericTypeBind car = map.get("car");
          parameterizedType = (ParameterizedType) car.getType();
          System.out.println(parameterizedType.getTypeName());
          System.out.println(parameterizedType.getOwnerType());
          Assert.assertThat(parameterizedType.getTypeName(), is("java.util.List<java.lang.String>"));
          Assert.assertThat(parameterizedType.getOwnerType(), nullValue());
  
          map = ReflectUtils.getGenericBeanFields(
                  new GenericTypeReference<Request<Map<String, Foo>, String, Map<String, List<Foo>>>.Par>() {
                  }, null);
          FieldGenericTypeBind par = map.get("par");
          Class<?> clazz = (Class<?>) par.getType();
          System.out.println(clazz.getTypeName());
          Assert.assertThat(clazz.getTypeName(), is("java.lang.String"));
      } 
                              #location 8 
                              #vulnerability type NULL_DEREFERENCE