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 ...@@ -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] = { def parseFile(idlFile: File, inFileListWriter: Option[Writer]): Seq[TypeDecl] = {
val normalizedIdlFile = normalizePath(idlFile)
if (inFileListWriter.isDefined) { if (inFileListWriter.isDefined) {
inFileListWriter.get.write(idlFile + "\n") inFileListWriter.get.write(normalizedIdlFile + "\n")
} }
visitedFiles.add(idlFile) visitedFiles.add(normalizedIdlFile)
fileStack.push(idlFile) fileStack.push(normalizedIdlFile)
val fin = new FileInputStream(idlFile) val fin = new FileInputStream(normalizedIdlFile)
try { try {
parse(idlFile.getName, new InputStreamReader(fin, "UTF-8")) match { parse(normalizedIdlFile.getName, new InputStreamReader(fin, "UTF-8")) match {
case Left(err) => case Left(err) =>
System.err.println(err) System.err.println(err)
System.exit(1); return null; System.exit(1); return null;
case Right(idl) => { case Right(idl) => {
var types = idl.typeDecls var types = idl.typeDecls
idl.imports.foreach(x => { idl.imports.foreach(x => {
if (fileStack.contains(x.file)) { val normalized = normalizePath(x.file)
if (fileStack.contains(normalized)) {
throw new AssertionError("Circular import detected!") throw new AssertionError("Circular import detected!")
} }
if (!visitedFiles.contains(x.file)) { if (!visitedFiles.contains(normalized)) {
x match { x match {
case IdlFileRef(file) => case IdlFileRef(file) =>
types = parseFile(file, inFileListWriter) ++ types types = parseFile(normalized, inFileListWriter) ++ types
case ExternFileRef(file) => case ExternFileRef(file) =>
types = parseExternFile(file, inFileListWriter) ++ types types = parseExternFile(normalized, inFileListWriter) ++ types
} }
} }
}) })
......
...@@ -14,3 +14,4 @@ ...@@ -14,3 +14,4 @@
@import "single_language_interfaces.djinni" @import "single_language_interfaces.djinni"
@import "extended_record.djinni" @import "extended_record.djinni"
@import "varnames.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 ...@@ -16,6 +16,7 @@ djinni/multiple_inheritance.djinni
djinni/single_language_interfaces.djinni djinni/single_language_interfaces.djinni
djinni/extended_record.djinni djinni/extended_record.djinni
djinni/varnames.djinni djinni/varnames.djinni
djinni/relative_paths.djinni
djinni/date.djinni djinni/date.djinni
djinni/date.yaml djinni/date.yaml
djinni/duration.djinni 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