Class AbstractTypeDeclaration
- java.lang.Object
-
- com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration
-
- All Implemented Interfaces:
AssociableToAST,ResolvedDeclaration,ResolvedReferenceTypeDeclaration,ResolvedTypeDeclaration,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 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 AbstractTypeDeclaration()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Set<MethodUsage>getAllMethods()booleanisFunctionalInterface()static booleanisRecordType(Class<?> clazz)With the introduction of records in Java 14 (Preview), theClass.isRecordmethod was added to check whether a class is a record or not (similar toisEnumetc.).-
Methods inherited from class java.lang.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, 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
-
-
-
-
Method Detail
-
getAllMethods
public final Set<MethodUsage> getAllMethods()
- Specified by:
getAllMethodsin interfaceResolvedReferenceTypeDeclaration
-
isFunctionalInterface
public final boolean isFunctionalInterface()
- Specified by:
isFunctionalInterfacein interfaceResolvedReferenceTypeDeclaration
-
isRecordType
public static boolean isRecordType(Class<?> clazz)
With the introduction of records in Java 14 (Preview), theClass.isRecordmethod was added to check whether a class is a record or not (similar toisEnumetc.). 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 theisRecordmethod 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, theisRecordmethod 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, theisRecordmethod does not exist, so attempting to invoke it will throw aNoSuchMethodException. 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 anNoSuchMethodException, simply return false as the type could not be a record for the reason explained above.
-
-