Skip to content

Commit

Permalink
An interface that does not declare a default method is independent fr…
Browse files Browse the repository at this point in the history
…om a class initialization point of view

(cherry picked from commit 5bf1412)
  • Loading branch information
Christian Wimmer authored and gilles-duboscq committed Aug 18, 2019
1 parent d7408b3 commit 7f7216e
Showing 1 changed file with 18 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,14 @@ public void initializeAtBuildTime(Class<?> aClass, String reason) {
}

private void setSubclassesAsRunTime(Class<?> clazz) {
if (clazz.isInterface() && !ClassInitializationFeature.declaresDefaultMethods(metaAccess.lookupJavaType(clazz))) {
/*
* An interface that does not declare a default method is independent from a class
* initialization point of view, i.e., it is not initialized when a class implementing
* that interface is initialized.
*/
return;
}
loader.findSubclasses(clazz, false).stream()
.filter(c -> !c.equals(clazz))
.filter(c -> !(c.isInterface() && !ClassInitializationFeature.declaresDefaultMethods(metaAccess.lookupJavaType(c))))
Expand Down Expand Up @@ -555,7 +563,16 @@ private InitKind computeInitKindAndMaybeInitializeClass(Class<?> clazz, boolean
}

private InitKind processInterfaces(Class<?> clazz, boolean memoizeEager) {
InitKind result = computeInitKindForClass(clazz);
/*
* Note that we do not call computeInitKindForClass(clazz) on purpose: if clazz is the root
* class or an interface declaring default methods, then
* computeInitKindAndMaybeInitializeClass() already calls computeInitKindForClass. If the
* interface does not declare default methods, than we must not take the InitKind of that
* interface into account, because interfaces without default methods are independent from a
* class initialization point of view.
*/
InitKind result = InitKind.BUILD_TIME;

for (Class<?> iface : clazz.getInterfaces()) {
if (ClassInitializationFeature.declaresDefaultMethods(metaAccess.lookupJavaType(iface))) {
/*
Expand Down

0 comments on commit 7f7216e

Please sign in to comment.