HEAD - Fix for 225473
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
index 584b89e..fc19993 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/ApiComparator.java
@@ -103,19 +103,28 @@
if ((visibility & visibilityModifiers) == 0) {
// check visibility in the reference
final IApiDescription referenceApiDescription = component.getApiDescription();
- elementDescription = referenceApiDescription.resolveAnnotations(Factory.typeDescriptor(typeName));
- if (elementDescription != null && (visibility & visibilityModifiers) == 0) {
- // no delta
- return NO_DELTA;
+ IApiAnnotations refElementDescription = referenceApiDescription.resolveAnnotations(Factory.typeDescriptor(typeName));
+ int refVisibility = -1;
+ if (refElementDescription != null) {
+ refVisibility = refElementDescription.getVisibility();
+ if ((refVisibility & visibilityModifiers) == 0) {
+ // no delta
+ return NO_DELTA;
+ }
}
// visibility has been changed
- if (((visibility & VisibilityModifiers.API) != 0)
- && ((visibilityModifiers & VisibilityModifiers.API) != 0)) {
- // was API and is no longer API
- return new Delta(IDelta.API_COMPONENT_ELEMENT_TYPE, IDelta.REMOVED, IDelta.TYPE, classFile2, typeName, typeName);
+ if ((refVisibility & VisibilityModifiers.API) != 0) {
+ if ((visibility & VisibilityModifiers.API) == 0) {
+ // was API and is no longer API
+ return new Delta(IDelta.API_COMPONENT_ELEMENT_TYPE, IDelta.REMOVED, IDelta.TYPE, classFile2, typeName, typeName);
+ }
+ } else if ((visibility & VisibilityModifiers.API) != 0) {
+ return new Delta(IDelta.API_COMPONENT_ELEMENT_TYPE, IDelta.ADDED, IDelta.TYPE, classFile2, typeName, typeName);
}
- // no delta
- return new Delta(IDelta.API_COMPONENT_ELEMENT_TYPE, IDelta.CHANGED, IDelta.TYPE_VISIBILITY, classFile2, typeName, null);
+ if (visibility != refVisibility) {
+ // changed visibility
+ return new Delta(IDelta.API_COMPONENT_ELEMENT_TYPE, IDelta.CHANGED, IDelta.TYPE_VISIBILITY, classFile2, typeName, null);
+ }
}
}
ClassFileComparator comparator = new ClassFileComparator(classFile, classFile2, component, component2, referenceProfile, profile, visibilityModifiers);