Mercurial > hg > graal-compiler
changeset 17229:627b11398fdd
check that the value of the MethodSubstitution.isStatic is set properly
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 26 Sep 2014 14:45:10 +0200 |
parents | 4cbf3ab4b7d2 |
children | 58f1d1335ef4 |
files | graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/MethodSubstitutionVerifier.java |
diffstat | 1 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/MethodSubstitutionVerifier.java Fri Sep 26 14:43:06 2014 +0200 +++ b/graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/MethodSubstitutionVerifier.java Fri Sep 26 14:45:10 2014 +0200 @@ -89,18 +89,18 @@ } String originalName = originalName(substitutionMethod, annotation); - TypeMirror[] originalSignature = originalSignature(originalType, substitutionMethod, annotation); + boolean isStatic = resolveAnnotationValue(Boolean.class, findAnnotationValue(annotation, ORIGINAL_IS_STATIC)); + TypeMirror[] originalSignature = originalSignature(originalType, substitutionMethod, annotation, isStatic); if (originalSignature == null) { return; } - ExecutableElement originalMethod = originalMethod(substitutionMethod, annotation, originalType, originalName, originalSignature); + ExecutableElement originalMethod = originalMethod(substitutionMethod, annotation, originalType, originalName, originalSignature, isStatic); if (DEBUG && originalMethod != null) { env.getMessager().printMessage(Kind.NOTE, String.format("Found original method %s in type %s.", originalMethod, findEnclosingClass(originalMethod))); } } - private TypeMirror[] originalSignature(TypeElement originalType, ExecutableElement method, AnnotationMirror annotation) { - boolean isStatic = resolveAnnotationValue(Boolean.class, findAnnotationValue(annotation, ORIGINAL_IS_STATIC)); + private TypeMirror[] originalSignature(TypeElement originalType, ExecutableElement method, AnnotationMirror annotation, boolean isStatic) { AnnotationValue signatureValue = findAnnotationValue(annotation, ORIGINAL_SIGNATURE); String signatureString = resolveAnnotationValue(String.class, signatureValue); List<TypeMirror> parameters = new ArrayList<>(); @@ -150,7 +150,7 @@ } private ExecutableElement originalMethod(ExecutableElement substitutionMethod, AnnotationMirror substitutionAnnotation, TypeElement originalType, String originalName, - TypeMirror[] originalSignature) { + TypeMirror[] originalSignature, boolean isStatic) { TypeMirror signatureReturnType = originalSignature[0]; TypeMirror[] signatureParameters = Arrays.copyOfRange(originalSignature, 1, originalSignature.length); List<ExecutableElement> searchElements; @@ -182,6 +182,14 @@ return null; } + if (originalMethod.getModifiers().contains(Modifier.STATIC) != isStatic) { + boolean optional = resolveAnnotationValue(Boolean.class, findAnnotationValue(substitutionAnnotation, "optional")); + if (!optional) { + env.getMessager().printMessage(Kind.ERROR, String.format("The %s element must be set to %s.", ORIGINAL_IS_STATIC, !isStatic), substitutionMethod, substitutionAnnotation); + } + return null; + } + if (!isTypeCompatible(originalMethod.getReturnType(), signatureReturnType)) { env.getMessager().printMessage( Kind.ERROR,