diff options
author | gjoranv <gjoranv@gmail.com> | 2023-10-02 13:16:56 +0200 |
---|---|---|
committer | gjoranv <gjoranv@gmail.com> | 2023-10-02 22:15:32 +0200 |
commit | 39a9045c54a645fc58fce44817ef5b26531704df (patch) | |
tree | 086a724d51413e2c921062c4adab55be722b7b5c /bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java | |
parent | 9f846510fcbd73285e87df0404c8477e66c836d5 (diff) |
Fail if project class files are built for JDK version > 17.
- Skip checking compile scoped deps, as they must be compatible
with the project's target version. The dependencies could also
be multi-release jars containing newer class files.
Diffstat (limited to 'bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java')
-rw-r--r-- | bundle-plugin/src/main/java/com/yahoo/container/plugin/classanalysis/AnalyzeClassVisitor.java | 11 |
1 files changed, 10 insertions, 1 deletions
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); |