/** * All classes transitively reachable via only public method signatures of the SDK. * * <p>Note that our idea of "public" does not include various internal-only APIs. */ public static ApiSurface getSdkApiSurface(final ClassLoader classLoader) throws IOException { return ApiSurface.ofPackage("org.apache.beam", classLoader) .pruningPattern("org[.]apache[.]beam[.].*Test") // Exposes Guava, but not intended for users .pruningClassName("org.apache.beam.sdk.util.common.ReflectHelpers") // test only .pruningClassName("org.apache.beam.sdk.testing.InterceptingUrlClassLoader") // test only .pruningPrefix("org.apache.beam.model.") .pruningPrefix("org.apache.beam.vendor.") .pruningPrefix("java"); }
@SuppressWarnings({"rawtypes", "unchecked"}) private void assertExposed(final Class classToExamine, final Class... exposedClasses) { final ApiSurface apiSurface = ApiSurface.ofClass(classToExamine).pruningPrefix("java"); final ImmutableSet<Matcher<Class<?>>> allowed = FluentIterable.from( Iterables.concat(Sets.newHashSet(classToExamine), Sets.newHashSet(exposedClasses))) .transform(Matchers::<Class<?>>equalTo) .toSet(); assertThat(apiSurface, containsOnlyClassesMatching(allowed)); }