Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(43)

Side by Side Diff: lib/file_generator.dart

Issue 93743006: Use package names as import prefixes when generating code (Closed) Base URL: https://github.com/dart-lang/dart-protoc-plugin.git@master
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of protoc; 5 part of protoc;
6 6
7 class FileGenerator implements ProtobufContainer { 7 class FileGenerator implements ProtobufContainer {
8 final FileDescriptorProto _fileDescriptor; 8 final FileDescriptorProto _fileDescriptor;
9 final ProtobufContainer _parent; 9 final ProtobufContainer _parent;
10 final GenerationContext _context; 10 final GenerationContext _context;
(...skipping 10 matching lines...) Expand all
21 } 21 }
22 for (DescriptorProto messageType in _fileDescriptor.messageType) { 22 for (DescriptorProto messageType in _fileDescriptor.messageType) {
23 messageGenerators.add(new MessageGenerator(messageType, this, _context)); 23 messageGenerators.add(new MessageGenerator(messageType, this, _context));
24 } 24 }
25 for (FieldDescriptorProto extension in _fileDescriptor.extension) { 25 for (FieldDescriptorProto extension in _fileDescriptor.extension) {
26 extensionGenerators.add( 26 extensionGenerators.add(
27 new ExtensionGenerator(extension, this, _context)); 27 new ExtensionGenerator(extension, this, _context));
28 } 28 }
29 } 29 }
30 30
31 String get package => _fileDescriptor.package;
31 String get classname => ''; 32 String get classname => '';
32 String get fqname => '.${_fileDescriptor.package}'; 33 String get fqname => '.${_fileDescriptor.package}';
33 34
34 // Extract the filename from a URI and remove the extension. 35 // Extract the filename from a URI and remove the extension.
35 String _fileNameWithoutExtension(Uri filePath) { 36 String _fileNameWithoutExtension(Uri filePath) {
36 String fileName = filePath.pathSegments.last; 37 String fileName = filePath.pathSegments.last;
37 int index = fileName.lastIndexOf("."); 38 int index = fileName.lastIndexOf(".");
38 return index == -1 ? fileName : fileName.substring(0, index); 39 return index == -1 ? fileName : fileName.substring(0, index);
39 } 40 }
40 41
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 ); 122 );
122 123
123 for (String import in _fileDescriptor.dependency) { 124 for (String import in _fileDescriptor.dependency) {
124 Uri importPath = new Uri.file(import); 125 Uri importPath = new Uri.file(import);
125 if (importPath.isAbsolute) { 126 if (importPath.isAbsolute) {
126 // protoc should never generate an import with an absolute path. 127 // protoc should never generate an import with an absolute path.
127 throw("FAILURE: Import with absolute path is not supported"); 128 throw("FAILURE: Import with absolute path is not supported");
128 } 129 }
129 // Create a relative path from the current file to the import. 130 // Create a relative path from the current file to the import.
130 Uri relativeProtoPath = _relative(importPath, filePath); 131 Uri relativeProtoPath = _relative(importPath, filePath);
131 out.println("import '${_generatedFilePath(relativeProtoPath)}';"); 132 // Find the file generator for this import as it contains the
133 // package name.
134 FileGenerator fileGenerator = _context.lookupFile(import);
135 out.println("import '${_generatedFilePath(relativeProtoPath)}'");
Siggi Cherem (dart-lang) 2013/12/20 18:27:36 remove new line
Søren Gjesse 2014/01/02 08:52:33 Done.
136 if (package != fileGenerator.package) {
137 out.println(' as ${fileGenerator.package}');
Siggi Cherem (dart-lang) 2013/12/20 18:27:36 and here? (println -> print)?
Søren Gjesse 2014/01/02 08:52:33 Done.
138 }
139 out.println(';');
132 } 140 }
133 out.println(''); 141 out.println('');
134 142
135 // Initialize Field. 143 // Initialize Field.
136 for (MessageGenerator m in messageGenerators) { 144 for (MessageGenerator m in messageGenerators) {
137 m.initializeFields(); 145 m.initializeFields();
138 } 146 }
139 147
140 // Generate code. 148 // Generate code.
141 for (EnumGenerator e in enumGenerators) { 149 for (EnumGenerator e in enumGenerators) {
(...skipping 20 matching lines...) Expand all
162 out.println('}'); 170 out.println('}');
163 }); 171 });
164 } 172 }
165 } 173 }
166 } 174 }
167 175
168 class GenerationContext { 176 class GenerationContext {
169 final GenerationOptions options; 177 final GenerationOptions options;
170 final Map<String, ProtobufContainer> _registry = 178 final Map<String, ProtobufContainer> _registry =
171 <String, ProtobufContainer>{}; 179 <String, ProtobufContainer>{};
180 final Map<String, FileGenerator> _files =
181 <String, FileGenerator>{};
172 182
173 GenerationContext(this.options); 183 GenerationContext(this.options);
174 184
175 void register(ProtobufContainer container) { 185 void register(ProtobufContainer container) {
176 _registry[container.fqname] = container; 186 _registry[container.fqname] = container;
187 if (container is FileGenerator) {
188 _files[container._fileDescriptor.name] = container;
189 }
177 } 190 }
178 191
179 ProtobufContainer operator [](String fqname) => _registry[fqname]; 192 ProtobufContainer operator [](String fqname) => _registry[fqname];
193
194 FileGenerator lookupFile(String name) => _files[name];
180 } 195 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698