-
Notifications
You must be signed in to change notification settings - Fork 873
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
#796 Changed sequence of Yarn execution arguments, to make the proxy …
…settings appear at the correct location.
- Loading branch information
Showing
3 changed files
with
78 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
74 changes: 74 additions & 0 deletions
74
...core/src/main/java/com/github/eirslett/maven/plugins/frontend/lib/YarnArgumentParser.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
package com.github.eirslett.maven.plugins.frontend.lib; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Collections; | ||
import java.util.LinkedList; | ||
import java.util.List; | ||
|
||
class YarnArgumentsParser { | ||
|
||
private final List<String> additionalArguments; | ||
|
||
YarnArgumentsParser() { | ||
this(Collections.<String>emptyList()); | ||
} | ||
|
||
YarnArgumentsParser(List<String> additionalArguments) { | ||
this.additionalArguments = additionalArguments; | ||
} | ||
|
||
/** | ||
* Parses a given string of arguments, splitting it by characters that are whitespaces according to {@link Character#isWhitespace(char)}. | ||
* <p> | ||
* This method respects quoted arguments. Meaning that whitespaces appearing phrases that are enclosed by an opening | ||
* single or double quote and a closing single or double quote or the end of the string will not be considered. | ||
* <p> | ||
* All characters excluding whitespaces considered for splitting stay in place. | ||
* <p> | ||
* Examples: | ||
* "foo bar" will be split to ["foo", "bar"] | ||
* "foo \"bar foobar\"" will be split to ["foo", "\"bar foobar\""] | ||
* "foo 'bar" will be split to ["foo", "'bar"] | ||
* | ||
* @param args a string of arguments | ||
* @return an mutable copy of the list of all arguments | ||
*/ | ||
List<String> parse(String args) { | ||
if (args == null || "null".equals(args) || args.isEmpty()) { | ||
return Collections.emptyList(); | ||
} | ||
|
||
final List<String> arguments = new LinkedList<>(); | ||
|
||
for (String argument : this.additionalArguments) { | ||
ArgumentsParser.addArgument(argument, arguments); | ||
} | ||
|
||
final StringBuilder argumentBuilder = new StringBuilder(); | ||
Character quote = null; | ||
|
||
for (int i = 0, l = args.length(); i < l; i++) { | ||
char c = args.charAt(i); | ||
|
||
if (Character.isWhitespace(c) && quote == null) { | ||
ArgumentsParser.addArgument(argumentBuilder, arguments); | ||
continue; | ||
} else if (c == '"' || c == '\'') { | ||
// explicit boxing allows us to use object caching of the Character class | ||
Character currentQuote = Character.valueOf(c); | ||
if (quote == null) { | ||
quote = currentQuote; | ||
} else if (quote.equals(currentQuote)){ | ||
quote = null; | ||
} // else | ||
// we ignore the case when a quoted argument contains the other kind of quote | ||
} | ||
|
||
argumentBuilder.append(c); | ||
} | ||
|
||
ArgumentsParser.addArgument(argumentBuilder, arguments); | ||
|
||
return new ArrayList<>(arguments); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters