Skip to content

TypeDiscoverer.getParameterTypes does not capture enclosing type parameter of non static inner class #2313

Closed
@christophstrobl

Description

@christophstrobl
static class SomeGeneric<T> {

	private final T value;

	protected SomeGeneric(T value) {
		this.value = value;
	}
}

class NonStaticInnerWithGenericFieldInSuper<T> extends SomeGeneric<T> {

	public NonStaticInnerWithGenericFieldInSuper(T value) {
		super(value);
	}
}

@Test
void capturesEnclosingTypeParameterOfNonStaticInnerClass() {

	assertThat(PreferredConstructorDiscoverer.discover(NonStaticInnerWithGenericFieldInSuper.class)).satisfies(ctor -> {

		assertThat(ctor.getParameters()).hasSize(2);
		assertThat(ctor.getParameters().get(0).getName()).isEqualTo("this$0");
		assertThat(ctor.getParameters().get(1).getName()).isEqualTo("value");
	});
}

It seems Constructor.getGenericParameterTypes() does only return the enclosing types one. Using Constructor.getParameters() can help read the Type via Parameter.getParameterizedType of each Parameter.

Metadata

Metadata

Labels

in: coreIssues in core supporttype: bugA general bug

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions