Advertisement
Guest User

Untitled

a guest
Dec 12th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. package com.checks.lint2.detectors;
  2.  
  3. import com.android.tools.lint.detector.api.Category;
  4. import com.android.tools.lint.detector.api.Detector;
  5. import com.android.tools.lint.detector.api.Issue;
  6. import com.android.tools.lint.detector.api.JavaContext;
  7. import com.android.tools.lint.detector.api.Location;
  8. import com.android.tools.lint.detector.api.Severity;
  9. import com.intellij.psi.JavaElementVisitor;
  10. import com.intellij.psi.PsiClass;
  11. import com.intellij.psi.PsiClassType;
  12. import com.intellij.psi.PsiElement;
  13.  
  14. public class HashSpecificMethodExistDetector extends Detector
  15. implements Detector.JavaPsiScanner {
  16.  
  17. public static final Issue ISSUE =
  18. IssueBuilder.create("HashSpecificMethodExist")
  19. .description("Implement hashCodeSpecific method.")
  20. .explanation(
  21. "")
  22. .category(Category.CORRECTNESS)
  23. .severity(Severity.ERROR)
  24. .detectorClass(HashSpecificMethodExistDetector.class)
  25. .build();
  26.  
  27. @Override
  28. public List<Class<? extends PsiElement>> getApplicablePsiTypes() {
  29. return Collections.<Class<? extends PsiElement>>singletonList(PsiClass.class);
  30. } @Override
  31. public JavaElementVisitor createPsiVisitor(final JavaContext context) {
  32. return new Visitor(context);
  33. }
  34.  
  35. private static class Visitor extends JavaElementVisitor {
  36.  
  37. private static final String HASH_CODE_METHOD = "hashCodeSpecificMethod";
  38.  
  39. private final JavaContext mContext;
  40.  
  41. public Visitor(JavaContext context) {
  42. mContext = context;
  43. }
  44.  
  45. @Override
  46. public void visitClass(PsiClass aClass) {
  47. if (!mContext.getDriver().isSuppressed(mContext, ISSUE, aClass)) {
  48. if (checkSuperClassesForSpecificMethodIfc(aClass)) {
  49. checkHashCodeSpecificMethod(aClass);
  50. }
  51. }
  52. super.visitClass(aClass);
  53. }
  54.  
  55. private boolean checkInterfacesForHashCodeSpecificMethod(PsiClass aClass) {for (PsiClass anInterface : aClass.getInterfaces()) {
  56. if (anInterface.getName().equals("HashCodeSpecificMethodInterface")) {
  57. return true;
  58. }
  59. }
  60. return false;
  61. }
  62.  
  63. private boolean checkSuperClassesForSpecificMethodIfc(PsiClass currentClass) {
  64. boolean foundInInterfaces = checkInterfacesForHashCodeSpecificMethod(currentClass);
  65. if (foundInInterfaces) {
  66. return true;
  67. }
  68. PsiClass superClass = currentClass.getSuperClass();
  69. if (superClass != null) {
  70. return checkSuperClassesForSpecificMethodIfc(superClass);
  71. }
  72. return false;
  73. }
  74.  
  75. private void checkHashCodeSpecificMethod(PsiClass aClass) {
  76. PsiMethod[] hashCodeMethods = aClass.findMethodsByName(HASH_CODE_METHOD, false);
  77. if (hashCodeMethods == null || hashCodeMethods.length == 0) {
  78. mContext.report(
  79. ISSUE,
  80. Location.create(
  81. mContext.file,
  82. mContext.getContents(),
  83. aClass.getNameIdentifier().getTextOffset(),
  84. aClass.getNameIdentifier().getTextOffset()
  85. + aClass.getNameIdentifier().getTextLength()),
  86. "");
  87. }
  88. }
  89. }
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement