{"record":{"id":"5d01ab86da193bb3","repo":"google/guava","slug":"cannot-determine-value-for-parameter-s-of-s","errorCode":null,"errorMessage":"Cannot determine value for parameter %s of %s","messagePattern":"Cannot determine value for parameter (.+?) of (.+?)","errorType":"exception","errorClass":"ParameterNotInstantiableException","httpStatus":null,"severity":"error","filePath":"android/guava-testlib/src/com/google/common/testing/ClassSanityTester.java","lineNumber":687,"sourceCode":"          @Override\n          @Nullable Object interfaceMethodCalled(Class<?> interfaceType, Method method) {\n            return getDummyValue(TypeToken.of(interfaceType).method(method).getReturnType());\n          }\n        };\n    for (Entry<Class<?>, Collection<Object>> entry : distinctValues.asMap().entrySet()) {\n      generator.addSampleInstances((Class) entry.getKey(), entry.getValue());\n    }\n    return generator;\n  }\n\n  private static @Nullable Object generateDummyArg(Parameter param, FreshValueGenerator generator)\n      throws ParameterNotInstantiableException {\n    if (isNullable(param)) {\n      return null;\n    }\n    Object arg = generator.generateFresh(param.getType());\n    if (arg == null) {\n      throw new ParameterNotInstantiableException(param);\n    }\n    return arg;\n  }\n\n  private static <X extends Throwable> void throwFirst(List<X> exceptions) throws X {\n    if (!exceptions.isEmpty()) {\n      throw exceptions.get(0);\n    }\n  }\n\n  /** Factories with the least number of parameters are listed first. */\n  private static <T> ImmutableList<Invokable<?, ? extends T>> getFactories(TypeToken<T> type) {\n    List<Invokable<?, ? extends T>> factories = new ArrayList<>();\n    for (Method method : type.getRawType().getDeclaredMethods()) {\n      Invokable<?, ?> invokable = type.method(method);\n      if (!invokable.isPrivate()\n          && !invokable.isSynthetic()\n          && invokable.isStatic()","sourceCodeStart":669,"sourceCodeEnd":705,"githubUrl":"https://github.com/google/guava/blob/94f39958baf7ad51ddf9c70e406ed6b188194daa/android/guava-testlib/src/com/google/common/testing/ClassSanityTester.java#L669-L705","documentation":"Thrown as ParameterNotInstantiableException by generateDummyArg() when, for a non-@Nullable constructor/factory parameter, FreshValueGenerator.generateFresh() returns null (no sample/default is registered for that parameter's type). The tester cannot even invoke the factory to begin testing, so it aborts that factory.","triggerScenarios":"Calling ClassSanityTester.test*(...) on a class whose constructor or static factory has a parameter of a type with no known default (interface/abstract/third-party type) and not marked @Nullable. generateFresh returns null -> throw ParameterNotInstantiableException.","commonSituations":"Testing a value object that takes a collaborator interface in its constructor; types not covered by the built-in default value table; newly added factory parameters of exotic types.","solutions":["Register a default instance for the parameter type via ClassSanityTester.setDefault(Class, instance).","Mark the parameter @Nullable if null is a valid argument so the tester passes null instead of failing.","Provide a FreshValueGenerator sample or restrict the tested factories."],"exampleFix":"// before\nsanityTester.testNulls(MyService.class); // ctor takes Executor -> no default\n\n// after\nsanityTester.setDefault(Executor.class, Runnable::run);\nsanityTester.testNulls(MyService.class);","handlingStrategy":"validation","validationCode":"sanityTester.setDefault(Executor.class, Runnable::run); // register default\nsanityTester.testNulls(MyService.class);","typeGuard":null,"tryCatchPattern":"try { sanityTester.testNulls(MyType.class); }\ncatch (ClassSanityTester.ParameterNotInstantiableException e) {\n  // e.getMessage() names the parameter; register a default or mark @Nullable, retry\n}","preventionTips":["Register setDefault(Class, instance) for every non-primitive, non-@Nullable factory parameter type.","Annotate genuinely nullable parameters with @Nullable."],"tags":["guava-testlib","reflection","class-sanity","instantiation"],"backgroundTag":null,"analyzedSha":"94f39958baf7ad51ddf9c70e406ed6b188194daa","analyzedAt":"2026-08-13T22:50:30.265Z","schemaVersion":2},"datasetVersion":"2026-08-14T00:17:13.853Z"}