private static boolean declaredOnObject(MethodUsage m) { return OBJECT_METHODS_SIGNATURES.contains(m.getDeclaration().getSignature()); } }
@Override public final Set<MethodUsage> getAllMethods() { Set<MethodUsage> methods = new HashSet<>(); Set<String> methodsSignatures = new HashSet<>(); for (ResolvedMethodDeclaration methodDeclaration : getDeclaredMethods()) { methods.add(new MethodUsage(methodDeclaration)); methodsSignatures.add(methodDeclaration.getSignature()); } for (ResolvedReferenceType ancestor : getAllAncestors()) { for (MethodUsage mu : ancestor.getDeclaredMethods()) { String signature = mu.getDeclaration().getSignature(); if (!methodsSignatures.contains(signature)) { methodsSignatures.add(signature); methods.add(mu); } } } return methods; }
@Test public void testGetSignature() { TypeSolver typeResolver = new ReflectionTypeSolver(); ResolvedClassDeclaration object = new ReflectionClassDeclaration(Object.class, typeResolver); ResolvedInterfaceDeclaration list = new ReflectionInterfaceDeclaration(List.class, typeResolver); ResolvedMethodDeclaration hashCode = object.getAllMethods().stream().filter(m -> m.getName().equals("hashCode")).findFirst().get().getDeclaration(); ResolvedMethodDeclaration equals = object.getAllMethods().stream().filter(m -> m.getName().equals("equals")).findFirst().get().getDeclaration(); ResolvedMethodDeclaration containsAll = list.getAllMethods().stream().filter(m -> m.getName().equals("containsAll")).findFirst().get().getDeclaration(); ResolvedMethodDeclaration subList = list.getAllMethods().stream().filter(m -> m.getName().equals("subList")).findFirst().get().getDeclaration(); assertEquals("hashCode()", hashCode.getSignature()); assertEquals("equals(java.lang.Object)", equals.getSignature()); assertEquals("containsAll(java.util.Collection<? extends java.lang.Object>)", containsAll.getSignature()); assertEquals("subList(int, int)", subList.getSignature()); }
@Test public void compatibilityShouldConsiderAlsoTypeVariablesRaw() { JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolver.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); ResolvedReferenceType rawClassType = (ResolvedReferenceType) ReflectionFactory.typeUsageFor(Class.class, typeSolver); MethodUsage mu = constructorDeclaration.getAllMethods().stream().filter(m -> m.getDeclaration().getSignature().equals("isThrows(java.lang.Class<? extends java.lang.Throwable>)")).findFirst().get(); assertEquals(true, MethodResolutionLogic.isApplicable(mu, "isThrows", ImmutableList.of(rawClassType), typeSolver)); }
@Test public void compatibilityShouldConsiderAlsoTypeVariablesPositive() { JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolver.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); ResolvedReferenceType runtimeException = (ResolvedReferenceType) ReflectionFactory.typeUsageFor(RuntimeException.class, typeSolver); ResolvedReferenceType rawClassType = (ResolvedReferenceType) ReflectionFactory.typeUsageFor(Class.class, typeSolver); ResolvedReferenceType classOfRuntimeType = (ResolvedReferenceType) rawClassType.replaceTypeVariables(rawClassType.getTypeDeclaration().getTypeParameters().get(0), runtimeException); MethodUsage mu = constructorDeclaration.getAllMethods().stream().filter(m -> m.getDeclaration().getSignature().equals("isThrows(java.lang.Class<? extends java.lang.Throwable>)")).findFirst().get(); assertEquals(true, MethodResolutionLogic.isApplicable(mu, "isThrows", ImmutableList.of(classOfRuntimeType), typeSolver)); } }
@Test public void compatibilityShouldConsiderAlsoTypeVariablesNegative() { JavaParserClassDeclaration constructorDeclaration = (JavaParserClassDeclaration) typeSolver.solveType("com.github.javaparser.ast.body.ConstructorDeclaration"); ResolvedReferenceType stringType = (ResolvedReferenceType) ReflectionFactory.typeUsageFor(String.class, typeSolver); ResolvedReferenceType rawClassType = (ResolvedReferenceType) ReflectionFactory.typeUsageFor(Class.class, typeSolver); assertEquals(true, rawClassType.isRawType()); ResolvedReferenceType classOfStringType = (ResolvedReferenceType) rawClassType.replaceTypeVariables(rawClassType.getTypeDeclaration().getTypeParameters().get(0), stringType); MethodUsage mu = constructorDeclaration.getAllMethods().stream().filter(m -> m.getDeclaration().getSignature().equals("isThrows(java.lang.Class<? extends java.lang.Throwable>)")).findFirst().get(); assertEquals(false, MethodResolutionLogic.isApplicable(mu, "isThrows", ImmutableList.of(classOfStringType), typeSolver)); }