Skip to content

Commit

Permalink
Address comments by @trustin
Browse files Browse the repository at this point in the history
  • Loading branch information
minwoox committed Jan 31, 2019
1 parent 65ca0f0 commit aab1392
Show file tree
Hide file tree
Showing 8 changed files with 92 additions and 83 deletions.
Expand Up @@ -104,7 +104,7 @@ static Optional<AnnotatedBeanFactory<?>> find(@Nullable BeanFactoryId beanFactor
: Optional.empty();
}

static TreeSet<AnnotatedValueResolver> uniqueResolverSet() {
static Set<AnnotatedValueResolver> uniqueResolverSet() {
return new TreeSet<>((o1, o2) -> {
final String o1Name = o1.httpElementName();
final String o2Name = o2.httpElementName();
Expand Down Expand Up @@ -220,7 +220,7 @@ private static <T> Entry<Constructor<T>, List<AnnotatedValueResolver>> findConst
private static Map<Method, List<AnnotatedValueResolver>> findMethods(
List<AnnotatedValueResolver> constructorAnnotatedResolvers,
BeanFactoryId beanFactoryId, List<RequestObjectResolver> objectResolvers) {
final TreeSet<AnnotatedValueResolver> uniques = uniqueResolverSet();
final Set<AnnotatedValueResolver> uniques = uniqueResolverSet();
uniques.addAll(constructorAnnotatedResolvers);

final Builder<Method, List<AnnotatedValueResolver>> methodsBuilder = ImmutableMap.builder();
Expand Down Expand Up @@ -259,7 +259,7 @@ private static Map<Field, AnnotatedValueResolver> findFields(
List<AnnotatedValueResolver> constructorAnnotatedResolvers,
Map<Method, List<AnnotatedValueResolver>> methods,
BeanFactoryId beanFactoryId, List<RequestObjectResolver> objectResolvers) {
final TreeSet<AnnotatedValueResolver> uniques = uniqueResolverSet();
final Set<AnnotatedValueResolver> uniques = uniqueResolverSet();
uniques.addAll(constructorAnnotatedResolvers);
methods.values().forEach(uniques::addAll);

Expand Down
Expand Up @@ -90,11 +90,11 @@ public final class AnnotatedHttpDocServicePlugin implements DocServicePlugin {
@VisibleForTesting
static final TypeSignature VOID = TypeSignature.ofBase("void");
@VisibleForTesting
static final TypeSignature BOOL = TypeSignature.ofBase("boolean");
static final TypeSignature BOOLEAN = TypeSignature.ofBase("boolean");
@VisibleForTesting
static final TypeSignature INT32 = TypeSignature.ofBase("int32");
static final TypeSignature INT = TypeSignature.ofBase("int");
@VisibleForTesting
static final TypeSignature INT64 = TypeSignature.ofBase("int64");
static final TypeSignature LONG = TypeSignature.ofBase("long");
@VisibleForTesting
static final TypeSignature FLOAT = TypeSignature.ofBase("float");
@VisibleForTesting
Expand All @@ -106,9 +106,9 @@ public final class AnnotatedHttpDocServicePlugin implements DocServicePlugin {

// Not defined in the spec.
@VisibleForTesting
static final TypeSignature INT8 = TypeSignature.ofBase("int8");
static final TypeSignature BYTE = TypeSignature.ofBase("byte");
@VisibleForTesting
static final TypeSignature INT16 = TypeSignature.ofBase("int16");
static final TypeSignature SHORT = TypeSignature.ofBase("short");
@VisibleForTesting
static final TypeSignature BEAN = TypeSignature.ofBase("bean");

Expand Down Expand Up @@ -286,15 +286,15 @@ static TypeSignature toTypeSignature(Type type) {
if (type == Void.class || type == void.class) {
return VOID;
} else if (type == Boolean.class || type == boolean.class) {
return BOOL;
return BOOLEAN;
} else if (type == Byte.class || type == byte.class) {
return INT8;
return BYTE;
} else if (type == Short.class || type == short.class) {
return INT16;
return SHORT;
} else if (type == Integer.class || type == int.class) {
return INT32;
return INT;
} else if (type == Long.class || type == long.class) {
return INT64;
return LONG;
} else if (type == Float.class || type == float.class) {
return FLOAT;
} else if (type == Double.class || type == double.class) {
Expand Down Expand Up @@ -401,8 +401,7 @@ private static StructInfo newStructInfo(Class<?> structClass) {
final Field[] declaredFields = structClass.getDeclaredFields();
final List<FieldInfo> fields =
Stream.of(declaredFields)
.map(f -> new FieldInfoBuilder(f.getName(), toTypeSignature(f.getGenericType()))
.build())
.map(f -> FieldInfo.of(f.getName(), toTypeSignature(f.getGenericType())))
.collect(Collectors.toList());
return new StructInfo(name, fields);
}
Expand Down
Expand Up @@ -48,7 +48,6 @@
import java.util.Map.Entry;
import java.util.Optional;
import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentMap;
import java.util.function.BiFunction;
import java.util.function.Function;
Expand Down Expand Up @@ -427,7 +426,7 @@ private static boolean isAnnotationPresent(AnnotatedElement element) {

private static void warnOnRedundantUse(Executable constructorOrMethod,
List<AnnotatedValueResolver> list) {
final TreeSet<AnnotatedValueResolver> uniques = uniqueResolverSet();
final Set<AnnotatedValueResolver> uniques = uniqueResolverSet();
list.forEach(element -> {
if (!uniques.add(element)) {
warnRedundantUse(element, constructorOrMethod.toGenericString());
Expand Down
11 changes: 11 additions & 0 deletions core/src/main/java/com/linecorp/armeria/server/docs/FieldInfo.java
Expand Up @@ -25,6 +25,7 @@
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableList;

/**
* Metadata about a field of a struct or an exception.
Expand All @@ -41,6 +42,16 @@ public final class FieldInfo {
@Nullable
private final String docString;

/**
* Creates a new {@link FieldInfo} with the specified {@code name} and {@link TypeSignature}.
* The {@link FieldLocation} and {@link FieldRequirement} of the {@link FieldInfo} will be
* {@code UNSPECIFIED}.
*/
public static FieldInfo of(String name, TypeSignature typeSignature) {
return new FieldInfo(name, FieldLocation.UNSPECIFIED, FieldRequirement.UNSPECIFIED, typeSignature,
ImmutableList.of(), null);
}

/**
* Creates a new instance.
*/
Expand Down
Expand Up @@ -18,8 +18,8 @@

import static com.google.common.collect.ImmutableMap.toImmutableMap;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.BEAN;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.INT32;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.INT64;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.INT;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.LONG;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.STRING;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.VOID;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.endpointInfo;
Expand Down Expand Up @@ -77,14 +77,14 @@ public void testToTypeSignature() throws Exception {
assertThat(toTypeSignature(void.class)).isEqualTo(TypeSignature.ofBase("void"));
assertThat(toTypeSignature(Boolean.class)).isEqualTo(TypeSignature.ofBase("boolean"));
assertThat(toTypeSignature(boolean.class)).isEqualTo(TypeSignature.ofBase("boolean"));
assertThat(toTypeSignature(Byte.class)).isEqualTo(TypeSignature.ofBase("int8"));
assertThat(toTypeSignature(byte.class)).isEqualTo(TypeSignature.ofBase("int8"));
assertThat(toTypeSignature(Short.class)).isEqualTo(TypeSignature.ofBase("int16"));
assertThat(toTypeSignature(short.class)).isEqualTo(TypeSignature.ofBase("int16"));
assertThat(toTypeSignature(Integer.class)).isEqualTo(TypeSignature.ofBase("int32"));
assertThat(toTypeSignature(int.class)).isEqualTo(TypeSignature.ofBase("int32"));
assertThat(toTypeSignature(Long.class)).isEqualTo(TypeSignature.ofBase("int64"));
assertThat(toTypeSignature(long.class)).isEqualTo(TypeSignature.ofBase("int64"));
assertThat(toTypeSignature(Byte.class)).isEqualTo(TypeSignature.ofBase("byte"));
assertThat(toTypeSignature(byte.class)).isEqualTo(TypeSignature.ofBase("byte"));
assertThat(toTypeSignature(Short.class)).isEqualTo(TypeSignature.ofBase("short"));
assertThat(toTypeSignature(short.class)).isEqualTo(TypeSignature.ofBase("short"));
assertThat(toTypeSignature(Integer.class)).isEqualTo(TypeSignature.ofBase("int"));
assertThat(toTypeSignature(int.class)).isEqualTo(TypeSignature.ofBase("int"));
assertThat(toTypeSignature(Long.class)).isEqualTo(TypeSignature.ofBase("long"));
assertThat(toTypeSignature(long.class)).isEqualTo(TypeSignature.ofBase("long"));
assertThat(toTypeSignature(Float.class)).isEqualTo(TypeSignature.ofBase("float"));
assertThat(toTypeSignature(float.class)).isEqualTo(TypeSignature.ofBase("float"));
assertThat(toTypeSignature(Double.class)).isEqualTo(TypeSignature.ofBase("double"));
Expand All @@ -94,7 +94,7 @@ public void testToTypeSignature() throws Exception {
assertThat(toTypeSignature(Byte[].class)).isEqualTo(TypeSignature.ofBase("binary"));
assertThat(toTypeSignature(byte[].class)).isEqualTo(TypeSignature.ofBase("binary"));

assertThat(toTypeSignature(int[].class)).isEqualTo(TypeSignature.ofList(TypeSignature.ofBase("int32")));
assertThat(toTypeSignature(int[].class)).isEqualTo(TypeSignature.ofList(TypeSignature.ofBase("int")));

final TypeSignature typeVariable = toTypeSignature(FieldContainer.class.getDeclaredField("typeVariable")
.getGenericType());
Expand All @@ -112,7 +112,7 @@ public void testToTypeSignature() throws Exception {

final TypeSignature map = toTypeSignature(FieldContainer.class.getDeclaredField("map")
.getGenericType());
assertThat(map).isEqualTo(TypeSignature.ofMap(TypeSignature.ofBase("int64"),
assertThat(map).isEqualTo(TypeSignature.ofMap(TypeSignature.ofBase("long"),
TypeSignature.ofUnresolved("")));

final TypeSignature future = toTypeSignature(FieldContainer.class.getDeclaredField("future")
Expand Down Expand Up @@ -246,9 +246,9 @@ private static void checkFooService(ServiceInfo fooServiceInfo) {
new FieldInfoBuilder("foo", STRING).requirement(REQUIRED)
.location(QUERY)
.build(),
new FieldInfoBuilder("foo1", INT64).requirement(REQUIRED)
.location(HEADER)
.build());
new FieldInfoBuilder("foo1", LONG).requirement(REQUIRED)
.location(HEADER)
.build());

assertThat(fooMethod.returnTypeSignature()).isEqualTo(VOID);

Expand Down Expand Up @@ -300,16 +300,16 @@ static FieldInfo compositeBean() {
private static FieldInfo createBean1() {
final FieldInfo uid = new FieldInfoBuilder("uid", STRING).location(HEADER).requirement(REQUIRED)
.build();
final FieldInfo seqNum = new FieldInfoBuilder("seqNum", INT64).location(QUERY).requirement(REQUIRED)
.build();
final FieldInfo seqNum = new FieldInfoBuilder("seqNum", LONG).location(QUERY).requirement(REQUIRED)
.build();
return new FieldInfoBuilder(RequestBean1.class.getSimpleName(), BEAN, uid, seqNum).build();
}

private static FieldInfo createBean2() {
final FieldInfo inside1 = new FieldInfoBuilder("inside1", INT64).location(QUERY).requirement(REQUIRED)
.build();
final FieldInfo inside2 = new FieldInfoBuilder("inside2", INT32).location(QUERY).requirement(REQUIRED)
.build();
final FieldInfo inside1 = new FieldInfoBuilder("inside1", LONG).location(QUERY).requirement(REQUIRED)
.build();
final FieldInfo inside2 = new FieldInfoBuilder("inside2", INT).location(QUERY).requirement(REQUIRED)
.build();
final FieldInfo insideBean = new FieldInfoBuilder(InsideBean.class.getSimpleName(), BEAN,
inside1, inside2).build();
return new FieldInfoBuilder(RequestBean2.class.getSimpleName(), BEAN, insideBean).build();
Expand Down
Expand Up @@ -16,8 +16,8 @@

package com.linecorp.armeria.internal.annotation;

import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.INT32;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.INT64;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.INT;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.LONG;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.STRING;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePlugin.toTypeSignature;
import static com.linecorp.armeria.internal.annotation.AnnotatedHttpDocServicePluginTest.compositeBean;
Expand Down Expand Up @@ -143,12 +143,12 @@ private static void addFooMethodInfo(Map<Class<?>, Set<MethodInfo>> methodInfos)
final EndpointInfo endpoint = new EndpointInfoBuilder("*", "exact:/service/foo")
.availableMimeTypes(MediaType.JSON_UTF_8).build();
final List<FieldInfo> fieldInfos = ImmutableList.of(
new FieldInfoBuilder("header", INT32).requirement(REQUIRED)
.location(FieldLocation.HEADER)
.docString("header parameter").build(),
new FieldInfoBuilder("query", INT64).requirement(REQUIRED)
.location(QUERY)
.docString("query parameter").build());
new FieldInfoBuilder("header", INT).requirement(REQUIRED)
.location(FieldLocation.HEADER)
.docString("header parameter").build(),
new FieldInfoBuilder("query", LONG).requirement(REQUIRED)
.location(QUERY)
.docString("query parameter").build());
final MethodInfo methodInfo = new MethodInfo(
"foo", TypeSignature.ofBase("T"), fieldInfos, ImmutableList.of(),
ImmutableList.of(endpoint), HttpMethod.GET, "foo method");
Expand All @@ -175,10 +175,10 @@ private static void addIntsMethodInfo(Map<Class<?>, Set<MethodInfo>> methodInfos
final EndpointInfo endpoint = new EndpointInfoBuilder("*", "exact:/service/ints")
.availableMimeTypes(MediaType.JSON_UTF_8).build();
final List<FieldInfo> fieldInfos = ImmutableList.of(
new FieldInfoBuilder("ints", TypeSignature.ofList(INT32)).requirement(REQUIRED)
.location(QUERY).build());
new FieldInfoBuilder("ints", TypeSignature.ofList(INT)).requirement(REQUIRED)
.location(QUERY).build());
final MethodInfo methodInfo = new MethodInfo(
"ints", TypeSignature.ofList(INT32),
"ints", TypeSignature.ofList(INT),
fieldInfos, ImmutableList.of(),
ImmutableList.of(endpoint), HttpMethod.GET, null);
methodInfos.computeIfAbsent(MyService.class, unused -> new HashSet<>()).add(methodInfo);
Expand Down
14 changes: 7 additions & 7 deletions docs-client/src/components/VariableList/index.tsx
Expand Up @@ -110,7 +110,11 @@ class FieldInfos extends React.Component<FieldInfosProps, State> {
return `${'\xa0'.repeat(indent)}${s}`;
}

private static printIfNotUnspecified(s: string): string {
private static formatLocation(s: string): string {
return this.formatRequirement(s);
}

private static formatRequirement(s: string): string {
const lowerCase = s.toLowerCase();
if ('unspecified' === lowerCase) {
return '-';
Expand Down Expand Up @@ -180,17 +184,13 @@ class FieldInfos extends React.Component<FieldInfosProps, State> {
variable.location && (
<TableCell>
<code>
{FieldInfos.printIfNotUnspecified(
variable.location.toLowerCase(),
)}
{FieldInfos.formatLocation(variable.location)}
</code>
</TableCell>
)}
<TableCell>
<code>
{FieldInfos.printIfNotUnspecified(
variable.requirement.toLowerCase(),
)}
{FieldInfos.formatRequirement(variable.requirement)}
</code>
</TableCell>
<TableCell>
Expand Down

0 comments on commit aab1392

Please sign in to comment.