private void checkCompoundIds(Class<?> javaClass) throws IOException { String javaClassName = javaClass.getCanonicalName(); PsiClass psiClass = myJavaPsiFacade.findClass( javaClassName, GlobalSearchScope.moduleWithLibrariesScope(myModule)); assertNotNull(psiClass); for (java.lang.reflect.Method javaMethod : javaClass.getDeclaredMethods()) { Method method = new Method( Type.getType(javaClass).getInternalName(), javaMethod.getName(), Type.getMethodDescriptor(javaMethod)); boolean noKey = javaMethod.getAnnotation(ExpectNoPsiKey.class) != null; PsiMethod psiMethod = psiClass.findMethodsByName(javaMethod.getName(), false)[0]; checkCompoundId(method, psiMethod, noKey); } for (Constructor<?> constructor : javaClass.getDeclaredConstructors()) { Method method = new Method( Type.getType(javaClass).getInternalName(), "<init>", Type.getConstructorDescriptor(constructor)); boolean noKey = constructor.getAnnotation(ExpectNoPsiKey.class) != null; PsiMethod[] constructors = psiClass.getConstructors(); PsiMethod psiMethod = constructors[0]; checkCompoundId(method, psiMethod, noKey); } }
private void checkAnnotations(Class<?> javaClass) { PsiClass psiClass = myJavaPsiFacade.findClass( javaClass.getName(), GlobalSearchScope.moduleWithLibrariesScope(myModule)); assertNotNull(psiClass); for (java.lang.reflect.Method javaMethod : javaClass.getDeclaredMethods()) { PsiMethod psiMethod = psiClass.findMethodsByName(javaMethod.getName(), false)[0]; Annotation[][] annotations = javaMethod.getParameterAnnotations(); // not-null parameters params: for (int i = 0; i < annotations.length; i++) { Annotation[] parameterAnnotations = annotations[i]; PsiParameter psiParameter = psiMethod.getParameterList().getParameters()[i]; PsiAnnotation inferredAnnotation = myInferredAnnotationsManager.findInferredAnnotation( psiParameter, AnnotationUtil.NOT_NULL); for (Annotation parameterAnnotation : parameterAnnotations) { if (parameterAnnotation.annotationType() == ExpectNotNull.class) { assertNotNull(javaMethod.toString() + " " + i, inferredAnnotation); continue params; } } assertNull(javaMethod.toString() + " " + i, inferredAnnotation); } // not-null result ExpectNotNull expectedAnnotation = javaMethod.getAnnotation(ExpectNotNull.class); PsiAnnotation actualAnnotation = myInferredAnnotationsManager.findInferredAnnotation(psiMethod, AnnotationUtil.NOT_NULL); assertEquals(javaMethod.toString(), expectedAnnotation == null, actualAnnotation == null); // contracts ExpectContract expectedContract = javaMethod.getAnnotation(ExpectContract.class); PsiAnnotation actualContractAnnotation = myInferredAnnotationsManager.findInferredAnnotation( psiMethod, ORG_JETBRAINS_ANNOTATIONS_CONTRACT); assertEquals(expectedContract == null, actualContractAnnotation == null); if (expectedContract != null) { String expectedContractValue = expectedContract.value(); String actualContractValue = AnnotationUtil.getStringAttributeValue(actualContractAnnotation, null); assertEquals(javaMethod.toString(), expectedContractValue, actualContractValue); } } }