mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
cleanup, prepare to fix WEB-14597 Breakpoints being ignored if functions called from live console
This commit is contained in:
+2
-4
@@ -16,11 +16,9 @@ abstract class ClassNameScheme {
|
||||
return new NamePath(getShortName(baseName), new NamePath(getPackageNameVirtual(domainName)));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
String getShortName(@NotNull String baseName) {
|
||||
if (baseName.endsWith("Descriptor")) {
|
||||
return baseName;
|
||||
}
|
||||
return new String(getShortNameChars(baseName));
|
||||
return baseName.endsWith("Descriptor") ? baseName : new String(getShortNameChars(baseName));
|
||||
}
|
||||
|
||||
private char[] getShortNameChars(@NotNull String baseName) {
|
||||
|
||||
+8
-3
@@ -11,7 +11,7 @@ abstract class ClassScope {
|
||||
private final NamePath contextNamespace;
|
||||
final DomainGenerator generator;
|
||||
|
||||
ClassScope(DomainGenerator generator, NamePath classNamespace) {
|
||||
ClassScope(@NotNull DomainGenerator generator, @NotNull NamePath classNamespace) {
|
||||
contextNamespace = classNamespace;
|
||||
this.generator = generator;
|
||||
}
|
||||
@@ -24,11 +24,16 @@ abstract class ClassScope {
|
||||
return contextNamespace;
|
||||
}
|
||||
|
||||
void addMember(TextOutConsumer out) {
|
||||
void addMember(@NotNull TextOutConsumer out) {
|
||||
additionalMemberTexts.add(out);
|
||||
}
|
||||
|
||||
void writeAdditionalMembers(TextOutput out) {
|
||||
void writeAdditionalMembers(@NotNull TextOutput out) {
|
||||
if (additionalMemberTexts.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
out.newLine();
|
||||
for (TextOutConsumer deferredWriter : additionalMemberTexts) {
|
||||
deferredWriter.append(out);
|
||||
}
|
||||
|
||||
+4
-4
@@ -17,12 +17,12 @@ abstract class CreateStandaloneTypeBindingVisitorBase implements TypeVisitor<Sta
|
||||
|
||||
@Override
|
||||
public StandaloneTypeBinding visitString() {
|
||||
return generator.createTypedefTypeBinding(type, StandaloneTypeBinding.PredefinedTarget.STRING, generator.generator.getNaming().commonTypedef, null);
|
||||
return generator.createTypedefTypeBinding(type, StandaloneTypeBinding.PredefinedTarget.STRING, generator.generator.naming.commonTypedef, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StandaloneTypeBinding visitInteger() {
|
||||
return generator.createTypedefTypeBinding(type, StandaloneTypeBinding.PredefinedTarget.INT, generator.generator.getNaming().commonTypedef, null);
|
||||
return generator.createTypedefTypeBinding(type, StandaloneTypeBinding.PredefinedTarget.INT, generator.generator.naming.commonTypedef, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -38,13 +38,13 @@ abstract class CreateStandaloneTypeBindingVisitorBase implements TypeVisitor<Sta
|
||||
@Override
|
||||
public StandaloneTypeBinding visitNumber() {
|
||||
return generator.createTypedefTypeBinding(type, StandaloneTypeBinding.PredefinedTarget.NUMBER,
|
||||
generator.generator.getNaming().commonTypedef, null);
|
||||
generator.generator.naming.commonTypedef, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StandaloneTypeBinding visitMap() {
|
||||
return generator.createTypedefTypeBinding(type, StandaloneTypeBinding.PredefinedTarget.MAP,
|
||||
generator.generator.getNaming().commonTypedef, null);
|
||||
generator.generator.naming.commonTypedef, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+106
-40
@@ -6,7 +6,6 @@ import org.jetbrains.jsonProtocol.ItemDescriptor;
|
||||
import org.jetbrains.jsonProtocol.ProtocolMetaModel;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
class DomainGenerator {
|
||||
@@ -26,45 +25,113 @@ class DomainGenerator {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
static String fixMethodName(@NotNull String name) {
|
||||
int i = name.indexOf("breakpoint");
|
||||
return i > 0 ? name.substring(0, i) + 'B' + name.substring(i + 1) : name;
|
||||
}
|
||||
|
||||
void generateCommandsAndEvents() throws IOException {
|
||||
FileUpdater requestsFileUpdater = generator.startJavaFile(generator.naming.params.getPackageNameVirtual(domain.domain()), "Requests.java");
|
||||
TextOutput out = requestsFileUpdater.out;
|
||||
out.append("import org.jetbrains.annotations.NotNull;").newLine();
|
||||
out.append("import org.jetbrains.jsonProtocol.Request;").newLine();
|
||||
out.newLine().append("public final class ").append("Requests");
|
||||
out.openBlock();
|
||||
|
||||
boolean isFirst = true;
|
||||
|
||||
for (ProtocolMetaModel.Command command : domain.commands()) {
|
||||
boolean hasResponse = command.returns() != null;
|
||||
generateCommandParams(command, hasResponse);
|
||||
|
||||
boolean onlyMandatoryParams = true;
|
||||
List<ProtocolMetaModel.Parameter> params = command.parameters();
|
||||
boolean hasParams = params != null && !params.isEmpty();
|
||||
if (hasParams) {
|
||||
for (ProtocolMetaModel.Parameter parameter : params) {
|
||||
if (parameter.optional()) {
|
||||
onlyMandatoryParams = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String returnType = hasResponse ? generator.naming.commandResult.getShortName(command.name()) : "Void";
|
||||
if (onlyMandatoryParams) {
|
||||
if (isFirst) {
|
||||
isFirst = false;
|
||||
}
|
||||
else {
|
||||
out.newLine().newLine();
|
||||
}
|
||||
out.append("@NotNull").newLine().append("public static Request<");
|
||||
out.append(returnType);
|
||||
out.append(">").space().append(fixMethodName(command.name())).append("(");
|
||||
|
||||
OutputClassScope classScope = new OutputClassScope(this, generator.naming.params.getFullName(domain.domain(), command.name()));
|
||||
BoxableType[] parameterTypes = hasParams ? new BoxableType[params.size()] : null;
|
||||
if (hasParams) {
|
||||
classScope.writeMethodParameters(out, params, parameterTypes);
|
||||
}
|
||||
|
||||
out.append(')').openBlock();
|
||||
|
||||
if (hasParams) {
|
||||
out.append("V8SimpleRequest<").append(returnType).append(">").append(" r =");
|
||||
}
|
||||
else {
|
||||
out.append("return");
|
||||
}
|
||||
|
||||
out.append(" new V8SimpleRequest<").append(returnType).append(">(\"");
|
||||
if (!domain.domain().isEmpty()) {
|
||||
out.append(domain.domain()).append('.');
|
||||
}
|
||||
out.append(command.name()).append("\")").semi();
|
||||
|
||||
if (hasParams) {
|
||||
classScope.writeWriteCalls(out, params, parameterTypes, "r");
|
||||
out.newLine().append("return r").semi();
|
||||
}
|
||||
|
||||
out.closeBlock();
|
||||
}
|
||||
else {
|
||||
generateRequest(command, returnType);
|
||||
}
|
||||
|
||||
if (hasResponse) {
|
||||
String className = generator.getNaming().commandResult.getShortName(command.name());
|
||||
FileUpdater fileUpdater = generator.startJavaFile(generator.getNaming().commandResult, domain, command.name());
|
||||
generateJsonProtocolInterface(fileUpdater.out, className, command.description(), command.returns(), null);
|
||||
FileUpdater fileUpdater = generator.startJavaFile(generator.naming.commandResult, domain, command.name());
|
||||
generateJsonProtocolInterface(fileUpdater.out, generator.naming.commandResult.getShortName(command.name()), command.description(), command.returns(), null);
|
||||
fileUpdater.update();
|
||||
String dataFullName = generator.getNaming().commandResult.getFullName(domain.domain(), command.name()).getFullText();
|
||||
generator.jsonProtocolParserClassNames.add(dataFullName);
|
||||
generator.parserRootInterfaceItems.add(new ParserRootInterfaceItem(domain.domain(), command.name(), generator.getNaming().commandResult));
|
||||
generator.jsonProtocolParserClassNames.add(generator.naming.commandResult.getFullName(domain.domain(), command.name()).getFullText());
|
||||
generator.parserRootInterfaceItems.add(new ParserRootInterfaceItem(domain.domain(), command.name(), generator.naming.commandResult));
|
||||
}
|
||||
}
|
||||
|
||||
out.closeBlock();
|
||||
requestsFileUpdater.update();
|
||||
|
||||
if (domain.events() != null) {
|
||||
for (ProtocolMetaModel.Event event : domain.events()) {
|
||||
generateEvenData(event);
|
||||
generator.jsonProtocolParserClassNames.add(generator.getNaming().eventData.getFullName(domain.domain(), event.name()).getFullText());
|
||||
generator.parserRootInterfaceItems.add(new ParserRootInterfaceItem(domain.domain(), event.name(), generator.getNaming().eventData));
|
||||
generator.jsonProtocolParserClassNames.add(generator.naming.eventData.getFullName(domain.domain(), event.name()).getFullText());
|
||||
generator.parserRootInterfaceItems.add(new ParserRootInterfaceItem(domain.domain(), event.name(), generator.naming.eventData));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void generateCommandParams(final ProtocolMetaModel.Command command, final boolean hasResponse) throws IOException {
|
||||
private void generateRequest(@NotNull final ProtocolMetaModel.Command command, @NotNull final String returnType) throws IOException {
|
||||
TextOutConsumer baseTypeBuilder = new TextOutConsumer() {
|
||||
@Override
|
||||
public void append(TextOutput out) {
|
||||
out.space().append("extends ").append(generator.getNaming().requestClassName);
|
||||
if (hasResponse) {
|
||||
out.space().append("implements org.jetbrains.jsonProtocol.Request");
|
||||
}
|
||||
out.space().append("extends ").append(generator.naming.requestClassName).append('<').append(returnType).append('>');
|
||||
}
|
||||
};
|
||||
|
||||
TextOutConsumer memberBuilder = new TextOutConsumer() {
|
||||
@Override
|
||||
public void append(TextOutput out) {
|
||||
out.newLine().append("@Override").newLine().append("public String getMethodName()").openBlock();
|
||||
out.append("@NotNull").newLine().append("@Override").newLine().append("public String getMethodName()").openBlock();
|
||||
out.append("return \"");
|
||||
if (!domain.domain().isEmpty()) {
|
||||
out.append(domain.domain()).append('.');
|
||||
@@ -72,28 +139,29 @@ class DomainGenerator {
|
||||
out.append(command.name()).append("\";").closeBlock();
|
||||
}
|
||||
};
|
||||
generateTopLevelOutputClass(generator.getNaming().params, command.name(), command.description(), baseTypeBuilder,
|
||||
generateTopLevelOutputClass(generator.naming.params, command.name(), command.description(), baseTypeBuilder,
|
||||
memberBuilder, command.parameters());
|
||||
}
|
||||
|
||||
void generateCommandAdditionalParam(ProtocolMetaModel.StandaloneType type) throws IOException {
|
||||
generateTopLevelOutputClass(generator.getNaming().additionalParam, type.id(), type.description(), null, null, type.properties());
|
||||
generateTopLevelOutputClass(generator.naming.additionalParam, type.id(), type.description(), null, null, type.properties());
|
||||
}
|
||||
|
||||
private <P extends ItemDescriptor.Named> void generateTopLevelOutputClass(ClassNameScheme nameScheme,
|
||||
private <P extends ItemDescriptor.Named> void generateTopLevelOutputClass(@NotNull ClassNameScheme nameScheme,
|
||||
String baseName,
|
||||
String description,
|
||||
TextOutConsumer baseType,
|
||||
TextOutConsumer additionalMemberText,
|
||||
@Nullable TextOutConsumer baseType,
|
||||
@Nullable TextOutConsumer additionalMemberText,
|
||||
List<P> properties) throws IOException {
|
||||
FileUpdater fileUpdater = generator.startJavaFile(nameScheme, domain, baseName);
|
||||
TextOutput out = fileUpdater.out;
|
||||
NamePath classNamePath = nameScheme.getFullName(domain.domain(), baseName);
|
||||
generateOutputClass(out, classNamePath, description, baseType, additionalMemberText, properties);
|
||||
if (nameScheme == generator.naming.params) {
|
||||
fileUpdater.out.append("import org.jetbrains.annotations.NotNull;").newLine().newLine();
|
||||
}
|
||||
generateOutputClass(fileUpdater.out, nameScheme.getFullName(domain.domain(), baseName), description, baseType, additionalMemberText, properties);
|
||||
fileUpdater.update();
|
||||
}
|
||||
|
||||
private <P extends ItemDescriptor.Named> void generateOutputClass(TextOutput out,
|
||||
private <P extends ItemDescriptor.Named> void generateOutputClass(@NotNull TextOutput out,
|
||||
NamePath classNamePath,
|
||||
String description,
|
||||
@Nullable TextOutConsumer baseType,
|
||||
@@ -172,14 +240,14 @@ class DomainGenerator {
|
||||
}
|
||||
};
|
||||
|
||||
return createTypedefTypeBinding(getType(), target, generator.getNaming().inputTypedef, TypeData.Direction.INPUT);
|
||||
return createTypedefTypeBinding(getType(), target, generator.naming.inputTypedef, TypeData.Direction.INPUT);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
StandaloneTypeBinding createStandaloneObjectInputTypeBinding(@NotNull final ProtocolMetaModel.StandaloneType type, @Nullable final List<ProtocolMetaModel.ObjectProperty> properties) {
|
||||
final String name = type.id();
|
||||
final NamePath fullTypeName = generator.getNaming().inputValue.getFullName(domain.domain(), name);
|
||||
final NamePath fullTypeName = generator.naming.inputValue.getFullName(domain.domain(), name);
|
||||
generator.jsonProtocolParserClassNames.add(fullTypeName.getFullText());
|
||||
|
||||
return new StandaloneTypeBinding() {
|
||||
@@ -190,8 +258,8 @@ class DomainGenerator {
|
||||
|
||||
@Override
|
||||
public void generate() throws IOException {
|
||||
NamePath className = generator.getNaming().inputValue.getFullName(domain.domain(), name);
|
||||
FileUpdater fileUpdater = generator.startJavaFile(generator.getNaming().inputValue, domain, name);
|
||||
NamePath className = generator.naming.inputValue.getFullName(domain.domain(), name);
|
||||
FileUpdater fileUpdater = generator.startJavaFile(generator.naming.inputValue, domain, name);
|
||||
TextOutput out = fileUpdater.out;
|
||||
if (type.description() != null) {
|
||||
out.doc(type.description());
|
||||
@@ -220,14 +288,14 @@ class DomainGenerator {
|
||||
return new StandaloneTypeBinding() {
|
||||
@Override
|
||||
public BoxableType getJavaType() {
|
||||
return new StandaloneType(generator.getNaming().inputEnum.getFullName(domain.domain(), name), "writeEnum");
|
||||
return new StandaloneType(generator.naming.inputEnum.getFullName(domain.domain(), name), "writeEnum");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generate() throws IOException {
|
||||
FileUpdater fileUpdater = generator.startJavaFile(generator.getNaming().inputEnum, domain, name);
|
||||
FileUpdater fileUpdater = generator.startJavaFile(generator.naming.inputEnum, domain, name);
|
||||
fileUpdater.out.doc(type.description());
|
||||
Enums.appendEnums(enumConstants, generator.getNaming().inputEnum.getShortName(name), true, fileUpdater.out);
|
||||
Enums.appendEnums(enumConstants, generator.naming.inputEnum.getShortName(name), true, fileUpdater.out);
|
||||
fileUpdater.update();
|
||||
}
|
||||
|
||||
@@ -246,7 +314,6 @@ class DomainGenerator {
|
||||
final ClassNameScheme nameScheme, final TypeData.Direction direction) {
|
||||
final String name = type.id();
|
||||
final NamePath typedefJavaName = nameScheme.getFullName(domain.domain(), name);
|
||||
final List<TextOutput> deferredWriters = new ArrayList<>();
|
||||
final BoxableType actualJavaType = target.resolve(new StandaloneTypeBinding.Target.ResolveContext() {
|
||||
@Override
|
||||
public BoxableType generateNestedObject(String shortName, String description, List<ProtocolMetaModel.ObjectProperty> properties) {
|
||||
@@ -261,7 +328,6 @@ class DomainGenerator {
|
||||
case OUTPUT:
|
||||
TextOutput out = new TextOutput(new StringBuilder());
|
||||
generateOutputClass(out, classNamePath, description, null, null, properties);
|
||||
deferredWriters.add(out);
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException();
|
||||
@@ -288,10 +354,10 @@ class DomainGenerator {
|
||||
}
|
||||
|
||||
private void generateEvenData(final ProtocolMetaModel.Event event) throws IOException {
|
||||
String className = generator.getNaming().eventData.getShortName(event.name());
|
||||
FileUpdater fileUpdater = generator.startJavaFile(generator.getNaming().eventData, domain, event.name());
|
||||
String className = generator.naming.eventData.getShortName(event.name());
|
||||
FileUpdater fileUpdater = generator.startJavaFile(generator.naming.eventData, domain, event.name());
|
||||
final String domainName = domain.domain();
|
||||
final CharSequence fullName = generator.getNaming().eventData.getFullName(domainName, event.name()).getFullText();
|
||||
final CharSequence fullName = generator.naming.eventData.getFullName(domainName, event.name()).getFullText();
|
||||
generateJsonProtocolInterface(fileUpdater.out, className, event.description(), event.parameters(), new TextOutConsumer() {
|
||||
@Override
|
||||
public void append(TextOutput out) {
|
||||
@@ -300,8 +366,8 @@ class DomainGenerator {
|
||||
out.append("(\"").append(domainName).append('.').append(event.name()).append("\", ").append(fullName).append(".class)").openBlock();
|
||||
{
|
||||
out.append("@Override").newLine().append("public ").append(fullName).append(" read(");
|
||||
out.append(generator.getNaming().inputPackage).append('.').append(Generator.READER_INTERFACE_NAME + " protocolReader, ").append(Util.JSON_READER_PARAMETER_DEF).append(")").openBlock();
|
||||
out.append("return protocolReader.").append(generator.getNaming().eventData.getParseMethodName(domainName, event.name())).append("(reader);").closeBlock();
|
||||
out.append(generator.naming.inputPackage).append('.').append(Generator.READER_INTERFACE_NAME + " protocolReader, ").append(Util.JSON_READER_PARAMETER_DEF).append(")").openBlock();
|
||||
out.append("return protocolReader.").append(generator.naming.eventData.getParseMethodName(domainName, event.name())).append("(reader);").closeBlock();
|
||||
}
|
||||
out.closeBlock();
|
||||
out.semi();
|
||||
@@ -315,7 +381,7 @@ class DomainGenerator {
|
||||
out.doc(description);
|
||||
}
|
||||
out.append("@org.jetbrains.jsonProtocol.JsonType").newLine().append("public interface ").append(className).openBlock();
|
||||
InputClassScope classScope = new InputClassScope(this, new NamePath(className, new NamePath(ClassNameScheme.getPackageName(generator.getNaming().inputPackage, domain.domain()))));
|
||||
InputClassScope classScope = new InputClassScope(this, new NamePath(className, new NamePath(ClassNameScheme.getPackageName(generator.naming.inputPackage, domain.domain()))));
|
||||
if (additionalMembersText != null) {
|
||||
classScope.addMember(additionalMembersText);
|
||||
}
|
||||
|
||||
+6
-10
@@ -25,17 +25,13 @@ class Generator {
|
||||
final TypeMap typeMap = new TypeMap();
|
||||
|
||||
private final FileSet fileSet;
|
||||
private final Naming naming;
|
||||
final Naming naming;
|
||||
|
||||
Generator(String outputDir, String rootPackage, String requestClassName) throws IOException {
|
||||
fileSet = new FileSet(FileSystems.getDefault().getPath(outputDir));
|
||||
naming = new Naming(rootPackage, requestClassName);
|
||||
}
|
||||
|
||||
public Naming getNaming() {
|
||||
return naming;
|
||||
}
|
||||
|
||||
public static final class Naming {
|
||||
public final ClassNameScheme params;
|
||||
public final ClassNameScheme additionalParam;
|
||||
@@ -172,7 +168,7 @@ class Generator {
|
||||
}
|
||||
|
||||
private void generateParserInterfaceList() throws IOException {
|
||||
FileUpdater fileUpdater = startJavaFile(getNaming().inputPackage, PARSER_INTERFACE_LIST_CLASS_NAME + ".java");
|
||||
FileUpdater fileUpdater = startJavaFile(naming.inputPackage, PARSER_INTERFACE_LIST_CLASS_NAME + ".java");
|
||||
// Write classes in stable order.
|
||||
Collections.sort(jsonProtocolParserClassNames);
|
||||
|
||||
@@ -189,7 +185,7 @@ class Generator {
|
||||
}
|
||||
|
||||
private void generateParserRoot(List<ParserRootInterfaceItem> parserRootInterfaceItems) throws IOException {
|
||||
FileUpdater fileUpdater = startJavaFile(getNaming().inputPackage, READER_INTERFACE_NAME + ".java");
|
||||
FileUpdater fileUpdater = startJavaFile(naming.inputPackage, READER_INTERFACE_NAME + ".java");
|
||||
// Write classes in stable order.
|
||||
Collections.sort(parserRootInterfaceItems);
|
||||
|
||||
@@ -217,7 +213,7 @@ class Generator {
|
||||
item.appendReadMethodName(out);
|
||||
out.append("(reader)").semi().newLine();
|
||||
}
|
||||
out.append("else throw new IllegalArgumentException(methodName)").semi();
|
||||
out.append("else return null").semi();
|
||||
out.closeBlock();
|
||||
|
||||
out.closeBlock();
|
||||
@@ -258,11 +254,11 @@ class Generator {
|
||||
return s;
|
||||
}
|
||||
|
||||
FileUpdater startJavaFile(ClassNameScheme nameScheme, Domain domain, String baseName) throws IOException {
|
||||
FileUpdater startJavaFile(@NotNull ClassNameScheme nameScheme, Domain domain, String baseName) throws IOException {
|
||||
return startJavaFile(nameScheme.getPackageNameVirtual(domain.domain()), nameScheme.getShortName(baseName) + ".java");
|
||||
}
|
||||
|
||||
private FileUpdater startJavaFile(String packageName, String filename) {
|
||||
public FileUpdater startJavaFile(@NotNull String packageName, @NotNull String filename) {
|
||||
FileUpdater fileUpdater = fileSet.createFileUpdater(packageName.replace('.', '/') + '/' + filename);
|
||||
fileUpdater.out.append("// Generated source").newLine().append("package ").append(packageName).semi().newLine().newLine();
|
||||
return fileUpdater;
|
||||
|
||||
+2
-2
@@ -21,7 +21,7 @@ class MyCreateStandaloneTypeBindingVisitorBase extends CreateStandaloneTypeBindi
|
||||
return new StandaloneTypeBinding() {
|
||||
@Override
|
||||
public BoxableType getJavaType() {
|
||||
return new StandaloneType(generator.generator.getNaming().additionalParam.getFullName(generator.domain.domain(), name), "writeMessage");
|
||||
return new StandaloneType(generator.generator.naming.additionalParam.getFullName(generator.domain.domain(), name), "writeMessage");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -70,6 +70,6 @@ class MyCreateStandaloneTypeBindingVisitorBase extends CreateStandaloneTypeBindi
|
||||
}
|
||||
}).getType());
|
||||
}
|
||||
}, generator.generator.getNaming().outputTypedef, TypeData.Direction.OUTPUT);
|
||||
}, generator.generator.naming.outputTypedef, TypeData.Direction.OUTPUT);
|
||||
}
|
||||
}
|
||||
|
||||
+39
-26
@@ -10,11 +10,11 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
class OutputClassScope extends ClassScope {
|
||||
OutputClassScope(DomainGenerator generator, NamePath classNamePath) {
|
||||
OutputClassScope(@NotNull DomainGenerator generator, @NotNull NamePath classNamePath) {
|
||||
super(generator, classNamePath);
|
||||
}
|
||||
|
||||
<P extends ItemDescriptor.Named> void generate(TextOutput out, List<P> parameters) {
|
||||
<P extends ItemDescriptor.Named> void generate(@NotNull TextOutput out, @Nullable List<P> parameters) {
|
||||
if (parameters == null) {
|
||||
return;
|
||||
}
|
||||
@@ -108,9 +108,9 @@ class OutputClassScope extends ClassScope {
|
||||
}
|
||||
}
|
||||
|
||||
private <P extends ItemDescriptor.Named> void generateConstructor(@NotNull TextOutput out, @NotNull List<P> mandatoryParameters, @Nullable BoxableType[] mandatoryParameterTypes) {
|
||||
private <P extends ItemDescriptor.Named> void generateConstructor(@NotNull TextOutput out, @NotNull List<P> parameters, @Nullable BoxableType[] parameterTypes) {
|
||||
boolean hasDoc = false;
|
||||
for (P parameter : mandatoryParameters) {
|
||||
for (P parameter : parameters) {
|
||||
if (parameter.description() != null) {
|
||||
hasDoc = true;
|
||||
break;
|
||||
@@ -118,7 +118,7 @@ class OutputClassScope extends ClassScope {
|
||||
}
|
||||
if (hasDoc) {
|
||||
out.append("/**").newLine();
|
||||
for (P parameter : mandatoryParameters) {
|
||||
for (P parameter : parameters) {
|
||||
if (parameter.description() != null) {
|
||||
out.append(" * @param " + parameter.name() + ' ' + parameter.description()).newLine();
|
||||
}
|
||||
@@ -127,37 +127,50 @@ class OutputClassScope extends ClassScope {
|
||||
}
|
||||
out.append("public " + getShortClassName() + '(');
|
||||
|
||||
if (mandatoryParameterTypes == null) {
|
||||
mandatoryParameterTypes = new BoxableType[mandatoryParameters.size()];
|
||||
if (parameterTypes == null) {
|
||||
parameterTypes = new BoxableType[parameters.size()];
|
||||
}
|
||||
for (int i = 0, length = mandatoryParameterTypes.length; i < length; i++) {
|
||||
assert mandatoryParameterTypes != null;
|
||||
if (mandatoryParameterTypes[i] == null) {
|
||||
P parameter = mandatoryParameters.get(i);
|
||||
mandatoryParameterTypes[i] = new OutputMemberScope(parameter.name()).resolveType(parameter).getType();
|
||||
writeMethodParameters(out, parameters, parameterTypes);
|
||||
out.append(')');
|
||||
|
||||
out.openBlock(false);
|
||||
writeWriteCalls(out, parameters, parameterTypes, null);
|
||||
out.closeBlock();
|
||||
}
|
||||
|
||||
<P extends ItemDescriptor.Named> void writeWriteCalls(@NotNull TextOutput out, @NotNull List<P> parameters, @NotNull BoxableType[] parameterTypes, @Nullable String qualifier) {
|
||||
for (int i = 0, size = parameters.size(); i < size; i++) {
|
||||
out.newLine();
|
||||
|
||||
if (qualifier != null) {
|
||||
out.append(qualifier).append('.');
|
||||
}
|
||||
|
||||
P parameter = parameters.get(i);
|
||||
appendWriteValueInvocation(out, parameter, parameter.name(), parameterTypes[i]);
|
||||
}
|
||||
}
|
||||
|
||||
<P extends ItemDescriptor.Named> void writeMethodParameters(@NotNull TextOutput out, @NotNull List<P> parameters, @NotNull BoxableType[] parameterTypes) {
|
||||
for (int i = 0, length = parameterTypes.length; i < length; i++) {
|
||||
if (parameterTypes[i] == null) {
|
||||
P parameter = parameters.get(i);
|
||||
parameterTypes[i] = new OutputMemberScope(parameter.name()).resolveType(parameter).getType();
|
||||
}
|
||||
}
|
||||
|
||||
boolean needComa = false;
|
||||
for (int i = 0, size = mandatoryParameters.size(); i < size; i++) {
|
||||
P parameter = mandatoryParameters.get(i);
|
||||
for (int i = 0, size = parameters.size(); i < size; i++) {
|
||||
if (needComa) {
|
||||
out.comma();
|
||||
}
|
||||
else {
|
||||
needComa = true;
|
||||
}
|
||||
|
||||
assert mandatoryParameterTypes != null;
|
||||
out.append(mandatoryParameterTypes[i].getShortText(getClassContextNamespace()));
|
||||
out.space().append(parameter.name());
|
||||
needComa = true;
|
||||
out.append(parameterTypes[i].getShortText(getClassContextNamespace()));
|
||||
out.space().append(parameters.get(i).name());
|
||||
}
|
||||
out.append(")").openBlock(false);
|
||||
for (int i = 0, size = mandatoryParameters.size(); i < size; i++) {
|
||||
P parameter = mandatoryParameters.get(i);
|
||||
out.newLine();
|
||||
assert mandatoryParameterTypes != null;
|
||||
appendWriteValueInvocation(out, parameter, parameter.name(), mandatoryParameterTypes[i]);
|
||||
}
|
||||
out.closeBlock();
|
||||
}
|
||||
|
||||
private void appendWriteValueInvocation(TextOutput out, ItemDescriptor.Named parameter, String valueRefName, @Nullable BoxableType type) {
|
||||
|
||||
+1
-1
@@ -56,7 +56,7 @@ public abstract class OutMessage {
|
||||
}
|
||||
}
|
||||
|
||||
protected final void writeInt(String name, int value) {
|
||||
public final void writeInt(String name, int value) {
|
||||
try {
|
||||
beginArguments();
|
||||
writer.name(name).value(value);
|
||||
|
||||
+10
-8
@@ -1,5 +1,7 @@
|
||||
package org.jetbrains.protocolReader;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
class ExistingSubtypeAspect {
|
||||
private SubtypeCaster subtypeCaster;
|
||||
private final TypeRef<?> jsonSuperClass;
|
||||
@@ -12,34 +14,34 @@ class ExistingSubtypeAspect {
|
||||
this.subtypeCaster = subtypeCaster;
|
||||
}
|
||||
|
||||
void writeGetSuperMethodJava(TextOutput out) {
|
||||
void writeGetSuperMethodJava(@NotNull TextOutput out) {
|
||||
out.newLine().append("@Override").newLine().append("public ").append(jsonSuperClass.get().getTypeClass().getCanonicalName() ).append(" getSuper()").openBlock();
|
||||
out.append("return ").append(Util.BASE_VALUE_PREFIX).semi().closeBlock();
|
||||
}
|
||||
|
||||
void writeSuperFieldJava(TextOutput out) {
|
||||
void writeSuperFieldJava(@NotNull TextOutput out) {
|
||||
out.newLine().append("private final ").append(jsonSuperClass.get().getTypeClass().getCanonicalName()).append(' ').append(Util.BASE_VALUE_PREFIX).semi().newLine();
|
||||
}
|
||||
|
||||
void writeSuperConstructorParamJava(TextOutput out) {
|
||||
void writeSuperConstructorParamJava(@NotNull TextOutput out) {
|
||||
out.comma().append(jsonSuperClass.get().getTypeClass().getCanonicalName()).append(' ').append(Util.BASE_VALUE_PREFIX);
|
||||
}
|
||||
|
||||
void writeSuperConstructorInitialization(TextOutput out) {
|
||||
void writeSuperConstructorInitialization(@NotNull TextOutput out) {
|
||||
out.append("this.").append(Util.BASE_VALUE_PREFIX).append(" = ").append(Util.BASE_VALUE_PREFIX).append(';').newLine().newLine();
|
||||
}
|
||||
|
||||
void writeParseMethod(String className, ClassScope scope, TextOutput out) {
|
||||
out.newLine().append("public static ").append(className).space().append("parse").append("(").append(Util.JSON_READER_PARAMETER_DEF).append(')').openBlock();
|
||||
void writeParseMethod(@NotNull String className, @NotNull ClassScope scope, @NotNull TextOutput out) {
|
||||
out.newLine().append("public static ").append(className).space().append("parse").append('(').append(Util.JSON_READER_PARAMETER_DEF).append(", String name").append(')').openBlock();
|
||||
out.append("return ");
|
||||
jsonSuperClass.get().writeInstantiateCode(scope, out);
|
||||
out.append('(').append(Util.READER_NAME).append(')').append('.');
|
||||
out.append('(').append(Util.READER_NAME).append(", name)").append('.');
|
||||
subtypeCaster.writeJava(out);
|
||||
out.semi().closeBlock();
|
||||
out.newLine();
|
||||
}
|
||||
|
||||
public void writeInstantiateCode(String className, TextOutput out) {
|
||||
public void writeInstantiateCode(@NotNull String className, @NotNull TextOutput out) {
|
||||
out.append(className).append(".parse");
|
||||
}
|
||||
}
|
||||
|
||||
+6
-2
@@ -25,10 +25,14 @@ class FileUpdater {
|
||||
}
|
||||
|
||||
void update() throws IOException {
|
||||
if (builder.length() == 0) {
|
||||
Files.delete(file);
|
||||
return;
|
||||
}
|
||||
|
||||
byte[] newContent = builder.toString().getBytes(StandardCharsets.UTF_8);
|
||||
if (Files.exists(file)) {
|
||||
byte[] oldContent = Files.readAllBytes(file);
|
||||
if (Arrays.equals(oldContent, newContent)) {
|
||||
if (Arrays.equals(Files.readAllBytes(file), newContent)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user