Bug 477781 - API tools report API breakage if default methods are
introduced
diff --git a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/Java8DeltaTests.java b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/Java8DeltaTests.java
index 06e0b11..b6543a9 100644
--- a/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/Java8DeltaTests.java
+++ b/apitools/org.eclipse.pde.api.tools.tests/src/org/eclipse/pde/api/tools/comparator/tests/Java8DeltaTests.java
@@ -113,7 +113,7 @@
IDelta delta = ApiComparator.compare(beforeApiComponent, afterApiComponent, before, after,
VisibilityModifiers.ALL_VISIBILITIES, null);
assertNotNull("No delta", delta); //$NON-NLS-1$
- assertTrue("Is compatible", DeltaProcessor.isCompatible(delta)); //$NON-NLS-1$
+ assertTrue("Not compatible", !DeltaProcessor.isCompatible(delta)); //$NON-NLS-1$
}
/**
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsConfigurationBlock.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsConfigurationBlock.java
index ba90b8b..1a798b4 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsConfigurationBlock.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/ApiErrorsWarningsConfigurationBlock.java
@@ -264,6 +264,7 @@
// interface key constant
private static final Key KEY_INTERFACE_ADDED_FIELD = getApiToolsKey(IApiProblemTypes.INTERFACE_ADDED_FIELD);
private static final Key KEY_INTERFACE_ADDED_METHOD = getApiToolsKey(IApiProblemTypes.INTERFACE_ADDED_METHOD);
+ private static final Key KEY_INTERFACE_ADDED_DEFAULT_METHOD = getApiToolsKey(IApiProblemTypes.INTERFACE_ADDED_DEFAULT_METHOD);
private static final Key KEY_INTERFACE_ADDED_RESTRICTIONS = getApiToolsKey(IApiProblemTypes.INTERFACE_ADDED_RESTRICTIONS);
private static final Key KEY_INTERFACE_ADDED_SUPER_INTERFACE_WITH_METHODS = getApiToolsKey(IApiProblemTypes.INTERFACE_ADDED_SUPER_INTERFACE_WITH_METHODS);
private static final Key KEY_INTERFACE_ADDED_TYPE_PARAMETER = getApiToolsKey(IApiProblemTypes.INTERFACE_ADDED_TYPE_PARAMETER);
@@ -374,7 +375,7 @@
KEY_ANNOTATION_REMOVED_TYPE_MEMBER,
KEY_ANNOTATION_CHANGED_TYPE_CONVERSION,
KEY_ANNOTATION_ADDED_METHOD_NO_DEFAULT_VALUE,
- KEY_INTERFACE_ADDED_FIELD, KEY_INTERFACE_ADDED_METHOD,
+ KEY_INTERFACE_ADDED_FIELD, KEY_INTERFACE_ADDED_METHOD, KEY_INTERFACE_ADDED_DEFAULT_METHOD,
KEY_INTERFACE_ADDED_RESTRICTIONS,
KEY_INTERFACE_ADDED_SUPER_INTERFACE_WITH_METHODS,
KEY_INTERFACE_ADDED_TYPE_PARAMETER,
diff --git a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java
index d3d0fd0..98da7d3 100644
--- a/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java
+++ b/apitools/org.eclipse.pde.api.tools.ui/src/org/eclipse/pde/api/tools/ui/internal/preferences/PreferenceMessages.java
@@ -95,6 +95,7 @@
public static String INTERFACE_ADDED_FIELD;
public static String INTERFACE_ADDED_METHOD;
+ public static String INTERFACE_ADDED_DEFAULT_METHOD;
public static String INTERFACE_ADDED_RESTRICTIONS;
public static String INTERFACE_ADDED_SUPER_INTERFACE_WITH_METHODS;
public static String INTERFACE_ADDED_TYPE_PARAMETER;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java
index 54160e3..2c508db 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/comparator/ClassFileComparator.java
@@ -2160,7 +2160,7 @@
}
}
}
- this.addDelta(getElementType(type), IDelta.ADDED, found ? IDelta.METHOD_MOVED_DOWN : IDelta.METHOD, restrictionsForMethodAddition, this.initialDescriptorRestrictions, 0, method.isDefaultMethod() ? (method.getModifiers() | Flags.AccDefaultMethod) : method.getModifiers(), this.type1, getKeyForMethod(method, type), new String[] {
+ this.addDelta(getElementType(type), IDelta.ADDED, found ? IDelta.METHOD_MOVED_DOWN : method.isDefaultMethod() ? IDelta.DEFAULT_METHOD : IDelta.METHOD, restrictionsForMethodAddition, this.initialDescriptorRestrictions, 0, method.isDefaultMethod() ? (method.getModifiers() | Flags.AccDefaultMethod) : method.getModifiers(), this.type1, getKeyForMethod(method, type), new String[] {
Util.getDescriptorName(type), methodDisplayName });
} else {
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblemFactory.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblemFactory.java
index 45522d1..3643d44 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblemFactory.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/ApiProblemFactory.java
@@ -769,6 +769,8 @@
return 40;
case IDelta.METHOD:
return 44;
+ case IDelta.DEFAULT_METHOD:
+ return 47;
case IDelta.RESTRICTIONS:
return 72;
case IDelta.SUPER_INTERFACE_WITH_METHODS:
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/problemmessages.properties b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/problemmessages.properties
index 6a9f274..1e9922d 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/problemmessages.properties
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/problems/problemmessages.properties
@@ -8,7 +8,7 @@
# Contributors:
# IBM Corporation - initial API and implementation
###############################################################################
-# available message ids 47, 48, 49, 50, 51, 53, 57, 58, 59, 60, 62, 63, 65, 68, 70, 71, 75, 80,
+# available message ids 48, 49, 50, 51, 53, 57, 58, 59, 60, 62, 63, 65, 68, 70, 71, 75, 80,
# 82, 83, 88, 90, 93
#API baseline
@@ -77,7 +77,8 @@
39 = The field {0}.{1} in an annotation that is intended to be extended has been added
40 = The field {0}.{1} in an interface that is intended to be implemented or extended has been added
41 = The method {0}.{1} that has to be implemented has been added
-44 = The method {0}.{1} in an interface that is intended to be implemented has been added
+44 = The method {0}.{1} in an interface that is intended to be implemented has been adde
+47 = The default method {0}.{1} in an interface has been added
#changed
52 = The class bound for type parameter {1} in {0} has been changed
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java
index 4f84e90..f2b1987 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/ApiPlugin.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2013 IBM Corporation and others.
+ * Copyright (c) 2007, 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -278,6 +278,7 @@
IApiProblemTypes.ANNOTATION_ADDED_METHOD_NO_DEFAULT_VALUE,
IApiProblemTypes.INTERFACE_ADDED_FIELD,
IApiProblemTypes.INTERFACE_ADDED_METHOD,
+ IApiProblemTypes.INTERFACE_ADDED_DEFAULT_METHOD,
IApiProblemTypes.INTERFACE_ADDED_RESTRICTIONS,
IApiProblemTypes.INTERFACE_ADDED_SUPER_INTERFACE_WITH_METHODS,
IApiProblemTypes.INTERFACE_ADDED_TYPE_PARAMETER,
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/DeltaProcessor.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/DeltaProcessor.java
index 24c25b4..7e547b3 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/DeltaProcessor.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/DeltaProcessor.java
@@ -568,11 +568,8 @@
switch (delta.getFlags()) {
case IDelta.FIELD:
case IDelta.METHOD:
+ case IDelta.DEFAULT_METHOD:
case IDelta.SUPER_INTERFACE_WITH_METHODS:
- boolean isDefault = Flags.isDefaultMethod(delta.getNewModifiers());
- if (isDefault == true) {
- return true;
- }
return RestrictionModifiers.isImplementRestriction(delta.getPreviousRestrictions()) || RestrictionModifiers.isImplementRestriction(delta.getCurrentRestrictions());
case IDelta.TYPE_PARAMETER:
return false;
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/IDelta.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/IDelta.java
index 23f56fa..04f7381 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/IDelta.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/comparator/IDelta.java
@@ -844,6 +844,19 @@
public static final int DEPRECATION = 72;
/**
+ * Delta kind flag that denotes a default method has been added or removed.
+ * <br>
+ * Applies to kinds:
+ * <ul>
+ * <li>{@link #ADDED}</li>
+ * <li>{@link #REMOVED}</li>
+ * </ul>
+ *
+ * @see #getFlags()
+ */
+ public static final int DEFAULT_METHOD = 73;
+
+ /**
* Return true if the receiver has no children deltas, false otherwise.
*
* @return true if the receiver has no children deltas, false otherwise.
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblemTypes.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblemTypes.java
index e2dcbb8..68b118b 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblemTypes.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/provisional/problems/IApiProblemTypes.java
@@ -35,6 +35,7 @@
// interface key constant
public static final String INTERFACE_ADDED_FIELD = Util.getDeltaPrefererenceKey(IDelta.INTERFACE_ELEMENT_TYPE, IDelta.ADDED, IDelta.FIELD);
public static final String INTERFACE_ADDED_METHOD = Util.getDeltaPrefererenceKey(IDelta.INTERFACE_ELEMENT_TYPE, IDelta.ADDED, IDelta.METHOD);
+ public static final String INTERFACE_ADDED_DEFAULT_METHOD = Util.getDeltaPrefererenceKey(IDelta.INTERFACE_ELEMENT_TYPE, IDelta.ADDED, IDelta.DEFAULT_METHOD);
public static final String INTERFACE_ADDED_RESTRICTIONS = Util.getDeltaPrefererenceKey(IDelta.INTERFACE_ELEMENT_TYPE, IDelta.ADDED, IDelta.RESTRICTIONS);
public static final String INTERFACE_ADDED_SUPER_INTERFACE_WITH_METHODS = Util.getDeltaPrefererenceKey(IDelta.INTERFACE_ELEMENT_TYPE, IDelta.ADDED, IDelta.SUPER_INTERFACE_WITH_METHODS);
public static final String INTERFACE_ADDED_TYPE_PARAMETER = Util.getDeltaPrefererenceKey(IDelta.INTERFACE_ELEMENT_TYPE, IDelta.ADDED, IDelta.TYPE_PARAMETER);
diff --git a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java
index 02723d2..8de3c56 100644
--- a/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java
+++ b/apitools/org.eclipse.pde.api.tools/src/org/eclipse/pde/api/tools/internal/util/Util.java
@@ -774,6 +774,8 @@
return "INTERFACE_BOUND"; //$NON-NLS-1$
case IDelta.METHOD:
return "METHOD"; //$NON-NLS-1$
+ case IDelta.DEFAULT_METHOD:
+ return "DEFAULT_METHOD"; //$NON-NLS-1$
case IDelta.METHOD_MOVED_UP:
return "METHOD_MOVED_UP"; //$NON-NLS-1$
case IDelta.METHOD_WITH_DEFAULT_VALUE: