# HG changeset patch # User Doug Simon # Date 1411735510 -7200 # Node ID 627b11398fdd8e816cf5fadad10b13c1cb290670 # Parent 4cbf3ab4b7d273e02ec77fde8d25abef6b4053e7 check that the value of the MethodSubstitution.isStatic is set properly diff -r 4cbf3ab4b7d2 -r 627b11398fdd graal/com.oracle.graal.replacements.verifier/src/com/oracle/graal/replacements/verifier/MethodSubstitutionVerifier.java --- 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 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 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,