Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit c0ace88

Browse filesBrowse files
committed
Do not report any incompatibilities if class becomes public
1 parent 77d89b9 commit c0ace88
Copy full SHA for c0ace88

File tree

3 files changed

+14
-16
lines changed
Filter options

3 files changed

+14
-16
lines changed

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

Copy file name to clipboardExpand all lines: japicmp/src/main/java/japicmp/compat/CompatibilityChanges.java
+7-12Lines 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();
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

Copy file name to clipboardExpand all lines: japicmp/src/main/java/japicmp/model/JApiModifier.java
+3-2Lines 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

Copy file name to clipboardExpand all lines: japicmp/src/test/java/japicmp/compat/CompatibilityChangesTest.java
+4-2Lines 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)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.