Interface IAccessRule


  • public interface IAccessRule
    Describes an access rule to source and class files on a classpath entry. An access rule is composed of a file pattern and a kind (accessible, non accessible, or discouraged).

    On a given classpath entry, the access rules are considered in the order given when the entry was created. When a source or class file matches an access rule's pattern, the access rule's kind defines whether the file is considered accessible, non-accessible, or whether its access is discouraged. If the source or class file doesn't match any access rule, it is considered accessible. A source or class file that is not accessible or discouraged can still be referred to, but it is tagged as being not accessible - the Java builder will create a problem marker, for example. The severity of the marker created from a non-accessible rule is controlled through the JavaCore.COMPILER_PB_FORBIDDEN_REFERENCE compiler option. The severity of the marker created from a discouraged rule is controlled through the JavaCore.COMPILER_PB_DISCOURAGED_REFERENCE compiler option. Note this is different from inclusion and exclusion patterns on source classpath entries, where a source file that is excluded is not even compiled.

    Files patterns look like relative file paths with wildcards and are interpreted relative to each entry's path. File patterns are case-sensitive and they can contain '**', '*' or '?' wildcards (see IClasspathEntry.getExclusionPatterns() for the full description of their syntax and semantics). Note that file patterns must not include the file extension. com/xyz/tests/MyClass is a valid file pattern, whereas com/xyz/tests/MyClass.class is not valid.

    For example, if a classpath entry path is /Project/someLib.jar, there are no accessible rules, and there is one non-accessible rule with pattern com/xyz/tests/**, then class files like /Project/someLib.jar/com/xyz/Foo.class and /Project/someLib.jar/com/xyz/utils/Bar.class would be accessible, whereas /Project/someLib.jar/com/xyz/tests/T1.class and /Project/someLib.jar/com/xyz/tests/quick/T2.class would not be accessible.

    Since:
    3.1
    See Also:
    JavaCore.newAccessRule(IPath, int), IClasspathEntry.getExclusionPatterns()
    Restriction:
    This interface is not intended to be implemented by clients.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static int IGNORE_IF_BETTER
      Flag indicating that whether a type matching this rule should be ignored iff a type with the same qualified name can be found on a later classpath entry with a better accessibility.
      static int K_ACCESSIBLE
      Constant indicating that files matching the rule's pattern are accessible.
      static int K_DISCOURAGED
      Constant indicating that access to the files matching the rule's pattern is discouraged.
      static int K_NON_ACCESSIBLE
      Constant indicating that files matching the rule's pattern are non-accessible.
    • Field Detail

      • K_ACCESSIBLE

        static final int K_ACCESSIBLE
        Constant indicating that files matching the rule's pattern are accessible.
        See Also:
        Constant Field Values
      • K_NON_ACCESSIBLE

        static final int K_NON_ACCESSIBLE
        Constant indicating that files matching the rule's pattern are non-accessible.
        See Also:
        Constant Field Values
      • K_DISCOURAGED

        static final int K_DISCOURAGED
        Constant indicating that access to the files matching the rule's pattern is discouraged.
        See Also:
        Constant Field Values
      • IGNORE_IF_BETTER

        static final int IGNORE_IF_BETTER

        Flag indicating that whether a type matching this rule should be ignored iff a type with the same qualified name can be found on a later classpath entry with a better accessibility.

        E.g. if a type p.X matches a rule K_NON_ACCESSIBLE | IGNORE_IF_BETTER on a library entry 'lib1' and another type p.X also matches a rule K_DISCOURAGED on library entry 'lib2' ('lib2' being after 'lib1' on the classpath), then p.X from 'lib2' will be used and reported as discouraged.

        Since:
        3.2
        See Also:
        Constant Field Values
    • Method Detail

      • ignoreIfBetter

        boolean ignoreIfBetter()

        Returns whether a type matching this rule should be ignored iff a type with the same qualified name can be found on a later classpath entry with a better accessibility.

        E.g. if a type p.X matches a rule K_NON_ACCESSIBLE | IGNORE_IF_BETTER on a library entry 'lib1' and another type p.X also matches a rule K_DISCOURAGED on library entry 'lib2' ('lib2' being after 'lib1' on the classpath), then p.X from 'lib2' will be used and reported as discouraged.

        Returns:
        whether a type matching this rule should be ignored iff a type with the same qualified name can be found on a later classpath entry with a better accessibility
        Since:
        3.2