Commit ddcf5bb2 authored by Andrew Twyman's avatar Andrew Twyman Committed by GitHub

Merge pull request #273 from konovalov-aleks/fix_relative_paths_bug

Fixed import guard when using relative file paths
parents 6c869e1f 7300e57a
......@@ -266,31 +266,37 @@ def parseExternFile(externFile: File, inFileListWriter: Option[Writer]) : Seq[Ty
}
}
def normalizePath(path: File) : File = {
return new File(java.nio.file.Paths.get(path.toString()).normalize().toString())
}
def parseFile(idlFile: File, inFileListWriter: Option[Writer]): Seq[TypeDecl] = {
val normalizedIdlFile = normalizePath(idlFile)
if (inFileListWriter.isDefined) {
inFileListWriter.get.write(idlFile + "\n")
inFileListWriter.get.write(normalizedIdlFile + "\n")
}
visitedFiles.add(idlFile)
fileStack.push(idlFile)
val fin = new FileInputStream(idlFile)
visitedFiles.add(normalizedIdlFile)
fileStack.push(normalizedIdlFile)
val fin = new FileInputStream(normalizedIdlFile)
try {
parse(idlFile.getName, new InputStreamReader(fin, "UTF-8")) match {
parse(normalizedIdlFile.getName, new InputStreamReader(fin, "UTF-8")) match {
case Left(err) =>
System.err.println(err)
System.exit(1); return null;
case Right(idl) => {
var types = idl.typeDecls
idl.imports.foreach(x => {
if (fileStack.contains(x.file)) {
val normalized = normalizePath(x.file)
if (fileStack.contains(normalized)) {
throw new AssertionError("Circular import detected!")
}
if (!visitedFiles.contains(x.file)) {
if (!visitedFiles.contains(normalized)) {
x match {
case IdlFileRef(file) =>
types = parseFile(file, inFileListWriter) ++ types
types = parseFile(normalized, inFileListWriter) ++ types
case ExternFileRef(file) =>
types = parseExternFile(file, inFileListWriter) ++ types
types = parseExternFile(normalized, inFileListWriter) ++ types
}
}
})
......
......@@ -14,3 +14,4 @@
@import "single_language_interfaces.djinni"
@import "extended_record.djinni"
@import "varnames.djinni"
@import "relative_paths.djinni"
@import "./date.djinni"
@import "../djinni/date.djinni"
@extern "./date.yaml"
......@@ -16,6 +16,7 @@ djinni/multiple_inheritance.djinni
djinni/single_language_interfaces.djinni
djinni/extended_record.djinni
djinni/varnames.djinni
djinni/relative_paths.djinni
djinni/date.djinni
djinni/date.yaml
djinni/duration.djinni
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment