diff options
Diffstat (limited to 'bundle-plugin/src')
5 files changed, 25 insertions, 9 deletions
diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Analyze.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Analyze.java index 4fd8e936f3d..515562eb423 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Analyze.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/Analyze.java @@ -18,24 +18,31 @@ import java.util.Optional; * * @author Tony Vaagenes * @author ollivir + * @author gjoranv */ public class Analyze { + public enum JdkVersionCheck { + ENABLED, + DISABLED + } + + static ClassFileMetaData analyzeClass(File classFile) { - return analyzeClass(classFile, null); + return analyzeClass(classFile, null, JdkVersionCheck.DISABLED); } - public static ClassFileMetaData analyzeClass(File classFile, ArtifactVersion artifactVersion) { + public static ClassFileMetaData analyzeClass(File classFile, ArtifactVersion artifactVersion, JdkVersionCheck jdkVersionCheck) { try { - return analyzeClass(new FileInputStream(classFile), artifactVersion); + return analyzeClass(new FileInputStream(classFile), artifactVersion, jdkVersionCheck); } catch (Exception e) { throw new RuntimeException("An error occurred when analyzing " + classFile.getPath(), e); } } - public static ClassFileMetaData analyzeClass(InputStream inputStream, ArtifactVersion artifactVersion) { + public static ClassFileMetaData analyzeClass(InputStream inputStream, ArtifactVersion artifactVersion, JdkVersionCheck jdkVersionCheck) { try { - AnalyzeClassVisitor visitor = new AnalyzeClassVisitor(artifactVersion); + AnalyzeClassVisitor visitor = new AnalyzeClassVisitor(artifactVersion, jdkVersionCheck); new ClassReader(inputStream).accept(visitor, ClassReader.SKIP_DEBUG); return visitor.result(); } catch (IOException e) { diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java index 310527e9254..9d5bd280564 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java @@ -2,6 +2,7 @@ package com.yahoo.container.plugin.classanalysis; import com.yahoo.api.annotations.PublicApi; +import com.yahoo.container.plugin.classanalysis.Analyze.JdkVersionCheck; import com.yahoo.osgi.annotation.ExportPackage; import com.yahoo.osgi.annotation.Version; import org.apache.maven.artifact.versioning.ArtifactVersion; @@ -23,6 +24,7 @@ import java.util.Set; * * @author Tony Vaagenes * @author ollivir + * @author gjoranv */ class AnalyzeClassVisitor extends ClassVisitor implements ImportCollector { @@ -32,10 +34,12 @@ class AnalyzeClassVisitor extends ClassVisitor implements ImportCollector { private boolean isPublicApi = false; private final Optional<ArtifactVersion> defaultExportPackageVersion; + private final JdkVersionCheck jdkVersionCheck; - AnalyzeClassVisitor(ArtifactVersion defaultExportPackageVersion) { + AnalyzeClassVisitor(ArtifactVersion defaultExportPackageVersion, JdkVersionCheck jdkVersionCheck) { super(Opcodes.ASM9); this.defaultExportPackageVersion = Optional.ofNullable(defaultExportPackageVersion); + this.jdkVersionCheck = jdkVersionCheck; } @Override @@ -73,6 +77,11 @@ class AnalyzeClassVisitor extends ClassVisitor implements ImportCollector { this.name = Analyze.internalNameToClassName(name) .orElseThrow(() -> new RuntimeException("Unable to resolve class name for " + name)); + if (version > Opcodes.V17 && jdkVersionCheck == JdkVersionCheck.ENABLED) { + var jdkVersion = version - 44; + throw new RuntimeException("Class " + name + " is compiled for Java version " + jdkVersion + ", but only Java 17 is supported"); + } + addImportWithInternalName(superName); Arrays.asList(interfaces).forEach(this::addImportWithInternalName); diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AbstractGenerateOsgiManifestMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AbstractGenerateOsgiManifestMojo.java index e5b9938cdb4..73fcb237d18 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AbstractGenerateOsgiManifestMojo.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/AbstractGenerateOsgiManifestMojo.java @@ -206,7 +206,7 @@ abstract class AbstractGenerateOsgiManifestMojo extends AbstractMojo { private static ClassFileMetaData analyzeClass(JarFile jarFile, JarEntry entry, ArtifactVersion version) throws MojoExecutionException { try { - return Analyze.analyzeClass(jarFile.getInputStream(entry), version); + return Analyze.analyzeClass(jarFile.getInputStream(entry), version, Analyze.JdkVersionCheck.DISABLED); } catch (Exception e) { throw new MojoExecutionException( String.format("While analyzing the class '%s' in jar file '%s'", entry.getName(), jarFile.getName()), e); diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java index c86d5bda800..9b3313d71ce 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateOsgiManifestMojo.java @@ -337,7 +337,7 @@ public class GenerateOsgiManifestMojo extends AbstractGenerateOsgiManifestMojo { List<ClassFileMetaData> analyzedClasses = allDescendantFiles(outputDirectory) .filter(file -> file.getName().endsWith(".class")) - .map(classFile -> Analyze.analyzeClass(classFile, artifactVersionOrNull(bundleVersion))) + .map(classFile -> Analyze.analyzeClass(classFile, artifactVersionOrNull(bundleVersion), Analyze.JdkVersionCheck.ENABLED)) .toList(); return PackageTally.fromAnalyzedClassFiles(analyzedClasses); diff --git a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateTestBundleOsgiManifestMojo.java b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateTestBundleOsgiManifestMojo.java index 9ee658ddc22..f1452d5e563 100644 --- a/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateTestBundleOsgiManifestMojo.java +++ b/bundle-plugin/src/main/java/com/yahoo/container/plugin/mojo/GenerateTestBundleOsgiManifestMojo.java @@ -77,7 +77,7 @@ public class GenerateTestBundleOsgiManifestMojo extends AbstractGenerateOsgiMani return Stream.concat(allDescendantFiles(new File(project.getBuild().getOutputDirectory())), allDescendantFiles(new File(project.getBuild().getTestOutputDirectory()))) .filter(file -> file.getName().endsWith(".class")) - .map(classFile -> Analyze.analyzeClass(classFile, null)) + .map(classFile -> Analyze.analyzeClass(classFile, null, Analyze.JdkVersionCheck.DISABLED)) .toList(); } |