isOverridable() check for a method

GitOrigin-RevId: 30bb381b0e9dea864850bda46ece5c081c1bcba0
This commit is contained in:
Eugene Zhuravlev
2024-03-12 11:14:05 +00:00
committed by intellij-monorepo-bot
parent 269a7a6ce7
commit f78bf9fb25
2 changed files with 14 additions and 6 deletions
@@ -356,9 +356,11 @@ public final class JavaDifferentiateStrategy extends JvmDifferentiateStrategyImp
debug("Return type, throws list or signature changed --- affecting method usages");
affectMemberUsages(context, changedClass.getReferenceID(), changedMethod, propagated);
if (!changedMethod.isPrivate() && !changedMethod.isStatic()) {
for (JvmNodeReferenceID subClass : unique(map(future.getOverridingMethods(changedClass, changedMethod, changedMethod::isSameByJavaRules), p -> p.getFirst().getReferenceID()))) {
affectNodeSources(context, subClass, "Affect source file of a class which overrides the changed method: ");
if (!changedMethod.isPrivate() && !changedMethod.isConstructor() && !changedMethod.isStatic()) {
if (!changedMethod.isFinal()) {
for (JvmNodeReferenceID subClass : unique(map(future.getOverridingMethods(changedClass, changedMethod, changedMethod::isSameByJavaRules), p -> p.getFirst().getReferenceID()))) {
affectNodeSources(context, subClass, "Affect source file of a class which overrides the changed method: ");
}
}
for (JvmNodeReferenceID id : propagated) {
for (JvmClass subClass : future.getNodes(id, JvmClass.class)) {
@@ -434,7 +436,7 @@ public final class JavaDifferentiateStrategy extends JvmDifferentiateStrategyImp
if (toRecompile.contains(AnnotationChangesTracker.Recompile.USAGES)) {
affectMemberUsages(context, changedClass.getReferenceID(), changedMethod, propagated);
if (changedMethod.isAbstract() || toRecompile.contains(AnnotationChangesTracker.Recompile.SUBCLASSES)) {
for (Pair<JvmClass, JvmMethod> pair : recurse(Pair.create(changedClass, changedMethod), p -> future.getOverridingMethods(p.first, p.second, p.second::isSameByJavaRules), false)) {
for (Pair<JvmClass, JvmMethod> pair : recurse(Pair.create(changedClass, changedMethod), p -> p.second.isOverridable()? future.getOverridingMethods(p.first, p.second, p.second::isSameByJavaRules) : Collections.emptyList(), false)) {
JvmNodeReferenceID clsId = pair.first.getReferenceID();
JvmMethod meth = pair.getSecond();
affectMemberUsages(context, clsId, meth, future.collectSubclassesWithoutMethod(clsId, meth));
@@ -524,8 +526,10 @@ public final class JavaDifferentiateStrategy extends JvmDifferentiateStrategyImp
}
}
for (Pair<JvmClass, JvmMethod> overriding : future.getOverridingMethods(changedClass, removedMethod, removedMethod::isSameByJavaRules)) {
affectNodeSources(context, overriding.getFirst().getReferenceID(), "Affecting file by overriding: ");
if (removedMethod.isOverridable()) {
for (Pair<JvmClass, JvmMethod> overriding : future.getOverridingMethods(changedClass, removedMethod, removedMethod::isSameByJavaRules)) {
affectNodeSources(context, overriding.getFirst().getReferenceID(), "Affecting file by overriding: ");
}
}
if (!removedMethod.isConstructor() && !removedMethod.isAbstract() && !removedMethod.isStatic()) {
@@ -52,6 +52,10 @@ public final class JvmMethod extends ProtoMember implements DiffCapable<JvmMetho
return "<init>".equals(getName());
}
public boolean isOverridable() {
return !isFinal() && !isStatic() && !isPrivate() && !isConstructor();
}
@Override
public MethodUsage createUsage(JvmNodeReferenceID owner) {
return new MethodUsage(owner, getName(), getDescriptor());