Mercurial > hg > truffle
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 |