private void checkExtends( ClassDeclaration classDeclaration, PackageDeclaration packageDeclaration) { String scName = classDeclaration.getSuperclass().toString(); int lt = scName.indexOf('<'); if (lt != -1) { scName = scName.substring(0, lt); } int dot = scName.lastIndexOf('.'); if (dot != -1) { String superClassPackageName = scName.substring(0, dot); if (!superClassPackageName.equals(packageDeclaration.getQualifiedName())) { scName = ""; // force error below } else { scName = scName.substring(dot + 1); } } if (!scName.equals(classDeclaration.getSimpleName() + "Gen")) { error( classDeclaration, classDeclaration.getQualifiedName() + " must extend " + classDeclaration.getQualifiedName() + "Gen for @Bean to work properly"); } }
private boolean checkInheritedMethod( Thing data, String methodName, String returnType, ClassDeclaration superclass, boolean finalOk, InheritCheck inheritCheck) { if (inheritCheck != null) { if (inheritCheck.isInherited(data, superclass)) { return true; } } for (MethodDeclaration methodDeclaration : superclass.getMethods()) { if (methodName.equals(methodDeclaration.getSimpleName()) && methodDeclaration.getParameters().isEmpty() && returnType.equals(methodDeclaration.getReturnType().toString())) { data.put(methodName + "Inherited", true); Collection<Modifier> modifiers = methodDeclaration.getModifiers(); if ((modifiers.contains(Modifier.FINAL) || modifiers.contains(Modifier.PRIVATE)) && !finalOk) { // TBD TBD TBD - ERROR!!! cannot extend class with superclass method like this - how to // report? } else if (modifiers.contains(Modifier.PROTECTED)) { data.put(methodName + "Modifiers", "protected"); } else if (modifiers.contains(Modifier.PUBLIC)) { data.put(methodName + "Modifiers", "public"); } else { data.put(methodName + "Modifiers", ""); } return true; } } if (superclass.getSuperclass() != null) { if (superclass.getSuperclass().getDeclaration() != null) { if (checkInheritedMethod( data, methodName, returnType, superclass.getSuperclass().getDeclaration(), finalOk, inheritCheck)) { return true; } } } return false; }
@Test(result = {"null"}) ClassType objectHasNoSuperclass() { return object.getSuperclass(); }