Skip to content

Commit

Permalink
Resolves bugzilla #579391 - EclipseLinkASMClassWriter.getLatestOPCode…
Browse files Browse the repository at this point in the history
…Version was emitting an incorrect warning and picking the oldest Java bytecode version if encountering an unsupported Java version
  • Loading branch information
petergeneric committed Mar 23, 2022
1 parent 0c60667 commit 39bf368
Showing 1 changed file with 23 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@

import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.SortedMap;
import java.util.Collections;
import java.util.TreeMap;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

Expand All @@ -29,23 +29,7 @@ public class EclipseLinkASMClassWriter extends ClassWriter {

private static final Logger LOG = Logger.getLogger(EclipseLinkASMClassWriter.class.getName());

private final int version = getLatestOPCodeVersion();

private static final SortedMap<String, Integer> versionMap = Collections.unmodifiableSortedMap(new TreeMap<String, Integer>() {
{
put("1.7", Opcodes.V1_7);
put("1.8", Opcodes.V1_8);
put("9", Opcodes.V9);
put("10", Opcodes.V10);
put("11", Opcodes.V11);
put("12", Opcodes.V12);
put("13", Opcodes.V13);
put("14", Opcodes.V14);
put("15", Opcodes.V15);
put("16", Opcodes.V16);
put("17", Opcodes.V17);
}
});
private static final int version = getLatestOPCodeVersion();

public EclipseLinkASMClassWriter() {
this(ClassWriter.COMPUTE_FRAMES);
Expand Down Expand Up @@ -78,8 +62,25 @@ public final void visit(final int access, final String name,
}

private static int getLatestOPCodeVersion() {
final LinkedHashMap<String, Integer> versionMap = new LinkedHashMap<String, Integer>();
versionMap.put("1.7", Opcodes.V1_7);
versionMap.put("1.8", Opcodes.V1_8);
versionMap.put("9", Opcodes.V9);
versionMap.put("10", Opcodes.V10);
versionMap.put("11", Opcodes.V11);
versionMap.put("12", Opcodes.V12);
versionMap.put("13", Opcodes.V13);
versionMap.put("14", Opcodes.V14);
versionMap.put("15", Opcodes.V15);
versionMap.put("16", Opcodes.V16);
versionMap.put("17", Opcodes.V17);

final List<String> versions = new ArrayList<String>(versionMap.keySet());
final String oldest = versions.get(0);
final String latest = versions.get(versions.size() - 1);

// let's default to oldest supported Java SE version
String v = versionMap.firstKey();
String v = oldest;
if (System.getSecurityManager() == null) {
v = System.getProperty("java.specification.version");
} else {
Expand All @@ -101,7 +102,6 @@ public String run() {
Integer version = versionMap.get(v);
if (version == null) {
// current JDK is either too new
String latest = versionMap.lastKey();
if (latest.compareTo(v) < 0) {
LOG.log(Level.WARNING, "Java SE ''{0}'' is not fully supported yet. Report this error to the EclipseLink open source project.", v);
if (LOG.isLoggable(Level.FINE)) {
Expand All @@ -110,7 +110,7 @@ public String run() {
version = versionMap.get(latest);
} else {
// or too old
String key = versionMap.firstKey();
String key = oldest;
LOG.log(Level.WARNING, "Java SE ''{0}'' is too old.", v);
if (LOG.isLoggable(Level.FINE)) {
LOG.log(Level.FINE, "Generating bytecode for Java SE ''{0}''.", key);
Expand Down

0 comments on commit 39bf368

Please sign in to comment.