Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

FinalMethodTest.java 2.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package com.vaadin.tests.server.component;
  2. import static org.junit.Assert.assertTrue;
  3. import java.lang.reflect.Method;
  4. import java.lang.reflect.Modifier;
  5. import java.util.HashSet;
  6. import org.junit.Test;
  7. import com.vaadin.tests.VaadinClasses;
  8. import com.vaadin.ui.Component;
  9. public class FinalMethodTest {
  10. // public void testThatContainersHaveNoFinalMethods() {
  11. // HashSet<Class<?>> tested = new HashSet<Class<?>>();
  12. // for (Class<?> c : VaadinClasses.getAllServerSideClasses()) {
  13. // if (Container.class.isAssignableFrom(c)) {
  14. // ensureNoFinalMethods(c, tested);
  15. // }
  16. // }
  17. // }
  18. @Test
  19. public void testThatComponentsHaveNoFinalMethods() {
  20. HashSet<Class<?>> tested = new HashSet<>();
  21. int count = 0;
  22. for (Class<? extends Component> c : VaadinClasses.getComponents()) {
  23. ensureNoFinalMethods(c, tested);
  24. count++;
  25. }
  26. assertTrue(count > 0);
  27. }
  28. private void ensureNoFinalMethods(Class<?> clazz,
  29. HashSet<Class<?>> tested) {
  30. if (tested.contains(clazz)) {
  31. return;
  32. }
  33. tested.add(clazz);
  34. if (clazz == null || clazz.equals(Object.class)) {
  35. return;
  36. }
  37. System.out.println("Checking " + clazz.getName());
  38. for (Method m : clazz.getDeclaredMethods()) {
  39. if (isPrivate(m)) {
  40. continue;
  41. }
  42. if (isFinal(m)) {
  43. String error = "Class " + clazz.getName() + " contains a "
  44. + (isPublic(m) ? "public" : "non-public")
  45. + " final method: " + m.getName();
  46. // System.err.println(error);
  47. throw new RuntimeException(error);
  48. }
  49. }
  50. ensureNoFinalMethods(clazz.getSuperclass(), tested);
  51. }
  52. private boolean isFinal(Method m) {
  53. return Modifier.isFinal(m.getModifiers());
  54. }
  55. private boolean isPrivate(Method m) {
  56. return Modifier.isPrivate(m.getModifiers());
  57. }
  58. private boolean isPublic(Method m) {
  59. return Modifier.isPublic(m.getModifiers());
  60. }
  61. }