From ba50128769f5689a28b7db266fd1ceab364b79b3 Mon Sep 17 00:00:00 2001 From: Helin Shiah Date: Tue, 8 Feb 2022 19:44:40 +0000 Subject: [PATCH] Add script location to generated code message The previous message added to Java generated code was not helpful for finding the generating code. TEST=N/A Change-Id: Ie60202ac68e8790a422a47c6edfd75997cf32145 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/232024 Reviewed-by: Ben Konyi Commit-Queue: Ben Konyi --- .../service/consumer/BreakpointConsumer.java | 2 +- .../service/consumer/CpuSamplesConsumer.java | 2 +- pkg/vm_service/tool/generate.dart | 7 ++++- pkg/vm_service/tool/java/generate_java.dart | 29 ++++++++++++------- pkg/vm_service/tool/java/src_gen_java.dart | 13 +++++---- 5 files changed, 35 insertions(+), 18 deletions(-) diff --git a/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/BreakpointConsumer.java b/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/BreakpointConsumer.java index 7fdc2ddbc3c..b9b746f8066 100644 --- a/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/BreakpointConsumer.java +++ b/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/BreakpointConsumer.java @@ -13,7 +13,7 @@ */ package org.dartlang.vm.service.consumer; -// This is a generated file. +// This file is generated by the script: pkg/vm_service/tool/generate.dart in dart-lang/sdk. import org.dartlang.vm.service.element.Breakpoint; diff --git a/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/CpuSamplesConsumer.java b/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/CpuSamplesConsumer.java index 6bc5e2fe653..8b45e8a3942 100644 --- a/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/CpuSamplesConsumer.java +++ b/pkg/vm_service/java/src/org/dartlang/vm/service/consumer/CpuSamplesConsumer.java @@ -13,7 +13,7 @@ */ package org.dartlang.vm.service.consumer; -// This is a generated file. +// This file is generated by the script: pkg/vm_service/tool/generate.dart in dart-lang/sdk. import org.dartlang.vm.service.element.CpuSamples; diff --git a/pkg/vm_service/tool/generate.dart b/pkg/vm_service/tool/generate.dart index 79d74eb5c2c..e91c0f303ee 100644 --- a/pkg/vm_service/tool/generate.dart +++ b/pkg/vm_service/tool/generate.dart @@ -67,7 +67,12 @@ Future _generateDart(String appDirPath, List nodes) async { Future _generateJava(String appDirPath, List nodes) async { var srcDirPath = normalize(join(appDirPath, '..', 'java', 'src')); var generator = java.JavaGenerator(srcDirPath); - java.api = java.Api(); + + final scriptPath = Platform.script.toFilePath(); + final kSdk = '/sdk/'; + final scriptLocation = + scriptPath.substring(scriptPath.indexOf(kSdk) + kSdk.length); + java.api = java.Api(scriptLocation); java.api.parse(nodes); java.api.generate(generator); diff --git a/pkg/vm_service/tool/java/generate_java.dart b/pkg/vm_service/tool/java/generate_java.dart index 0f613716f46..9f48c0173be 100644 --- a/pkg/vm_service/tool/java/generate_java.dart +++ b/pkg/vm_service/tool/java/generate_java.dart @@ -101,11 +101,14 @@ class Api extends Member with ApiParseUtil { List enums = []; List types = []; Map> streamIdMap = {}; + final String scriptLocation; String? get docs => null; String get name => 'api'; + Api(this.scriptLocation); + void addProperty(String typeName, String propertyName, {String? javadoc}) { var t = types.firstWhere((t) => t!.name == typeName)!; for (var f in t.fields) { @@ -148,7 +151,8 @@ class Api extends Member with ApiParseUtil { } } - gen.writeType('$servicePackage.VmService', (TypeWriter writer) { + gen.writeType('$servicePackage.VmService', scriptLocation, + (TypeWriter writer) { writer.addImport('com.google.gson.JsonArray'); writer.addImport('com.google.gson.JsonObject'); writer.addImport('com.google.gson.JsonPrimitive'); @@ -311,11 +315,11 @@ class Api extends Member with ApiParseUtil { if (docs != null) docs = docs.trim(); if (definition.startsWith('class ')) { - types.add(Type(this, name, definition, docs)); + types.add(Type(this, scriptLocation, name, definition, docs)); } else if (name.substring(0, 1).toLowerCase() == name.substring(0, 1)) { - methods.add(Method(name, definition, docs)); + methods.add(Method(name, scriptLocation, definition, docs)); } else if (definition.startsWith('enum ')) { - enums.add(Enum(name, definition, docs)); + enums.add(Enum(name, scriptLocation, definition, docs)); } else { throw 'unexpected entity: ${name}, ${definition}'; } @@ -365,18 +369,19 @@ class Api extends Member with ApiParseUtil { class Enum extends Member { final String name; + final String scriptLocation; final String? docs; List enums = []; - Enum(this.name, String definition, [this.docs]) { + Enum(this.name, this.scriptLocation, String definition, [this.docs]) { _parse(Tokenizer(definition).tokenize()); } String get elementTypeName => '$servicePackage.element.$name'; void generateEnum(JavaGenerator gen) { - gen.writeType(elementTypeName, (TypeWriter writer) { + gen.writeType(elementTypeName, scriptLocation, (TypeWriter writer) { writer.javadoc = convertDocLinks(docs); writer.isEnum = true; enums.sort((v1, v2) => v1.name!.compareTo(v2.name!)); @@ -496,13 +501,14 @@ class MemberType extends Member { class Method extends Member { final String name; + final String scriptLocation; final String? docs; MemberType returnType = MemberType(); bool deprecated = false; List args = []; - Method(this.name, String definition, [this.docs]) { + Method(this.name, this.scriptLocation, String definition, [this.docs]) { _parse(Tokenizer(definition).tokenize()); } @@ -521,7 +527,7 @@ class Method extends Member { bool get hasOptionalArgs => args.any((MethodArg arg) => arg.optional); void generateConsumerInterface(JavaGenerator gen) { - gen.writeType(consumerTypeName, (TypeWriter writer) { + gen.writeType(consumerTypeName, scriptLocation, (TypeWriter writer) { writer.javadoc = convertDocLinks(returnType.docs); writer.interfaceNames.add('$servicePackage.consumer.Consumer'); writer.isInterface = true; @@ -752,13 +758,15 @@ class TextOutputVisitor implements NodeVisitor { class Type extends Member { final Api parent; + final String scriptLocation; String? rawName; String? name; String? superName; final String? docs; List fields = []; - Type(this.parent, String categoryName, String definition, [this.docs]) { + Type(this.parent, this.scriptLocation, String categoryName, String definition, + [this.docs]) { _parse(Tokenizer(definition).tokenize()); } @@ -787,7 +795,8 @@ class Type extends Member { api.types.toList()..retainWhere((t) => t!.superName == name); void generateElement(JavaGenerator gen) { - gen.writeType('$servicePackage.element.$name', (TypeWriter writer) { + gen.writeType('$servicePackage.element.$name', scriptLocation, + (TypeWriter writer) { if (fields.any((f) => f.type.types.any((t) => t.isArray))) { writer.addImport('com.google.gson.JsonObject'); } diff --git a/pkg/vm_service/tool/java/src_gen_java.dart b/pkg/vm_service/tool/java/src_gen_java.dart index a2e62e55ed0..4342380a6a1 100644 --- a/pkg/vm_service/tool/java/src_gen_java.dart +++ b/pkg/vm_service/tool/java/src_gen_java.dart @@ -57,8 +57,8 @@ class JavaGenerator { Iterable get allWrittenFiles => _generatedPaths; /// Generate a Java class/interface in the given package - void writeType(String typeName, WriteType write) { - var classWriter = TypeWriter(typeName); + void writeType(String typeName, scriptLocation, WriteType write) { + var classWriter = TypeWriter(typeName, scriptLocation); write(classWriter); var pkgDirPath = join(srcDirPath, joinAll(pkgNameFor(typeName).split('.'))); var pkgDir = Directory(pkgDirPath); @@ -123,10 +123,12 @@ class TypeWriter { final StringBuffer _content = StringBuffer(); final List _fields = []; final Map _methods = Map(); + final String scriptLocation; - TypeWriter(String typeName) + TypeWriter(String typeName, scriptLocation) : this.pkgName = pkgNameFor(typeName), - this.className = classNameFor(typeName); + this.className = classNameFor(typeName), + this.scriptLocation = scriptLocation; String get kind { if (isInterface) return 'interface'; @@ -263,7 +265,8 @@ class TypeWriter { if (fileHeader != null) buffer.write(fileHeader); buffer.writeln('package $pkgName;'); buffer.writeln(); - buffer.writeln('// This is a generated file.'); + buffer.writeln( + '// This file is generated by the script: ${scriptLocation} in dart-lang/sdk.'); buffer.writeln(); addImport(superclassName); interfaceNames.forEach((t) => addImport(t));