Open GoogleCodeExporter opened 8 years ago
Please provide more specific instructions of what you would like to see
implemented.
Original comment by alr...@google.com
on 12 Feb 2012 at 10:20
I have the following organization:
protos
- <application>
- common
|- some.proto
the .protos from the application folder import the .protos from the common
folder.
1. If I import "../common/some.proto", protobufs_dt does not issue an error
which had me thinking that I had it right. However, compilation fails.
Initially I though that this is because the import path for 'some.proto' was
not included automatically by protobufs_dt. But it looks like protoc does not
compile imports of this sort even if you do provide all the right import paths.
2. However simply doing an 'import some.proto' works as long as all necessary
import paths are included. So I created my own protobufs compiler, which
includes all necessary paths automatically and compiles all my .protos as
required within eclipse. I assumed I could continue to use all other features
of protobufs_dt (syntax coloring etc.) but now the editor complains that
'some.proto' cannot be found hence marks the entire project with little red 'x'
icons.
Fix suggestion: Let the 'root folder' be configurable > let protobufs_dt look
for all necessary imports from the 'root folder' > then let it include all
these necessary import paths during compilations. And the editor can do a
similar traversal from 'root folder' and not complain about 'not finding
imports' (since it has found the .protos somewhere in the root folder sub-tree
and since it knows that the integrated compiler will use similar logic)
Here is the code that I wrote (it is quite clunky and not tested but it works
for basic cases - maybe you can improve on this? my code is written to compile
all protos each time I run.)
/**
* Get map of subdirectories and their .proto files
*
* @param currentDir Current directory being processed
* @param directoriesAndProtos HashMap of all subdirectories (including passed in currentDir) and .proto files in those directories
* @return directoriesAndProtos
*/
protected static HashMap<String, ArrayList<String>> getSubDirectoriesAndProtoFiles(File currentDir, HashMap<String,ArrayList<String>> directoriesAndProtos) {
if (currentDir.isDirectory()) {
//check if directory has any .proto files
File[] fileList = currentDir.listFiles();
if(fileList!=null) {
ArrayList<String>protoFiles = null;
for (File file: fileList){
String fileName = file.getAbsolutePath();
int fileNameLen=fileName.length();
if (fileName.substring(fileNameLen-6, fileNameLen).equals(".proto")){
if (protoFiles==null)
protoFiles = new ArrayList<String>();
protoFiles.add(fileName);
}
}
//add directory name to list of possible import locations and add .proto files
if (protoFiles!=null){
directoriesAndProtos.put(currentDir.getAbsolutePath(),protoFiles);
}
//retrieve list of files and directory under this directory
for (File file: fileList)
getSubDirectoriesAndProtoFiles(file,directoriesAndProtos);
}
}
return directoriesAndProtos;
}
Original comment by kushel...@gmail.com
on 15 Mar 2012 at 6:22
I'm sorry I missed the last comment.
Original comment by alr...@google.com
on 24 Oct 2012 at 5:45
Original issue reported on code.google.com by
liuji...@gmail.com
on 17 Jan 2012 at 4:40