Skip to content

Commit 5348a85

Browse files
wendigofindepi
authored andcommitted
Filter out abstract plugin classes
1 parent 034979c commit 5348a85

File tree

9 files changed

+148
-9
lines changed

9 files changed

+148
-9
lines changed

src/main/java/io/prestosql/maven/ServiceDescriptorGenerator.java

+9-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@
3434
import java.util.jar.JarOutputStream;
3535

3636
import static java.lang.String.format;
37+
import static java.lang.reflect.Modifier.isAbstract;
38+
import static java.lang.reflect.Modifier.isInterface;
3739
import static java.nio.charset.StandardCharsets.UTF_8;
3840

3941
/**
@@ -125,9 +127,9 @@ private List<Class<?>> findPluginImplementations(URLClassLoader searchRealm)
125127
for (String classPath : classes) {
126128
String className = classPath.substring(0, classPath.length() - 6).replace(File.separatorChar, '.');
127129
try {
128-
Class<?> implementation = searchRealm.loadClass(pluginClassName);
130+
Class<?> pluginClass = searchRealm.loadClass(pluginClassName);
129131
Class<?> clazz = searchRealm.loadClass(className);
130-
if (implementation.isAssignableFrom(clazz)) {
132+
if (isImplementation(clazz, pluginClass)) {
131133
implementations.add(clazz);
132134
}
133135
}
@@ -147,4 +149,9 @@ private static void mkdirs(File file)
147149
throw new MojoExecutionException(format("%n%nFailed to create directory: %s", file));
148150
}
149151
}
152+
153+
private static boolean isImplementation(Class<?> clazz, Class<?> pluginClass)
154+
{
155+
return pluginClass.isAssignableFrom(clazz) && !isAbstract(clazz.getModifiers()) && !isInterface(clazz.getModifiers());
156+
}
150157
}

src/test/java/io/prestosql/maven/CheckerIntegrationTest.java

+20
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,26 @@ public void testBasic()
3737
.assertErrorFreeLog();
3838
}
3939

40+
@Test
41+
public void testAbstractPluginClass()
42+
throws Exception
43+
{
44+
File basedir = resources.getBasedir("abstract-plugin-class");
45+
maven.forProject(basedir)
46+
.execute("verify")
47+
.assertErrorFreeLog();
48+
}
49+
50+
@Test
51+
public void testInterfacePluginClass()
52+
throws Exception
53+
{
54+
File basedir = resources.getBasedir("interface-plugin-class");
55+
maven.forProject(basedir)
56+
.execute("verify")
57+
.assertErrorFreeLog();
58+
}
59+
4060
@Test
4161
public void testInvalidExtraProvided()
4262
throws Exception

src/test/java/io/prestosql/maven/GeneratorIntegrationTest.java

+28-7
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.util.zip.ZipEntry;
1717
import java.util.zip.ZipFile;
1818

19+
import static java.lang.String.format;
1920
import static java.nio.charset.StandardCharsets.UTF_8;
2021
import static java.util.Collections.list;
2122
import static org.assertj.core.api.Assertions.assertThat;
@@ -44,12 +45,32 @@ public GeneratorIntegrationTest(MavenRuntimeBuilder mavenBuilder)
4445
public void testBasic()
4546
throws Exception
4647
{
47-
File basedir = resources.getBasedir("basic");
48+
testProjectPackaging("basic", "its.BasicPlugin");
49+
}
50+
51+
@Test
52+
public void testAbstractPlugin()
53+
throws Exception
54+
{
55+
testProjectPackaging("abstract-plugin-class", "its.TestPlugin");
56+
}
57+
58+
@Test
59+
public void testInterfacePlugin()
60+
throws Exception
61+
{
62+
testProjectPackaging("interface-plugin-class", "its.TestPlugin");
63+
}
64+
65+
protected void testProjectPackaging(String projectId, String expectedPluginClass)
66+
throws Exception
67+
{
68+
File basedir = resources.getBasedir(projectId);
4869
maven.forProject(basedir)
4970
.execute("package")
5071
.assertErrorFreeLog();
5172

52-
File mainJarFile = new File(basedir, "target/basic-1.0.jar");
73+
File mainJarFile = new File(basedir, format("target/%s-1.0.jar", projectId));
5374
assertThat(mainJarFile).isFile();
5475

5576
try (JarFile jar = new JarFile(mainJarFile)) {
@@ -58,26 +79,26 @@ public void testBasic()
5879
.doesNotContain(DESCRIPTOR);
5980
}
6081

61-
File servicesJarFile = new File(basedir, "target/basic-1.0-services.jar");
82+
File servicesJarFile = new File(basedir, format("target/%s-1.0-services.jar", projectId));
6283
assertThat(servicesJarFile).isFile();
6384

6485
try (JarFile jar = new JarFile(servicesJarFile)) {
6586
JarEntry entry = jar.getJarEntry(DESCRIPTOR);
6687
assertNotNull(entry);
6788
try (InputStream in = jar.getInputStream(entry)) {
6889
String contents = new String(toByteArray(in), UTF_8);
69-
assertThat(contents).isEqualTo("its.BasicPlugin\n");
90+
assertThat(contents).isEqualTo(expectedPluginClass + "\n");
7091
}
7192
}
7293

73-
File pluginZipFile = new File(basedir, "target/basic-1.0.zip");
94+
File pluginZipFile = new File(basedir, format("target/%s-1.0.zip", projectId));
7495
assertThat(pluginZipFile).isFile();
7596

7697
try (ZipFile zip = new ZipFile(pluginZipFile)) {
7798
assertThat(list(zip.entries()))
7899
.extracting(ZipEntry::getName)
79-
.contains("basic-1.0/basic-1.0.jar")
80-
.contains("basic-1.0/basic-1.0-services.jar");
100+
.contains(format("%1$s-1.0/%1$s-1.0.jar", projectId))
101+
.contains(format("%1$s-1.0/%1$s-1.0-services.jar", projectId));
81102
}
82103
}
83104
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>io.prestosql.maven.its</groupId>
6+
<artifactId>abstract-plugin-class</artifactId>
7+
<version>1.0</version>
8+
<packaging>presto-plugin</packaging>
9+
10+
<properties>
11+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12+
</properties>
13+
14+
<dependencies>
15+
<dependency>
16+
<groupId>io.prestosql</groupId>
17+
<artifactId>presto-spi</artifactId>
18+
<version>300</version>
19+
<scope>provided</scope>
20+
</dependency>
21+
</dependencies>
22+
23+
<build>
24+
<plugins>
25+
<plugin>
26+
<groupId>io.prestosql</groupId>
27+
<artifactId>presto-maven-plugin</artifactId>
28+
<version>${it-plugin.version}</version>
29+
<extensions>true</extensions>
30+
</plugin>
31+
</plugins>
32+
</build>
33+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package its;
2+
3+
import io.prestosql.spi.Plugin;
4+
5+
public abstract class AbstractPlugin
6+
implements Plugin
7+
{}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package its;
2+
3+
import io.prestosql.spi.Plugin;
4+
5+
public class TestPlugin
6+
extends AbstractPlugin
7+
{}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>io.prestosql.maven.its</groupId>
6+
<artifactId>interface-plugin-class</artifactId>
7+
<version>1.0</version>
8+
<packaging>presto-plugin</packaging>
9+
10+
<properties>
11+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
12+
</properties>
13+
14+
<dependencies>
15+
<dependency>
16+
<groupId>io.prestosql</groupId>
17+
<artifactId>presto-spi</artifactId>
18+
<version>300</version>
19+
<scope>provided</scope>
20+
</dependency>
21+
</dependencies>
22+
23+
<build>
24+
<plugins>
25+
<plugin>
26+
<groupId>io.prestosql</groupId>
27+
<artifactId>presto-maven-plugin</artifactId>
28+
<version>${it-plugin.version}</version>
29+
<extensions>true</extensions>
30+
</plugin>
31+
</plugins>
32+
</build>
33+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package its;
2+
3+
import io.prestosql.spi.Plugin;
4+
5+
public interface MyPlugin
6+
extends Plugin {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package its;
2+
3+
public class TestPlugin
4+
implements MyPlugin
5+
{}

0 commit comments

Comments
 (0)