Class AbstractTypeDeclaration

java.lang.Object
com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration
All Implemented Interfaces:
com.github.javaparser.resolution.declarations.AssociableToAST, com.github.javaparser.resolution.declarations.ResolvedDeclaration, com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration, com.github.javaparser.resolution.declarations.ResolvedTypeDeclaration, com.github.javaparser.resolution.declarations.ResolvedTypeParametrizable
Direct Known Subclasses:
AbstractClassDeclaration, JavaParserAnnotationDeclaration, JavaParserEnumDeclaration, JavaParserInterfaceDeclaration, JavaParserRecordDeclaration, JavaParserTypeParameter, JavaParserTypeVariableDeclaration, JavassistAnnotationDeclaration, JavassistEnumDeclaration, JavassistInterfaceDeclaration, JavassistRecordDeclaration, ReflectionAnnotationDeclaration, ReflectionEnumDeclaration, ReflectionInterfaceDeclaration, ReflectionRecordDeclaration

public abstract class AbstractTypeDeclaration extends Object implements com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration
Common ancestor for most types.
Author:
Federico Tomassetti
  • Field Summary

    Fields inherited from interface com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration

    breadthFirstFunc, depthFirstFunc, JAVA_IO_SERIALIZABLE, JAVA_LANG_COMPARABLE, JAVA_LANG_ENUM, JAVA_LANG_OBJECT, JAVA_LANG_RECORD
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    final Set<com.github.javaparser.resolution.MethodUsage>
     
    final boolean
     
    static boolean
    isRecordType(Class<?> clazz)
    With the introduction of records in Java 14 (Preview), the Class.isRecord method was added to check whether a class is a record or not (similar to isEnum etc.).

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface com.github.javaparser.resolution.declarations.AssociableToAST

    toAst, toAst

    Methods inherited from interface com.github.javaparser.resolution.declarations.ResolvedDeclaration

    asEnumConstant, asField, asMethod, asParameter, asTypePattern, getName, hasName, isArrayLength, isEnumConstant, isField, isMethod, isParameter, isTypePattern, isVariable

    Methods inherited from interface com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration

    asReferenceType, canBeAssignedTo, findTypeParameter, getAllAncestors, getAllAncestors, getAllFields, getAllNonStaticFields, getAllStaticFields, getAncestors, getAncestors, getConstructors, getDeclaredAnnotation, getDeclaredAnnotations, getDeclaredFields, getDeclaredMethods, getField, getVisibleField, getVisibleFields, hasAnnotation, hasDirectlyAnnotation, hasField, hasVisibleField, isAssignableBy, isAssignableBy, isInheritedAnnotation, isJavaLangEnum, isJavaLangObject, isJavaLangRecord, isReferenceType

    Methods inherited from interface com.github.javaparser.resolution.declarations.ResolvedTypeDeclaration

    asAnnotation, asClass, asEnum, asInterface, asRecord, asType, asTypeParameter, containerType, getClassName, getId, getInternalType, getPackageName, getQualifiedName, hasInternalType, internalTypes, isAnnotation, isAnonymousClass, isClass, isEnum, isInterface, isRecord, isType, isTypeParameter

    Methods inherited from interface com.github.javaparser.resolution.declarations.ResolvedTypeParametrizable

    getTypeParameters, isGeneric
  • Constructor Details

    • AbstractTypeDeclaration

      public AbstractTypeDeclaration()
  • Method Details

    • getAllMethods

      public final Set<com.github.javaparser.resolution.MethodUsage> getAllMethods()
      Specified by:
      getAllMethods in interface com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration
    • isFunctionalInterface

      public final boolean isFunctionalInterface()
      Specified by:
      isFunctionalInterface in interface com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration
    • isRecordType

      public static boolean isRecordType(Class<?> clazz)
      With the introduction of records in Java 14 (Preview), the Class.isRecord method was added to check whether a class is a record or not (similar to isEnum etc.). This method cannot be used directly in JavaParser, however, since it will not compile on Java versions 8-13 (or 15 if preview features aren't enabled) which are supported by the project. This workaround calls the isRecord method via reflection which compiles while still giving the expected answer. There are 2 cases to consider when this method is called: 1) JavaParser is invoked using a Java runtime which supports records In this case, the isRecord method exists, so invoking it will give the answer as usual. 2) JavaParser is invoked using an older Java runtime without record support In this case, the isRecord method does not exist, so attempting to invoke it will throw a NoSuchMethodException. This is not a problem since the classloader cannot load classes compiled by Java versions greater than that used to invoke JavaParser. This means that if JavaParser is invoked with a Java 8 runtime, for example, then no classes compiled with Java versions greater than 8 are supported, so no class loaded by the classloader could possibly be a record class since it could not be compiled in the first place. There may be an edge case here for classes compiled with Java 14/15 preview, but most likely these won't load either. In the case of an NoSuchMethodException, simply return false as the type could not be a record for the reason explained above.