import org.jetbrains.annotations.NotNull;
class FieldLoader {
- public static final char FIELD_PREFIX = '_';
-
final String name;
final String jsonName;
this.jsonName = jsonName;
this.valueReader = valueReader;
}
-
- public void writeFieldDeclaration(@NotNull TextOutput out) {
- out.append("private").space();
- valueReader.appendFinishedValueTypeName(out);
- out.space().append(FIELD_PREFIX).append(name);
- if (valueReader instanceof PrimitiveValueReader) {
- String defaultValue = ((PrimitiveValueReader)valueReader).defaultValue;
- if (defaultValue != null) {
- out.append(" = ").append(defaultValue);
- }
- }
- out.semi();
- }
}
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
final class FieldProcessor<T> {
- private final List<FieldLoader> fieldLoaders = new ArrayList<>();
- private final LinkedHashMap<Method, MethodHandler> methodHandlerMap = new LinkedHashMap<>();
- private final List<VolatileFieldBinding> volatileFields = new ArrayList<>();
+ final List<FieldLoader> fieldLoaders = new ArrayList<>();
+ final LinkedHashMap<Method, MethodHandler> methodHandlerMap = new LinkedHashMap<>();
+ final List<VolatileFieldBinding> volatileFields = new ArrayList<>();
boolean lazyRead;
private final InterfaceReader reader;
Method[] methods = typeClass.getMethods();
// todo sort by source location
- Arrays.sort(methods, new Comparator<Method>() {
- @Override
- public int compare(@NotNull Method o1, @NotNull Method o2) {
- return o1.getName().compareTo(o2.getName());
- }
- });
+ Arrays.sort(methods, (o1, o2) -> o1.getName().compareTo(o2.getName()));
Package classPackage = typeClass.getPackage();
for (Method method : methods) {
writeMethodDeclarationJava(out, method);
out.openBlock();
if (effectiveFieldName != null) {
- out.append("return ").append(FieldLoader.FIELD_PREFIX).append(effectiveFieldName).semi();
+ out.append("return ").append(TypeHandler.FIELD_PREFIX).append(effectiveFieldName).semi();
}
out.closeBlock();
}
return handler;
}
- List<VolatileFieldBinding> getVolatileFields() {
- return volatileFields;
- }
-
- List<FieldLoader> getFieldLoaders() {
- return fieldLoaders;
- }
-
- LinkedHashMap<Method, MethodHandler> getMethodHandlerMap() {
- return methodHandlerMap;
- }
-
@NotNull
private VolatileFieldBinding allocateVolatileField(final ValueReader fieldTypeParser, boolean internalType) {
int position = volatileFields.size();
createIfNotExists(aClass);
}
- TypeHandler<?> typeHandler = createTypeHandler(typeClass);
- for (TypeRef ref : refs) {
- if (ref.typeClass == typeClass) {
- assert ref.type == null;
- ref.type = typeHandler;
- break;
- }
- }
- typeToTypeHandler.put(typeClass, typeHandler);
- }
-
- private <T> TypeHandler<T> createTypeHandler(Class<T> typeClass) {
if (!typeClass.isInterface()) {
throw new JsonProtocolModelParseException("Json model type should be interface: " + typeClass.getName());
}
- FieldProcessor<T> fields = new FieldProcessor<>(this, typeClass);
- LinkedHashMap<Method, MethodHandler> methodHandlerMap = fields.getMethodHandlerMap();
- for (Method method : methodHandlerMap.keySet()) {
+ FieldProcessor<?> fields = new FieldProcessor<>(this, typeClass);
+ for (Method method : fields.methodHandlerMap.keySet()) {
Class<?> returnType = method.getReturnType();
if (returnType != typeClass) {
createIfNotExists(returnType);
}
}
- return new TypeHandler<>(typeClass, getSuperclassRef(typeClass),
- fields.getVolatileFields(), methodHandlerMap,
- fields.getFieldLoaders(),
- fields.lazyRead);
+ TypeHandler<?> typeHandler = new TypeHandler<>(typeClass, getSuperclassRef(typeClass),
+ fields.volatileFields, fields.methodHandlerMap,
+ fields.fieldLoaders,
+ fields.lazyRead);
+ for (TypeRef ref : refs) {
+ if (ref.typeClass == typeClass) {
+ assert ref.type == null;
+ ref.type = typeHandler;
+ break;
+ }
+ }
+ typeToTypeHandler.put(typeClass, typeHandler);
}
ValueReader getFieldTypeParser(Type type, boolean isSubtyping, @Nullable Method method) {
// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-
package org.jetbrains.protocolReader;
import org.jetbrains.annotations.NotNull;
for (TypeHandler<?> typeHandler : configuration.typeToTypeHandler.values()) {
out.newLine();
- typeHandler.writeStaticClassJava(rootClassScope);
+ typeHandler.write(rootClassScope);
out.newLine();
}
import java.util.Map;
class TypeHandler<T> {
+ public static final char FIELD_PREFIX = '_';
+
final Class<T> typeClass;
private final List<VolatileFieldBinding> volatileFields;
}
}
- public void writeStaticClassJava(@NotNull FileScope fileScope) {
+ public void write(@NotNull FileScope fileScope) {
TextOutput out = fileScope.getOutput();
String valueImplClassName = fileScope.getTypeImplShortName(this);
out.append("private static final class ").append(valueImplClassName);
}
for (FieldLoader loader : fieldLoaders) {
- loader.writeFieldDeclaration(out);
+ out.append("private").space();
+ loader.valueReader.appendFinishedValueTypeName(out);
+ out.space().append(FIELD_PREFIX).append(loader.name);
+ if (loader.valueReader instanceof PrimitiveValueReader) {
+ String defaultValue = ((PrimitiveValueReader)loader.valueReader).defaultValue;
+ if (defaultValue != null) {
+ out.append(" = ").append(defaultValue);
+ }
+ }
+ out.semi();
out.newLine();
}
@NotNull
private static TextOutput assignField(TextOutput out, String fieldName) {
- return out.append(FieldLoader.FIELD_PREFIX).append(fieldName).append(" = ");
+ return out.append(FIELD_PREFIX).append(fieldName).append(" = ");
}
}
\ No newline at end of file