Class JavaConventions


  • public final class JavaConventions
    extends Object
    Provides methods for checking Java-specific conventions such as name syntax.

    This class provides static methods and constants only.

    Restriction:
    This class is not intended to be instantiated by clients.
    • Method Detail

      • isOverlappingRoots

        public static boolean isOverlappingRoots​(IPath rootPath1,
                                                 IPath rootPath2)
        Deprecated.
        Overlapping roots are allowed in 2.1
        Returns whether the given package fragment root paths are considered to overlap.

        Two root paths overlap if one is a prefix of the other, or they point to the same location. However, a JAR is allowed to be nested in a root.

        Parameters:
        rootPath1 - the first root path
        rootPath2 - the second root path
        Returns:
        true if the given package fragment root paths are considered to overlap, false otherwise
      • validateCompilationUnitName

        public static IStatus validateCompilationUnitName​(String name)
        Validate the given compilation unit name.

        A compilation unit name must obey the following rules:

        • it must not be null
        • it must be suffixed by a dot ('.') followed by one of the Java-like extensions
        • its prefix must be a valid identifier
        • it must not contain any characters or substrings that are not valid on the file system on which workspace root is located.

        Parameters:
        name - the name of a compilation unit
        Returns:
        a status object with code IStatus.OK if the given name is valid as a compilation unit name, otherwise a status object indicating what is wrong with the name
      • validateCompilationUnitName

        public static IStatus validateCompilationUnitName​(String name,
                                                          String sourceLevel,
                                                          String complianceLevel)
        Validate the given compilation unit name for the given source and compliance levels.

        A compilation unit name must obey the following rules:

        • it must not be null
        • it must be suffixed by a dot ('.') followed by one of the Java-like extensions
        • its prefix must be a valid identifier
        • it must not contain any characters or substrings that are not valid on the file system on which workspace root is located.

        Parameters:
        name - the name of a compilation unit
        sourceLevel - the source level
        complianceLevel - the compliance level
        Returns:
        a status object with code IStatus.OK if the given name is valid as a compilation unit name, otherwise a status object indicating what is wrong with the name
        Since:
        3.3
      • validateClassFileName

        public static IStatus validateClassFileName​(String name)
        Validate the given .class file name.

        A .class file name must obey the following rules:

        • it must not be null
        • it must include the ".class" suffix
        • its prefix must be a valid identifier
        • it must not contain any characters or substrings that are not valid on the file system on which workspace root is located.

        Parameters:
        name - the name of a .class file
        Returns:
        a status object with code IStatus.OK if the given name is valid as a .class file name, otherwise a status object indicating what is wrong with the name
        Since:
        2.0
      • validateClassFileName

        public static IStatus validateClassFileName​(String name,
                                                    String sourceLevel,
                                                    String complianceLevel)
        Validate the given .class file name for the given source and compliance levels.

        A .class file name must obey the following rules:

        • it must not be null
        • it must include the ".class" suffix
        • its prefix must be a valid identifier
        • it must not contain any characters or substrings that are not valid on the file system on which workspace root is located.

        Parameters:
        name - the name of a .class file
        sourceLevel - the source level
        complianceLevel - the compliance level
        Returns:
        a status object with code IStatus.OK if the given name is valid as a .class file name, otherwise a status object indicating what is wrong with the name
        Since:
        3.3
      • validateFieldName

        public static IStatus validateFieldName​(String name)
        Validate the given field name.

        Syntax of a field name corresponds to VariableDeclaratorId (JLS2 8.3). For example, "x".

        Parameters:
        name - the name of a field
        Returns:
        a status object with code IStatus.OK if the given name is valid as a field name, otherwise a status object indicating what is wrong with the name
      • validateFieldName

        public static IStatus validateFieldName​(String name,
                                                String sourceLevel,
                                                String complianceLevel)
        Validate the given field name for the given source and compliance levels.

        Syntax of a field name corresponds to VariableDeclaratorId (JLS2 8.3). For example, "x".

        Parameters:
        name - the name of a field
        sourceLevel - the source level
        complianceLevel - the compliance level
        Returns:
        a status object with code IStatus.OK if the given name is valid as a field name, otherwise a status object indicating what is wrong with the name
        Since:
        3.3
      • validateIdentifier

        public static IStatus validateIdentifier​(String id)
        Validate the given Java identifier. The identifier must not have the same spelling as a Java keyword, boolean literal ("true", "false"), or null literal ("null"). See section 3.8 of the Java Language Specification, Second Edition (JLS2). A valid identifier can act as a simple type name, method name or field name.
        Parameters:
        id - the Java identifier
        Returns:
        a status object with code IStatus.OK if the given identifier is a valid Java identifier, otherwise a status object indicating what is wrong with the identifier
      • validateIdentifier

        public static IStatus validateIdentifier​(String id,
                                                 String sourceLevel,
                                                 String complianceLevel)
        Validate the given Java identifier for the given source and compliance levels The identifier must not have the same spelling as a Java keyword, boolean literal ("true", "false"), or null literal ("null"). See section 3.8 of the Java Language Specification, Second Edition (JLS2). A valid identifier can act as a simple type name, method name or field name.
        Parameters:
        id - the Java identifier
        sourceLevel - the source level
        complianceLevel - the compliance level
        Returns:
        a status object with code IStatus.OK if the given identifier is a valid Java identifier, otherwise a status object indicating what is wrong with the identifier
        Since:
        3.3
      • validateImportDeclaration

        public static IStatus validateImportDeclaration​(String name)
        Validate the given import declaration name.

        The name of an import corresponds to a fully qualified type name or an on-demand package name as defined by ImportDeclaration (JLS2 7.5). For example, "java.util.*" or "java.util.Hashtable".

        Parameters:
        name - the import declaration
        Returns:
        a status object with code IStatus.OK if the given name is valid as an import declaration, otherwise a status object indicating what is wrong with the name
      • validateImportDeclaration

        public static IStatus validateImportDeclaration​(String name,
                                                        String sourceLevel,
                                                        String complianceLevel)
        Validate the given import declaration name for the given source and compliance levels.

        The name of an import corresponds to a fully qualified type name or an on-demand package name as defined by ImportDeclaration (JLS2 7.5). For example, "java.util.*" or "java.util.Hashtable".

        Parameters:
        name - the import declaration
        sourceLevel - the source level
        complianceLevel - the compliance level
        Returns:
        a status object with code IStatus.OK if the given name is valid as an import declaration, otherwise a status object indicating what is wrong with the name
        Since:
        3.3
      • validateJavaTypeName

        public static IStatus validateJavaTypeName​(String name)
        Validate the given Java type name, either simple or qualified. For example, "java.lang.Object", or "Object".

        Parameters:
        name - the name of a type
        Returns:
        a status object with code IStatus.OK if the given name is valid as a Java type name, a status with code IStatus.WARNING indicating why the given name is discouraged, otherwise a status object indicating what is wrong with the name
      • validateMethodName

        public static IStatus validateMethodName​(String name)
        Validate the given method name. The special names "<init>" and "<clinit>" are not valid.

        The syntax for a method name is defined by Identifier of MethodDeclarator (JLS2 8.4). For example "println".

        Parameters:
        name - the name of a method
        Returns:
        a status object with code IStatus.OK if the given name is valid as a method name, otherwise a status object indicating what is wrong with the name
      • validateMethodName

        public static IStatus validateMethodName​(String name,
                                                 String sourceLevel,
                                                 String complianceLevel)
        Validate the given method name for the given source and compliance levels. The special names "<init>" and "<clinit>" are not valid.

        The syntax for a method name is defined by Identifier of MethodDeclarator (JLS2 8.4). For example "println".

        Parameters:
        name - the name of a method
        sourceLevel - the source level
        complianceLevel - the compliance level
        Returns:
        a status object with code IStatus.OK if the given name is valid as a method name, otherwise a status object indicating what is wrong with the name
        Since:
        3.3
      • validatePackageName

        public static IStatus validatePackageName​(String name)
        Validate the given package name.

        The syntax of a package name corresponds to PackageName as defined by PackageDeclaration (JLS2 7.4). For example, "java.lang".

        Note that the given name must be a non-empty package name (that is, attempting to validate the default package will return an error status.) Also it must not contain any characters or substrings that are not valid on the file system on which workspace root is located.

        Parameters:
        name - the name of a package
        Returns:
        a status object with code IStatus.OK if the given name is valid as a package name, otherwise a status object indicating what is wrong with the name
      • validatePackageName

        public static IStatus validatePackageName​(String name,
                                                  String sourceLevel,
                                                  String complianceLevel)
        Validate the given package name for the given source and compliance levels.

        The syntax of a package name corresponds to PackageName as defined by PackageDeclaration (JLS2 7.4). For example, "java.lang".

        Note that the given name must be a non-empty package name (that is, attempting to validate the default package will return an error status.) Also it must not contain any characters or substrings that are not valid on the file system on which workspace root is located.

        Parameters:
        name - the name of a package
        sourceLevel - the source level
        complianceLevel - the compliance level
        Returns:
        a status object with code IStatus.OK if the given name is valid as a package name, otherwise a status object indicating what is wrong with the name
        Since:
        3.3
      • validateModuleName

        public static IStatus validateModuleName​(String name,
                                                 String sourceLevel,
                                                 String complianceLevel)
        Validate the given module name for the given source and compliance levels.

        The syntax of a module name corresponds to ModuleName as defined by ModuleDeclaration (JLS 7.6). For example, "java.base".

        Note that the given name must not be empty. Also each segment of the module name (separated by ".") must be a valid Java identifier as per JLS 3.8.

        Parameters:
        name - name of a module
        sourceLevel - the source level
        complianceLevel - the compliance level
        Returns:
        a status object with code IStatus.OK if the given name is valid as a module name, otherwise a status object indicating what is wrong with the name
        Since:
        3.14
      • validateClasspath

        public static IJavaModelStatus validateClasspath​(IJavaProject javaProject,
                                                         IClasspathEntry[] rawClasspath,
                                                         IPath projectOutputLocation)
        Validate a given classpath and output location for a project, using the following rules:
        • Classpath entries cannot collide with each other; that is, all entry paths must be unique.
        • The project output location path cannot be null, must be absolute and located inside the project.
        • Specific output locations (specified on source entries) can be null, if not they must be located inside the project,
        • A project entry cannot refer to itself directly (that is, a project cannot prerequisite itself).
        • Classpath entries or output locations cannot coincide or be nested in each other, except for the following scenarios listed below:
          • A source folder can coincide with its own output location, in which case this output can then contain library archives. However, a specific output location cannot coincide with any library or a distinct source folder than the one referring to it.
            Note: Since 3.8, this behavior can be overridden by configuring JavaCore.CORE_OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE
          • A source/library folder can be nested in any source folder as long as the nested folder is excluded from the enclosing one.
          • An output location can be nested in a source folder, if the source folder coincides with the project itself, or if the output location is excluded from the source folder.
        Note that the classpath entries are not validated automatically. Only bound variables or containers are considered in the checking process (this allows to perform a consistency check on a classpath which has references to yet non existing projects, folders, ...).

        This validation is intended to anticipate classpath issues prior to assigning it to a project. In particular, it will automatically be performed during the classpath setting operation (if validation fails, the classpath setting will not complete).

        Parameters:
        javaProject - the given java project
        rawClasspath - the given classpath
        projectOutputLocation - the given output location
        Returns:
        a status object with code IStatus.OK if the given classpath and output location are compatible, otherwise a status object indicating what is wrong with the classpath or output location
        Since:
        2.0
      • validateClasspathEntry

        public static IJavaModelStatus validateClasspathEntry​(IJavaProject project,
                                                              IClasspathEntry entry,
                                                              boolean checkSourceAttachment)
        Returns a Java model status describing the problem related to this classpath entry if any, a status object with code IStatus.OK if the entry is fine (that is, if the given classpath entry denotes a valid element to be referenced onto a classpath).
        Parameters:
        project - the given java project
        entry - the given classpath entry
        checkSourceAttachment - a flag to determine if source attachment should be checked
        Returns:
        a java model status describing the problem related to this classpath entry if any, a status object with code IStatus.OK if the entry is fine
        Since:
        2.0
      • validateTypeVariableName

        public static IStatus validateTypeVariableName​(String name)
        Validate the given type variable name.

        Syntax of a type variable name corresponds to a Java identifier (JLS3 4.3). For example, "E".

        Parameters:
        name - the name of a type variable
        Returns:
        a status object with code IStatus.OK if the given name is valid as a type variable name, otherwise a status object indicating what is wrong with the name
        Since:
        3.1
      • validateTypeVariableName

        public static IStatus validateTypeVariableName​(String name,
                                                       String sourceLevel,
                                                       String complianceLevel)
        Validate the given type variable name for the given source and compliance levels.

        Syntax of a type variable name corresponds to a Java identifier (JLS3 4.3). For example, "E".

        Parameters:
        name - the name of a type variable
        sourceLevel - the source level
        complianceLevel - the compliance level
        Returns:
        a status object with code IStatus.OK if the given name is valid as a type variable name, otherwise a status object indicating what is wrong with the name
        Since:
        3.3