Mercurial > hg > graal-jvmci-8
diff graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java @ 18805:121748e43a01
Truffle-DSL: fix execute methods with evaluated arguments were not handled correctly with varargs arguments.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Fri, 09 Jan 2015 16:02:55 +0100 |
parents | c0fb70634640 |
children | ae81dd154fb6 |
line wrap: on
line diff
--- a/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java Fri Jan 09 16:01:11 2015 +0100 +++ b/graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/java/ElementUtils.java Fri Jan 09 16:02:55 2015 +0100 @@ -1079,4 +1079,42 @@ return new DeclaredCodeTypeMirror((TypeElement) declaredType.asElement()); } + public static ExecutableElement findMethod(TypeElement type, Set<Modifier> includeModifiers, Set<Modifier> excludeModifiers, String methodName, List<TypeMirror> types) { + outer: for (ExecutableElement executable : ElementFilter.methodsIn(type.getEnclosedElements())) { + if (includeModifiers != null) { + if (!executable.getModifiers().containsAll(includeModifiers)) { + continue; + } + } + if (excludeModifiers != null) { + if (executable.getModifiers().containsAll(excludeModifiers)) { + continue; + } + } + if (!executable.getSimpleName().toString().equals(methodName)) { + continue; + } + if (types.size() != executable.getParameters().size()) { + continue; + } + for (int i = 0; i < types.size(); i++) { + TypeMirror var1 = types.get(i); + VariableElement var2 = executable.getParameters().get(i); + if (ElementUtils.typeEquals(var1, var2.asType())) { + continue outer; + } + } + return executable; + } + return null; + } + + public static List<TypeMirror> asTypes(List<? extends Element> elements) { + List<TypeMirror> types = new ArrayList<>(elements.size()); + for (Element element : elements) { + types.add(element.asType()); + } + return types; + } + }