code: @Override
  	public JvmDeclaredType createType(final Class<?> clazz) {
  		try {
  			createTypeTask.start();
  			if (clazz.isAnonymousClass() || clazz.isSynthetic())
  				throw new IllegalStateException("Cannot create type for anonymous or synthetic classes");
  			if (clazz.isAnnotation())
  				return createAnnotationType(clazz);
  			if (clazz.isEnum())
  				return createEnumerationType(clazz);
  
  			final JvmGenericType result = TypesFactory.eINSTANCE.createJvmGenericType();
  			result.setInterface(clazz.isInterface());
  			result.setStrictFloatingPoint(Modifier.isStrict(clazz.getModifiers()));
  			setTypeModifiers(clazz, result);
  			setVisibility(clazz, result);
  			result.internalSetIdentifier(clazz.getName());
  			result.setSimpleName(clazz.getSimpleName());
  			if (clazz.getDeclaringClass() == null && clazz.getPackage() != null)
  				result.setPackageName(clazz.getPackage().getName());
  
  			createNestedTypes(clazz, result);
  			createMethods(clazz, result);
  			createConstructors(clazz, result);
  			createFields(clazz, result);
  
  			setSuperTypes(clazz, result);
  			try {
  				TypeVariable<?>[] typeParameters = clazz.getTypeParameters();
  				if (typeParameters.length != 0) {
  					InternalEList<JvmTypeParameter> jvmTypeParameters = (InternalEList<JvmTypeParameter>)result.getTypeParameters();
  					for (TypeVariable<?> variable : typeParameters) {
  						jvmTypeParameters.addUnique(createTypeParameter(variable, result));
  					}
  				}
  			} catch (GenericSignatureFormatError error) {
  				logSignatureFormatError(clazz);
  			} catch (MalformedParameterizedTypeException error) {
  				logSignatureFormatError(clazz);
  			}
  			createAnnotationValues(clazz, result);
  			return result;
  		} finally {
  			createTypeTask.stop();
  		}
  	}
docs: Creates a new {@link JvmDeclaredType type} from the given class.
  
  @noreference This method is not intended to be referenced by clients.