comparison truffle/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/parser/NodeParser.java @ 22326:6cec0097107f

added workaround based on JDK-8075793 to allow compilation with JDK9 javac
author Doug Simon <doug.simon@oracle.com>
date Mon, 26 Oct 2015 13:28:19 +0100
parents c53c4de22c4f
children 4a43dc00a654
comparison
equal deleted inserted replaced
22325:414e82b9fc35 22326:6cec0097107f
64 import com.oracle.truffle.dsl.processor.model.SpecializationData; 64 import com.oracle.truffle.dsl.processor.model.SpecializationData;
65 import com.oracle.truffle.dsl.processor.model.SpecializationData.SpecializationKind; 65 import com.oracle.truffle.dsl.processor.model.SpecializationData.SpecializationKind;
66 import com.oracle.truffle.dsl.processor.model.SpecializationThrowsData; 66 import com.oracle.truffle.dsl.processor.model.SpecializationThrowsData;
67 import com.oracle.truffle.dsl.processor.model.TemplateMethod; 67 import com.oracle.truffle.dsl.processor.model.TemplateMethod;
68 import com.oracle.truffle.dsl.processor.model.TypeSystemData; 68 import com.oracle.truffle.dsl.processor.model.TypeSystemData;
69
69 import java.lang.annotation.Annotation; 70 import java.lang.annotation.Annotation;
70 import java.util.ArrayList; 71 import java.util.ArrayList;
71 import java.util.Arrays; 72 import java.util.Arrays;
72 import java.util.Collection; 73 import java.util.Collection;
73 import java.util.Collections; 74 import java.util.Collections;
77 import java.util.List; 78 import java.util.List;
78 import java.util.ListIterator; 79 import java.util.ListIterator;
79 import java.util.Map; 80 import java.util.Map;
80 import java.util.Objects; 81 import java.util.Objects;
81 import java.util.Set; 82 import java.util.Set;
83
82 import javax.lang.model.element.AnnotationMirror; 84 import javax.lang.model.element.AnnotationMirror;
83 import javax.lang.model.element.AnnotationValue; 85 import javax.lang.model.element.AnnotationValue;
84 import javax.lang.model.element.Element; 86 import javax.lang.model.element.Element;
85 import javax.lang.model.element.ElementKind; 87 import javax.lang.model.element.ElementKind;
86 import javax.lang.model.element.ExecutableElement; 88 import javax.lang.model.element.ExecutableElement;
302 buildExecutableHierarchy(node, parent.getDelegatedFrom().get(i - 1), parent.getDelegatedFrom().listIterator(i)); 304 buildExecutableHierarchy(node, parent.getDelegatedFrom().get(i - 1), parent.getDelegatedFrom().listIterator(i));
303 } 305 }
304 } 306 }
305 307
306 private List<Element> loadMembers(TypeElement templateType) { 308 private List<Element> loadMembers(TypeElement templateType) {
307 List<Element> members = new ArrayList<>(CompilerFactory.getCompiler(templateType).getAllMembersInDeclarationOrder(context.getEnvironment(), templateType)); 309 return newElementList(CompilerFactory.getCompiler(templateType).getAllMembersInDeclarationOrder(context.getEnvironment(), templateType));
308
309 return members;
310 } 310 }
311 311
312 private boolean containsSpecializations(List<Element> elements) { 312 private boolean containsSpecializations(List<Element> elements) {
313 boolean foundSpecialization = false; 313 boolean foundSpecialization = false;
314 for (ExecutableElement method : ElementFilter.methodsIn(elements)) { 314 for (ExecutableElement method : ElementFilter.methodsIn(elements)) {
1274 specialization.setGuards(guardExpressions); 1274 specialization.setGuards(guardExpressions);
1275 } 1275 }
1276 1276
1277 private static List<Element> filterNotAccessibleElements(TypeElement templateType, List<? extends Element> elements) { 1277 private static List<Element> filterNotAccessibleElements(TypeElement templateType, List<? extends Element> elements) {
1278 String packageName = ElementUtils.getPackageName(templateType); 1278 String packageName = ElementUtils.getPackageName(templateType);
1279 List<Element> filteredElements = new ArrayList<>(elements); 1279 List<Element> filteredElements = newElementList(elements);
1280 for (Element element : elements) { 1280 for (Element element : elements) {
1281 Modifier visibility = ElementUtils.getVisibility(element.getModifiers()); 1281 Modifier visibility = ElementUtils.getVisibility(element.getModifiers());
1282 if (visibility == Modifier.PRIVATE) { 1282 if (visibility == Modifier.PRIVATE) {
1283 continue; 1283 continue;
1284 } else if (visibility == null) { 1284 } else if (visibility == null) {
1597 if (node.getTemplateType().getModifiers().contains(Modifier.PRIVATE) && node.getSpecializations().size() > 0) { 1597 if (node.getTemplateType().getModifiers().contains(Modifier.PRIVATE) && node.getSpecializations().size() > 0) {
1598 node.addError("Classes containing a @%s annotation must not be private.", Specialization.class.getSimpleName()); 1598 node.addError("Classes containing a @%s annotation must not be private.", Specialization.class.getSimpleName());
1599 } 1599 }
1600 } 1600 }
1601 1601
1602 /**
1603 * @see "https://bugs.openjdk.java.net/browse/JDK-8039214"
1604 */
1605 private static List<Element> newElementList(List<? extends Element> src) {
1606 List<Element> workaround = new ArrayList<>(src);
1607 return workaround;
1608 }
1609
1602 private static void verifyMissingAbstractMethods(NodeData nodeData, List<? extends Element> originalElements) { 1610 private static void verifyMissingAbstractMethods(NodeData nodeData, List<? extends Element> originalElements) {
1603 if (!nodeData.needsFactory()) { 1611 if (!nodeData.needsFactory()) {
1604 // missing abstract methods only needs to be implemented 1612 // missing abstract methods only needs to be implemented
1605 // if we need go generate factory for it. 1613 // if we need go generate factory for it.
1606 return; 1614 return;
1607 } 1615 }
1608 1616
1609 List<Element> elements = new ArrayList<>(originalElements); 1617 List<Element> elements = newElementList(originalElements);
1610 Set<Element> unusedElements = new HashSet<>(elements); 1618 Set<Element> unusedElements = new HashSet<>(elements);
1611 for (ExecutableElement method : nodeData.getAllTemplateMethods()) { 1619 for (ExecutableElement method : nodeData.getAllTemplateMethods()) {
1612 unusedElements.remove(method); 1620 unusedElements.remove(method);
1613 } 1621 }
1614 1622