8000 Do not report any incompatibilities if class becomes public · siom79/japicmp@c0ace88 · GitHub
[go: up one dir, main page]

Skip to content

Commit c0ace88

Browse files
committed
Do not report any incompatibilities if class becomes public
1 parent 77d89b9 commit c0ace88

File tree

3 files changed

+14
-16
lines changed

3 files changed

+14
-16
lines changed

japicmp/src/main/java/japicmp/compat/CompatibilityChanges.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ private Map<String, JApiClass> buildClassMap(List<JApiClass> classes) {
3838
}
3939

4040
private void evaluateBinaryCompatibility(JApiClass jApiClass, Map<String, JApiClass> classMap) {
41+
if (jApiClass.getAccessModifier().hasChangedTo(AccessModifier.PUBLIC)) {
42+
return; // class appears as "new" public class
43+
}
4144
if (jApiClass.getChangeStatus() == JApiChangeStatus.REMOVED) {
4245
addCompatibilityChange(jApiClass, JApiCompatibilityChange.CLASS_REMOVED);
4346
} else if (jApiClass.getChangeStatus() == JApiChangeStatus.MODIFIED) {
@@ -583,11 +586,11 @@ public JApiMethod callback(JApiClass implementedInterface, Map<String, JApiClass
583586
}
584587

585588
private boolean isAbstract(JApiHasAbstractModifier jApiHasAbstractModifier) {
586-
boolean isAbstract = false;
587-
if (jApiHasAbstractModifier.getAbstractModifier().hasChangedTo(AbstractModifier.ABSTRACT)) {
588-
isAbstract = true;
589+
if (jApiHasAbstractModifier.getAbstractModifier().getNewModifier().isPresent()) {
590+
AbstractModifier abstractModifier = jApiHasAbstractModifier.getAbstractModifier().getNewModifier().get();< 10000 /div>
591+
return abstractModifier == AbstractModifier.ABSTRACT;
589592
}
590-
return isAbstract;
593+
return false;
591594
}
592595

593596
private void checkIfExceptionIsNowChecked(JApiBehavior behavior) {
@@ -840,14 +843,6 @@ public JApiSuperclass callback(JApiClass clazz, Map<String, JApiClass> classMap,
840843
checkIfAbstractMethodAdded(jApiClass, classMap);
841844
}
842845

843-
private boolean isAbstract(JApiMethod jApiMethod) {
844-
if (jApiMethod.getAbstractModifier().getNewModifier().isPresent()) {
845-
AbstractModifier abstractModifier = jApiMethod.getAbstractModifier().getNewModifier().get();
846-
return abstractModifier == AbstractModifier.ABSTRACT;
847-
}
848-
return false;
849-
}
850-
851846
private boolean hasSameType(JApiField field, JApiField otherField) {
852847
boolean hasSameNewType = false;
853848
if (field.getType().getNewTypeOptional().isPresent() && otherField.getType().getNewTypeOptional().isPresent()) {

japicmp/src/main/java/japicmp/model/JApiModifier.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,10 @@ public boolean hasChangedFrom(T oldValue) {
6767

6868
public boolean hasChangedTo(T value) {
6969
boolean hasChangedTo = false;
70-
if (newModifier.isPresent()) {
70+
if (oldModifier.isPresent() && newModifier.isPresent()) {
7171
T newValue = newModifier.get();
72-
if (value == newValue) {
72+
T oldValue = oldModifier.get();
73+
if (value == newValue && oldValue != value) {
7374
hasChangedTo = true;
7475
}
7576
}

japicmp/src/test/java/japicmp/compat/CompatibilityChangesTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2214,14 +2214,16 @@ public List<CtClass> createOldClasses(ClassPool classPool) throws Exception {
22142214
public List<CtClass> createNewClasses(ClassPool classPool) throws Exception {
22152215
CtClass ctInterfaceF = CtInterfaceBuilder.create().name("F").addToClassPool(classPool);
22162216
CtClass ctClassFImpl = CtClassBuilder.create().name("FImpl").implementsInterface(ctInterfaceF).addToClassPool(classPool);
2217-
CtClass ctClassC = CtClassBuilder.create().name("C").notPublicModifier().addToClassPool(classPool);
2217+
CtClass ctClassC = CtClassBuilder.create().name("C").addToClassPool(classPool);
22182218
CtMethodBuilder.create().publicAccess().staticAccess().name("M").returnType(ctClassFImpl).addToClass(ctClassC);
22192219
return Arrays.asList(ctInterfaceF, ctClassC);
22202220
}
22212221
});
22222222
JApiClass jApiClass = getJApiClass(jApiClasses, "C");
22232223
JApiMethod jApiMethod = getJApiMethod(jApiClass.getMethods(), "M");
22242224
assertThat(jApiMethod.getChangeStatus(), is(JApiChangeStatus.MODIFIED));
2225-
assertThat(jApiMethod.getCompatibilityChanges(), hasItem(JApiCompatibilityChange.METHOD_RETURN_TYPE_CHANGED));
2225+
assertThat(jApiMethod.isBinaryCompatible(), is(true));
2226+
assertThat(jApiMethod.isSourceCompatible(), is(true));
2227+
assertThat(jApiMethod.getCompatibilityChanges().size(), is(0));
22262228
}
22272229
}

0 commit comments

Comments
 (0)
0