Fixed handling of anonymous template parameters
This commit is contained in:
@@ -1069,15 +1069,17 @@ std::optional<template_parameter> template_builder::try_as_template_parm_type(
|
||||
auto argument = template_parameter::make_template_type("");
|
||||
type = consume_context(type, argument);
|
||||
|
||||
argument.is_variadic(is_variadic);
|
||||
|
||||
auto type_parameter_name = common::to_string(type, cls->getASTContext());
|
||||
|
||||
ensure_lambda_type_is_relative(type_parameter_name);
|
||||
if (type_parameter_name.empty())
|
||||
type_parameter_name = "typename";
|
||||
|
||||
argument.set_name(map_type_parameter_to_template_parameter_name(
|
||||
cls, type_parameter_name));
|
||||
|
||||
argument.is_variadic(is_variadic);
|
||||
|
||||
ensure_lambda_type_is_relative(type_parameter_name);
|
||||
|
||||
return argument;
|
||||
}
|
||||
|
||||
|
||||
@@ -973,9 +973,13 @@ bool translation_unit_visitor::process_template_parameters(
|
||||
default_arg =
|
||||
template_type_parameter->getDefaultArgument().getAsString();
|
||||
}
|
||||
auto ct = template_parameter::make_template_type(
|
||||
template_type_parameter->getNameAsString(), default_arg,
|
||||
template_type_parameter->isParameterPack());
|
||||
|
||||
auto parameter_name = template_type_parameter->getNameAsString();
|
||||
if (parameter_name.empty())
|
||||
parameter_name = "typename";
|
||||
|
||||
auto ct = template_parameter::make_template_type(parameter_name,
|
||||
default_arg, template_type_parameter->isParameterPack());
|
||||
|
||||
if (template_type_parameter->getTypeConstraint() != nullptr) {
|
||||
util::apply_if_not_null(
|
||||
|
||||
@@ -197,6 +197,10 @@ std::optional<std::string> template_parameter::name() const
|
||||
if (!name_)
|
||||
return {};
|
||||
|
||||
if (kind_ == template_parameter_kind_t::template_type &&
|
||||
name_.has_value() && name_.value().empty())
|
||||
return "typename";
|
||||
|
||||
if (is_variadic_ && (kind_ != template_parameter_kind_t::non_type_template))
|
||||
return name_.value() + "...";
|
||||
|
||||
|
||||
@@ -35,20 +35,23 @@ TEST_CASE("t00016", "[test-case][class]")
|
||||
|
||||
REQUIRE_THAT(puml, StartsWith("@startuml"));
|
||||
REQUIRE_THAT(puml, EndsWith("@enduml\n"));
|
||||
REQUIRE_THAT(puml, IsClassTemplate("is_numeric", ""));
|
||||
REQUIRE_THAT(puml, IsClassTemplate("is_numeric", "typename"));
|
||||
REQUIRE_THAT(puml, IsClassTemplate("is_numeric", "int"));
|
||||
REQUIRE_THAT(puml, IsClassTemplate("is_numeric", "bool"));
|
||||
REQUIRE_THAT(puml, IsClassTemplate("is_numeric", "char"));
|
||||
REQUIRE_THAT(puml, IsClassTemplate("is_numeric", "float"));
|
||||
|
||||
REQUIRE_THAT(
|
||||
puml, IsInstantiation(_A("is_numeric<>"), _A("is_numeric<int>")));
|
||||
REQUIRE_THAT(
|
||||
puml, IsInstantiation(_A("is_numeric<>"), _A("is_numeric<bool>")));
|
||||
REQUIRE_THAT(
|
||||
puml, IsInstantiation(_A("is_numeric<>"), _A("is_numeric<char>")));
|
||||
REQUIRE_THAT(
|
||||
puml, IsInstantiation(_A("is_numeric<>"), _A("is_numeric<float>")));
|
||||
REQUIRE_THAT(puml,
|
||||
IsInstantiation(_A("is_numeric<typename>"), _A("is_numeric<int>")));
|
||||
REQUIRE_THAT(puml,
|
||||
IsInstantiation(
|
||||
_A("is_numeric<typename>"), _A("is_numeric<bool>")));
|
||||
REQUIRE_THAT(puml,
|
||||
IsInstantiation(
|
||||
_A("is_numeric<typename>"), _A("is_numeric<char>")));
|
||||
REQUIRE_THAT(puml,
|
||||
IsInstantiation(
|
||||
_A("is_numeric<typename>"), _A("is_numeric<float>")));
|
||||
|
||||
save_puml(
|
||||
config.output_directory() + "/" + diagram->name + ".puml", puml);
|
||||
@@ -58,7 +61,7 @@ TEST_CASE("t00016", "[test-case][class]")
|
||||
|
||||
using namespace json;
|
||||
|
||||
REQUIRE(IsClassTemplate(j, "is_numeric<>"));
|
||||
REQUIRE(IsClassTemplate(j, "is_numeric<typename>"));
|
||||
REQUIRE(IsClass(j, "is_numeric<int>"));
|
||||
REQUIRE(IsClass(j, "is_numeric<bool>"));
|
||||
REQUIRE(IsClass(j, "is_numeric<char>"));
|
||||
|
||||
@@ -300,6 +300,7 @@ using namespace clanguml::test::matchers;
|
||||
#include "t00061/test_case.h"
|
||||
#include "t00062/test_case.h"
|
||||
#include "t00063/test_case.h"
|
||||
#include "t00064/test_case.h"
|
||||
|
||||
///
|
||||
/// Sequence diagram tests
|
||||
|
||||
@@ -186,6 +186,9 @@ test_cases:
|
||||
- name: t00063
|
||||
title: Element types diagram filter test case
|
||||
description:
|
||||
- name: t00064
|
||||
title: Template type list test case
|
||||
description:
|
||||
Sequence diagrams:
|
||||
- name: t20001
|
||||
title: Basic sequence diagram test case
|
||||
|
||||
Reference in New Issue
Block a user