AccessibilitySymbolGathererStrategy.java

  1. /*
  2.  *  Copyright (c) 2001-2024, Jean Tessier
  3.  *  All rights reserved.
  4.  *
  5.  *  Redistribution and use in source and binary forms, with or without
  6.  *  modification, are permitted provided that the following conditions
  7.  *  are met:
  8.  *
  9.  *      * Redistributions of source code must retain the above copyright
  10.  *        notice, this list of conditions and the following disclaimer.
  11.  *
  12.  *      * Redistributions in binary form must reproduce the above copyright
  13.  *        notice, this list of conditions and the following disclaimer in the
  14.  *        documentation and/or other materials provided with the distribution.
  15.  *
  16.  *      * Neither the name of Jean Tessier nor the names of his contributors
  17.  *        may be used to endorse or promote products derived from this software
  18.  *        without specific prior written permission.
  19.  *
  20.  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  21.  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  22.  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  23.  *  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
  24.  *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  25.  *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  26.  *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  27.  *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
  28.  *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  29.  *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  30.  *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31.  */

  32. package com.jeantessier.classreader;

  33. public class AccessibilitySymbolGathererStrategy extends SymbolGathererStrategyDecorator {
  34.     private final boolean publicAccessibility;
  35.     private final boolean protectedAccessibility;
  36.     private final boolean privateAccessibility;
  37.     private final boolean packageAccessibility;

  38.     public AccessibilitySymbolGathererStrategy(SymbolGathererStrategy delegate, boolean publicAccessibility, boolean protectedAccessibility, boolean privateAccessibility, boolean packageAccessibility) {
  39.         super(delegate);

  40.         this.publicAccessibility = publicAccessibility;
  41.         this.protectedAccessibility = protectedAccessibility;
  42.         this.privateAccessibility = privateAccessibility;
  43.         this.packageAccessibility = packageAccessibility;
  44.     }

  45.     public boolean isMatching(Classfile classfile) {
  46.         boolean result = false;

  47.         if ((publicAccessibility && classfile.isPublic()) || (packageAccessibility && classfile.isPackage())) {
  48.             result = super.isMatching(classfile);
  49.         }

  50.         return result;
  51.     }

  52.     public boolean isMatching(Field_info field) {
  53.         boolean result = false;

  54.         if ((publicAccessibility && field.isPublic()) || (protectedAccessibility && field.isProtected()) || (privateAccessibility && field.isPrivate()) || (packageAccessibility && field.isPackage())) {
  55.             result = super.isMatching(field);
  56.         }

  57.         return result;
  58.     }

  59.     public boolean isMatching(Method_info method) {
  60.         boolean result = false;

  61.         if ((publicAccessibility && method.isPublic()) || (protectedAccessibility && method.isProtected()) || (privateAccessibility && method.isPrivate()) || (packageAccessibility && method.isPackage())) {
  62.             result = super.isMatching(method);
  63.         }

  64.         return result;
  65.     }

  66.     public boolean isMatching(LocalVariable localVariable) {
  67.         return false;
  68.     }

  69.     public boolean isMatching(InnerClass innerClass) {
  70.         boolean result = false;

  71.         if ((publicAccessibility && innerClass.isPublic()) || (protectedAccessibility && innerClass.isProtected()) || (privateAccessibility && innerClass.isPrivate()) || (packageAccessibility && innerClass.isPackage())) {
  72.             result = super.isMatching(innerClass    );
  73.         }

  74.         return result;
  75.     }
  76. }