Merge branch 'master' into SLING-9867
diff --git a/pom.xml b/pom.xml
index ada7b63..a980994 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
</parent>
<artifactId>org.apache.sling.feature.extension.apiregions</artifactId>
- <version>1.1.11-SNAPSHOT</version>
+ <version>1.1.13-SNAPSHOT</version>
<name>Sling Featuremodel - API Regions Exension</name>
<scm>
@@ -74,7 +74,7 @@
<dependency>
<groupId>org.apache.sling</groupId>
<artifactId>org.apache.sling.feature.launcher</artifactId>
- <version>1.1.6</version>
+ <version>1.1.10</version>
<scope>provided</scope>
</dependency>
<dependency>
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegions.java b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegions.java
index 088e105..84ca66b 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegions.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegions.java
@@ -36,7 +36,7 @@
@Override
public String getName() {
- return "Api Regions analyser task";
+ return "Api Regions analyser task that checks that listed packages are actually exported";
}
@Override
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java
index e3ca7cb..39d64bb 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImports.java
@@ -250,14 +250,17 @@
final String key = "Bundle " + entry.getKey().getArtifact().getId().getArtifactId() + ":" + entry.getKey().getArtifact().getId().getVersion();
if ( !entry.getValue().importWithoutVersion.isEmpty() ) {
- ctx.reportWarning(key + " is importing package(s) " + getPackageInfo(entry.getValue().importWithoutVersion, false) + " without specifying a version range.");
+ ctx.reportArtifactWarning(entry.getKey().getArtifact().getId(),
+ key + " is importing package(s) " + getPackageInfo(entry.getValue().importWithoutVersion, false) + " without specifying a version range.");
}
if ( !entry.getValue().exportWithoutVersion.isEmpty() ) {
- ctx.reportWarning(key + " is exporting package(s) " + getPackageInfo(entry.getValue().importWithoutVersion, false) + " without a version.");
+ ctx.reportArtifactWarning(entry.getKey().getArtifact().getId(),
+ key + " is exporting package(s) " + getPackageInfo(entry.getValue().importWithoutVersion, false) + " without a version.");
}
if ( !entry.getValue().missingExports.isEmpty() ) {
- ctx.reportError(key + " is importing package(s) " + getPackageInfo(entry.getValue().missingExports, false) + " in start level " +
+ ctx.reportArtifactError(entry.getKey().getArtifact().getId(),
+ key + " is importing package(s) " + getPackageInfo(entry.getValue().missingExports, false) + " in start level " +
String.valueOf(entry.getKey().getArtifact().getStartOrder())
+ " but no bundle is exporting these for that start level.");
errorReported = true;
@@ -274,7 +277,7 @@
message.append("\n" + pkg.getName() + " is exported in regions " + regions.getKey() + " but it is imported in regions " + regions.getValue());
}
}
- ctx.reportError(message.toString());
+ ctx.reportArtifactError(entry.getKey().getArtifact().getId(), message.toString());
errorReported = true;
}
}
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsCrossFeatureDups.java b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsCrossFeatureDups.java
index 7c9c871..4c0c8af 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsCrossFeatureDups.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsCrossFeatureDups.java
@@ -91,9 +91,9 @@
+ " which comes from a feature without API Regions: " + borgs
+ ". Both export package: " + pi.getName();
if (matchesSet(pkgName, warningPackages)) {
- ctx.reportWarning(msg);
+ ctx.reportArtifactWarning(bd.getArtifact().getId(), msg);
} else {
- ctx.reportError(msg);
+ ctx.reportArtifactError(bd.getArtifact().getId(), msg);
}
}
}
diff --git a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsDependencies.java b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsDependencies.java
index fe65540..0987b97 100644
--- a/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsDependencies.java
+++ b/src/main/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsDependencies.java
@@ -22,7 +22,6 @@
import org.apache.sling.feature.scanner.BundleDescriptor;
import org.apache.sling.feature.scanner.FeatureDescriptor;
import org.apache.sling.feature.scanner.PackageInfo;
-import org.osgi.framework.Constants;
public class CheckApiRegionsDependencies extends AbstractApiRegionsAnalyserTask {
@@ -55,27 +54,25 @@
if (exportingApisName.getExportByName(exportedPackage) != null) {
if (hidingApisName.getExportByName(exportedPackage) != null) {
String errorMessage = String.format(
- "Bundle '%s' (defined in feature '%s') declares '%s' in the '%s' header that is enlisted in both exporting '%s' and hiding '%s' APIs regions, please adjust Feature settings",
+ "Bundle '%s' (defined in feature '%s') exports package '%s' that is declared in both visible '%s' and non-visible '%s' APIs regions",
bundleDescriptor.getArtifact().getId(),
ctx.getFeature().getId(),
exportedPackage,
- Constants.EXPORT_PACKAGE,
exportingApisName.getName(),
hidingApisName.getName());
- ctx.reportError(errorMessage);
+ ctx.reportArtifactError(bundleDescriptor.getArtifact().getId(), errorMessage);
} else {
for (String uses : packageInfo.getUses()) {
if (hidingApisName.getExportByName(uses) != null) {
String errorMessage = String.format(
- "Bundle '%s' (defined in feature '%s') declares '%s' in the '%s' header, enlisted in the '%s' region, which uses '%s' package that is in the '%s' region",
+ "Bundle '%s' (defined in feature '%s') exports package '%s' that is declared in the visible '%s' region, which uses package '%s' that is in the non-visible '%s' region",
bundleDescriptor.getArtifact().getId(),
ctx.getFeature().getId(),
exportedPackage,
- Constants.EXPORT_PACKAGE,
exportingApisName.getName(),
uses,
hidingApisName.getName());
- ctx.reportError(errorMessage);
+ ctx.reportArtifactError(bundleDescriptor.getArtifact().getId(), errorMessage);
}
}
}
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java
index ecee258..ba362d0 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/AbstractApiRegionsAnalyserTaskTest.java
@@ -49,6 +49,7 @@
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.mock;
@@ -155,6 +156,11 @@
errors.add(error);
return null;
}).when(ctx).reportError(anyString());
+ doAnswer(invocation -> {
+ String error = invocation.getArgument(1);
+ errors.add(error);
+ return null;
+ }).when(ctx).reportArtifactError(any(), anyString());
analyserTask.execute(ctx);
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImportsTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImportsTest.java
index 3801cc7..1322b41 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImportsTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsBundleExportsImportsTest.java
@@ -39,6 +39,7 @@
import org.junit.BeforeClass;
import org.junit.Test;
import org.mockito.Mockito;
+
import static org.junit.Assert.assertEquals;
public class CheckApiRegionsBundleExportsImportsTest {
@@ -76,8 +77,12 @@
Mockito.when(ctx.getFeatureDescriptor()).thenReturn(fd);
t.execute(ctx);
- Mockito.verify(ctx, Mockito.times(2)).reportError(Mockito.anyString());
- Mockito.verify(ctx).reportError(Mockito.contains("org.foo.e"));
+ Mockito.verify(ctx, Mockito.times(1)).reportArtifactError(Mockito.any(), Mockito.anyString());
+ Mockito.verify(ctx, Mockito.times(1)).reportError(Mockito.anyString());
+
+ Mockito.verify(ctx).reportArtifactError(
+ Mockito.eq(ArtifactId.fromMvnId("g:b3:1")),
+ Mockito.contains("org.foo.e"));
Mockito.verify(ctx).reportError(Mockito.contains("marked as 'complete'"));
Mockito.verify(ctx, Mockito.never()).reportWarning(Mockito.anyString());
}
@@ -119,9 +124,13 @@
Mockito.when(ctx.getFeatureDescriptor()).thenReturn(fd);
t.execute(ctx);
- Mockito.verify(ctx).reportError(Mockito.contains("org.foo.e"));
- Mockito.verify(ctx, Mockito.times(1)).reportError(Mockito.anyString());
+ Mockito.verify(ctx).reportArtifactError(
+ Mockito.eq(ArtifactId.fromMvnId("g:b3:1")),
+ Mockito.contains("org.foo.e"));
+ Mockito.verify(ctx, Mockito.times(1)).reportArtifactError(Mockito.any(), Mockito.anyString());
+ Mockito.verify(ctx, Mockito.never()).reportError(Mockito.anyString());
Mockito.verify(ctx, Mockito.never()).reportWarning(Mockito.anyString());
+ Mockito.verify(ctx, Mockito.never()).reportArtifactWarning(Mockito.any(), Mockito.anyString());
}
@Test
@@ -149,9 +158,9 @@
Mockito.when(ctx.getFeatureDescriptor()).thenReturn(fd);
t.execute(ctx);
- Mockito.verify(ctx).reportError(Mockito.contains("org.foo.b"));
- Mockito.verify(ctx, Mockito.times(1)).reportError(Mockito.anyString());
- Mockito.verify(ctx, Mockito.never()).reportWarning(Mockito.anyString());
+ Mockito.verify(ctx).reportArtifactError(Mockito.eq(ArtifactId.fromMvnId("g:b2:1")), Mockito.contains("org.foo.b"));
+ Mockito.verify(ctx, Mockito.times(1)).reportArtifactError(Mockito.any(), Mockito.anyString());
+ Mockito.verify(ctx, Mockito.never()).reportArtifactWarning(Mockito.any(), Mockito.anyString());
}
@Test
@@ -188,10 +197,18 @@
Mockito.when(ctx.getConfiguration()).thenReturn(cfgMap);
t.execute(ctx);
- Mockito.verify(ctx).reportError(Mockito.contains("org.foo.b"));
- Mockito.verify(ctx).reportError(Mockito.contains("something"));
- Mockito.verify(ctx).reportError(Mockito.contains("somethingelse"));
- Mockito.verify(ctx, Mockito.times(1)).reportError(Mockito.anyString());
+ Mockito.verify(ctx).reportArtifactError(
+ Mockito.eq(ArtifactId.fromMvnId("g:b2:1")),
+ Mockito.contains("org.foo.b"));
+ Mockito.verify(ctx).reportArtifactError(
+ Mockito.eq(ArtifactId.fromMvnId("g:b2:1")),
+ Mockito.contains("something"));
+ Mockito.verify(ctx).reportArtifactError(
+ Mockito.eq(ArtifactId.fromMvnId("g:b2:1")),
+ Mockito.contains("somethingelse"));
+ Mockito.verify(ctx, Mockito.times(1)).reportArtifactError(Mockito.any(), Mockito.anyString());
+ Mockito.verify(ctx, Mockito.never()).reportArtifactWarning(Mockito.any(), Mockito.anyString());
+ Mockito.verify(ctx, Mockito.never()).reportError(Mockito.anyString());
Mockito.verify(ctx, Mockito.never()).reportWarning(Mockito.anyString());
}
diff --git a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsDependenciesTest.java b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsDependenciesTest.java
index bde744d..51def05 100644
--- a/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsDependenciesTest.java
+++ b/src/test/java/org/apache/sling/feature/extension/apiregions/analyser/CheckApiRegionsDependenciesTest.java
@@ -36,7 +36,7 @@
assertFalse(errors.isEmpty());
assertEquals(
- "Bundle 'org.osgi:org.osgi.util.function:1.0.0' (defined in feature 'org.apache.sling.testing:org.apache.sling.testing.apiregions:1.0.0') declares 'org.osgi.util.function' in the 'Export-Package' header, enlisted in the 'global' region, which uses 'org.objectweb.asm' package that is in the 'deprecated' region",
+ "Bundle 'org.osgi:org.osgi.util.function:1.0.0' (defined in feature 'org.apache.sling.testing:org.apache.sling.testing.apiregions:1.0.0') exports package 'org.osgi.util.function' that is declared in the visible 'global' region, which uses package 'org.objectweb.asm' that is in the non-visible 'deprecated' region",
errors.iterator().next()
);
}
@@ -47,7 +47,7 @@
assertFalse(errors.isEmpty());
assertEquals(
- "Bundle 'org.osgi:org.osgi.util.function:1.0.0' (defined in feature 'org.apache.sling.testing:org.apache.sling.testing.apiregions:1.0.0') declares 'org.osgi.util.function' in the 'Export-Package' header that is enlisted in both exporting 'global' and hiding 'deprecated' APIs regions, please adjust Feature settings",
+ "Bundle 'org.osgi:org.osgi.util.function:1.0.0' (defined in feature 'org.apache.sling.testing:org.apache.sling.testing.apiregions:1.0.0') exports package 'org.osgi.util.function' that is declared in both visible 'global' and non-visible 'deprecated' APIs regions",
errors.iterator().next());
}