summaryrefslogtreecommitdiffstats
path: root/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JdkPackages.java
diff options
context:
space:
mode:
Diffstat (limited to 'bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JdkPackages.java')
-rw-r--r--bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JdkPackages.java39
1 files changed, 39 insertions, 0 deletions
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JdkPackages.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JdkPackages.java
new file mode 100644
index 00000000000..0786272bc70
--- /dev/null
+++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/util/JdkPackages.java
@@ -0,0 +1,39 @@
+package com.yahoo.container.plugin.util;
+
+import java.net.URL;
+
+/**
+ * @author gjoranv
+ */
+public class JdkPackages {
+
+ /**
+ * Returns a boolean indicating (via best effort) if the given package is part of the JDK.
+ */
+ public static boolean isJdkPackage(String pkg) {
+ return hasJdkExclusivePrefix(pkg)
+ || isResourceInPlatformClassLoader(pkg); // TODO: must be a class, not a package, due to module encapsulation
+ }
+
+ private static boolean isResourceInPlatformClassLoader(String klass) {
+ String klassAsPath = klass.replaceAll("\\.", "/") + ".class";
+ URL resource = getPlatformClassLoader().getResource(klassAsPath);
+ return !(resource == null);
+ }
+
+ private static ClassLoader getPlatformClassLoader() {
+ ClassLoader platform = JdkPackages.class.getClassLoader().getParent();
+
+ // Will fail upon changes in classloader hierarchy between JDK versions
+ assert (platform.getName().equals("platform"));
+
+ return platform;
+ }
+
+ private static boolean hasJdkExclusivePrefix(String pkg) {
+ return pkg.startsWith("java.")
+ || pkg.startsWith("sun.");
+ }
+
+}
+