Thu, 30 Jan 2020 00:21:06 +0000
8238076: Fix OpenJDK 7 Bootstrap Broken by JFR Backport
Summary: Avoid use of lambdas and StringJoiner so GenerateJfrFiles builds with OpenJDK 7
Reviewed-by: shade
1.1 --- a/make/aix/makefiles/rules.make Fri Jan 17 17:32:41 2020 +0800 1.2 +++ b/make/aix/makefiles/rules.make Thu Jan 30 00:21:06 2020 +0000 1.3 @@ -126,8 +126,8 @@ 1.4 RUN.JAR$(MAKE_VERBOSE) += >/dev/null 1.5 1.6 # Settings for javac 1.7 -BOOT_SOURCE_LANGUAGE_VERSION = 6 1.8 -BOOT_TARGET_CLASS_VERSION = 6 1.9 +BOOT_SOURCE_LANGUAGE_VERSION = 7 1.10 +BOOT_TARGET_CLASS_VERSION = 7 1.11 JAVAC_FLAGS = -g -encoding ascii 1.12 BOOTSTRAP_JAVAC_FLAGS = $(JAVAC_FLAGS) -source $(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION) 1.13
2.1 --- a/make/bsd/makefiles/rules.make Fri Jan 17 17:32:41 2020 +0800 2.2 +++ b/make/bsd/makefiles/rules.make Thu Jan 30 00:21:06 2020 +0000 2.3 @@ -126,8 +126,8 @@ 2.4 RUN.JAR$(MAKE_VERBOSE) += >/dev/null 2.5 2.6 # Settings for javac 2.7 -BOOT_SOURCE_LANGUAGE_VERSION = 8 2.8 -BOOT_TARGET_CLASS_VERSION = 8 2.9 +BOOT_SOURCE_LANGUAGE_VERSION = 7 2.10 +BOOT_TARGET_CLASS_VERSION = 7 2.11 JAVAC_FLAGS = -g -encoding ascii 2.12 BOOTSTRAP_JAVAC_FLAGS = $(JAVAC_FLAGS) -source $(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION) 2.13
3.1 --- a/make/linux/makefiles/rules.make Fri Jan 17 17:32:41 2020 +0800 3.2 +++ b/make/linux/makefiles/rules.make Thu Jan 30 00:21:06 2020 +0000 3.3 @@ -126,8 +126,8 @@ 3.4 RUN.JAR$(MAKE_VERBOSE) += >/dev/null 3.5 3.6 # Settings for javac 3.7 -BOOT_SOURCE_LANGUAGE_VERSION = 8 3.8 -BOOT_TARGET_CLASS_VERSION = 8 3.9 +BOOT_SOURCE_LANGUAGE_VERSION = 7 3.10 +BOOT_TARGET_CLASS_VERSION = 7 3.11 JAVAC_FLAGS = -g -encoding ascii 3.12 BOOTSTRAP_JAVAC_FLAGS = $(JAVAC_FLAGS) -source $(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION) 3.13
4.1 --- a/make/solaris/makefiles/rules.make Fri Jan 17 17:32:41 2020 +0800 4.2 +++ b/make/solaris/makefiles/rules.make Thu Jan 30 00:21:06 2020 +0000 4.3 @@ -118,8 +118,8 @@ 4.4 RUN.JAR$(MAKE_VERBOSE) += >/dev/null 4.5 4.6 # Settings for javac 4.7 -BOOT_SOURCE_LANGUAGE_VERSION = 8 4.8 -BOOT_TARGET_CLASS_VERSION = 8 4.9 +BOOT_SOURCE_LANGUAGE_VERSION = 7 4.10 +BOOT_TARGET_CLASS_VERSION = 7 4.11 JAVAC_FLAGS = -g -encoding ascii 4.12 BOOTSTRAP_JAVAC_FLAGS = $(JAVAC_FLAGS) -source $(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION) 4.13
5.1 --- a/make/windows/makefiles/rules.make Fri Jan 17 17:32:41 2020 +0800 5.2 +++ b/make/windows/makefiles/rules.make Thu Jan 30 00:21:06 2020 +0000 5.3 @@ -44,8 +44,8 @@ 5.4 !endif 5.5 5.6 # Settings for javac 5.7 -BOOT_SOURCE_LANGUAGE_VERSION=8 5.8 -BOOT_TARGET_CLASS_VERSION=8 5.9 +BOOT_SOURCE_LANGUAGE_VERSION=7 5.10 +BOOT_TARGET_CLASS_VERSION=7 5.11 JAVAC_FLAGS=-g -encoding ascii 5.12 BOOTSTRAP_JAVAC_FLAGS=$(JAVAC_FLAGS) -source $(BOOT_SOURCE_LANGUAGE_VERSION) -target $(BOOT_TARGET_CLASS_VERSION) 5.13
6.1 --- a/src/share/vm/jfr/GenerateJfrFiles.java Fri Jan 17 17:32:41 2020 +0800 6.2 +++ b/src/share/vm/jfr/GenerateJfrFiles.java Thu Jan 30 00:21:06 2020 +0000 6.3 @@ -9,11 +9,11 @@ 6.4 import java.util.ArrayList; 6.5 import java.util.Arrays; 6.6 import java.util.HashMap; 6.7 +import java.util.Iterator; 6.8 import java.util.LinkedHashMap; 6.9 +import java.util.LinkedList; 6.10 import java.util.List; 6.11 import java.util.Map; 6.12 -import java.util.StringJoiner; 6.13 -import java.util.function.Predicate; 6.14 6.15 import javax.xml.XMLConstants; 6.16 import javax.xml.parsers.ParserConfigurationException; 6.17 @@ -73,6 +73,38 @@ 6.18 boolean supportStruct; 6.19 } 6.20 6.21 + interface TypePredicate { 6.22 + boolean isType(TypeElement type); 6.23 + } 6.24 + 6.25 + static class StringJoiner { 6.26 + private final CharSequence delimiter; 6.27 + private final List<CharSequence> elements; 6.28 + 6.29 + public StringJoiner(CharSequence delimiter) { 6.30 + this.delimiter = delimiter; 6.31 + elements = new LinkedList<CharSequence>(); 6.32 + } 6.33 + 6.34 + public StringJoiner add(CharSequence newElement) { 6.35 + elements.add(newElement); 6.36 + return this; 6.37 + } 6.38 + 6.39 + @Override 6.40 + public String toString() { 6.41 + StringBuilder builder = new StringBuilder(); 6.42 + Iterator<CharSequence> i = elements.iterator(); 6.43 + while (i.hasNext()) { 6.44 + builder.append(i.next()); 6.45 + if (i.hasNext()) { 6.46 + builder.append(delimiter); 6.47 + } 6.48 + } 6.49 + return builder.toString(); 6.50 + } 6.51 + } 6.52 + 6.53 static class Metadata { 6.54 final Map<String, TypeElement> types = new LinkedHashMap<>(); 6.55 final Map<String, XmlType> xmlTypes = new HashMap<>(); 6.56 @@ -85,22 +117,37 @@ 6.57 } 6.58 6.59 List<EventElement> getEvents() { 6.60 - return getList(t -> t.getClass() == EventElement.class); 6.61 + return getList(new TypePredicate() { 6.62 + @Override 6.63 + public boolean isType(TypeElement t) { 6.64 + return t.getClass() == EventElement.class; 6.65 + } 6.66 + }); 6.67 } 6.68 6.69 List<TypeElement> getEventsAndStructs() { 6.70 - return getList(t -> t.getClass() == EventElement.class || t.supportStruct); 6.71 + return getList(new TypePredicate() { 6.72 + @Override 6.73 + public boolean isType(TypeElement t) { 6.74 + return t.getClass() == EventElement.class || t.supportStruct; 6.75 + } 6.76 + }); 6.77 } 6.78 6.79 List<TypeElement> getTypesAndStructs() { 6.80 - return getList(t -> t.getClass() == TypeElement.class || t.supportStruct); 6.81 + return getList(new TypePredicate() { 6.82 + @Override 6.83 + public boolean isType(TypeElement t) { 6.84 + return t.getClass() == TypeElement.class || t.supportStruct; 6.85 + } 6.86 + }); 6.87 } 6.88 6.89 @SuppressWarnings("unchecked") 6.90 - <T> List<T> getList(Predicate<? super TypeElement> pred) { 6.91 + <T> List<T> getList(TypePredicate pred) { 6.92 List<T> result = new ArrayList<>(types.size()); 6.93 for (TypeElement t : types.values()) { 6.94 - if (pred.test(t)) { 6.95 + if (pred.isType(t)) { 6.96 result.add((T) t); 6.97 } 6.98 } 6.99 @@ -108,19 +155,39 @@ 6.100 } 6.101 6.102 List<EventElement> getPeriodicEvents() { 6.103 - return getList(t -> t.getClass() == EventElement.class && ((EventElement) t).periodic); 6.104 + return getList(new TypePredicate() { 6.105 + @Override 6.106 + public boolean isType(TypeElement t) { 6.107 + return t.getClass() == EventElement.class && ((EventElement) t).periodic; 6.108 + } 6.109 + }); 6.110 } 6.111 6.112 List<TypeElement> getNonEventsAndNonStructs() { 6.113 - return getList(t -> t.getClass() != EventElement.class && !t.supportStruct); 6.114 + return getList(new TypePredicate() { 6.115 + @Override 6.116 + public boolean isType(TypeElement t) { 6.117 + return t.getClass() != EventElement.class && !t.supportStruct; 6.118 + } 6.119 + }); 6.120 } 6.121 6.122 List<TypeElement> getTypes() { 6.123 - return getList(t -> t.getClass() == TypeElement.class && !t.supportStruct); 6.124 + return getList(new TypePredicate() { 6.125 + @Override 6.126 + public boolean isType(TypeElement t) { 6.127 + return t.getClass() == TypeElement.class && !t.supportStruct; 6.128 + } 6.129 + }); 6.130 } 6.131 6.132 List<TypeElement> getStructs() { 6.133 - return getList(t -> t.getClass() == TypeElement.class && t.supportStruct); 6.134 + return getList(new TypePredicate() { 6.135 + @Override 6.136 + public boolean isType(TypeElement t) { 6.137 + return t.getClass() == TypeElement.class && t.supportStruct; 6.138 + } 6.139 + }); 6.140 } 6.141 6.142 void verify() {