Permalink
Browse files

Merge branch 'dev'

  • Loading branch information...
2 parents 1e6c45b + 8fc2afb commit 556fd07d95cd5e81d9e8dcbe9dace70077c7f1ba @scottfrazer scottfrazer committed with Scott Frazer Apr 16, 2014
View
@@ -9,7 +9,7 @@
<groupId>org.broadinstitute.compositetask</groupId>
<artifactId>Wdl</artifactId>
<packaging>jar</packaging>
- <version>0.0.2</version>
+ <version>0.0.3</version>
<name>Wdl</name>
<url>http://github.com/broadinstitute/wdl</url>
@@ -9,6 +9,8 @@
import java.util.LinkedHashSet;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import org.broadinstitute.parser.Ast;
import org.broadinstitute.parser.AstNode;
@@ -75,6 +77,20 @@ public Ast verify(AstNode wdl_ast) throws SyntaxError {
set_parents(CompositeTask.this);
+ Pattern expressionPattern = Pattern.compile("\\$\\{([^}]+)\\}");
+ for ( Map.Entry<String, Terminal> output_file : this.output_files.entrySet() ) {
+ Matcher matcher = expressionPattern.matcher(output_file.getValue().getSourceString());
+ while ( matcher.find() ) {
+ String filename_var = matcher.group(1);
+ for ( Map.Entry<CompositeTaskVariable, Terminal> step_output : this.output_variables.entrySet() ) {
+ String output_var = step_output.getKey().getName();
+ if ( output_var.equals(filename_var) ) {
+ throw new SyntaxError(this.syntaxErrorFormatter.variable_used_as_filename_and_step_output(output_file.getValue(), matcher.start(), step_output.getValue()));
+ }
+ }
+ }
+ }
+
return composite_task;
}
@@ -99,4 +99,14 @@ public String step_doesnt_use_loop_iterator(Terminal loop_iterator, Terminal ste
this.code.getLine(loop_iterator.getLine()) + "\n" + Utility.getIndentString(loop_iterator.getColumn()-1) + "^\n";
}
+ public String variable_used_as_filename_and_step_output(Terminal filename_var, int filename_var_offset, Terminal output_var) {
+ return String.format("Variable %s used to construct an output filename and also as an output variable. One of these variable names must change.\n\n", output_var.getSourceString()) +
+ String.format("Line %d, Column %d:\n", filename_var.getLine(), filename_var.getColumn()) +
+ this.code.getLine(filename_var.getLine()) + "\n" +
+ Utility.getIndentString(filename_var.getColumn() + filename_var_offset - 1) + "^\n" +
+ String.format("Line %d, Column %d:\n", output_var.getLine(), output_var.getColumn()) +
+ this.code.getLine(output_var.getLine()) + "\n" +
+ Utility.getIndentString(output_var.getColumn()-1) + "^\n";
+ }
+
}
@@ -0,0 +1,8 @@
+org.broadinstitute.parser.SyntaxError: Variable filtered_bam_name used to construct an output filename and also as an output variable. One of these variable names must change.
+
+Line 3, Column 18:
+ output: File("${filtered_bam_name}.bam") as filtered_bam_name;
+ ^
+Line 3, Column 49:
+ output: File("${filtered_bam_name}.bam") as filtered_bam_name;
+ ^
@@ -0,0 +1,8 @@
+composite_task CufflinksPipeline {
+ step FilterBamForAlignedReads[version=8] {
+ output: File("${filtered_bam_name}.bam") as filtered_bam_name;
+ }
+ step Cufflinks[version=29] {
+ input: input.bam=filtered_bam_name;
+ }
+}
@@ -0,0 +1,8 @@
+org.broadinstitute.parser.SyntaxError: Variable filtered_bam_name used to construct an output filename and also as an output variable. One of these variable names must change.
+
+Line 3, Column 18:
+ output: File("${abc}.${filtered_bam_name}.bam") as filtered_bam_name;
+ ^
+Line 3, Column 56:
+ output: File("${abc}.${filtered_bam_name}.bam") as filtered_bam_name;
+ ^
@@ -0,0 +1,8 @@
+composite_task CufflinksPipeline {
+ step FilterBamForAlignedReads[version=8] {
+ output: File("${abc}.${filtered_bam_name}.bam") as filtered_bam_name;
+ }
+ step Cufflinks[version=29] {
+ input: input.bam=filtered_bam_name;
+ }
+}
@@ -0,0 +1,8 @@
+org.broadinstitute.parser.SyntaxError: Variable xyz used to construct an output filename and also as an output variable. One of these variable names must change.
+
+Line 3, Column 18:
+ output: File("${abc}.${xyz}.bam") as filtered_bam_name,
+ ^
+Line 4, Column 35:
+ File("${abc}.bam") as xyz;
+ ^
@@ -0,0 +1,9 @@
+composite_task CufflinksPipeline {
+ step FilterBamForAlignedReads[version=8] {
+ output: File("${abc}.${xyz}.bam") as filtered_bam_name,
+ File("${abc}.bam") as xyz;
+ }
+ step Cufflinks[version=29] {
+ input: input.bam=xyz;
+ }
+}

0 comments on commit 556fd07

Please sign in to comment.