blob: bebba3c8fddef23e5eafe48745d34939b0439564 [file] [log] [blame]
/*
* Copyright 2016 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.dev.util.arg;
import com.google.gwt.util.tools.ArgHandler;
/**
* Add inclusion/exclusion patterns to the generation of JsInterop exports.
*/
public class ArgHandlerFilterJsInteropExports extends ArgHandler {
private final OptionGenerateJsInteropExports options;
public ArgHandlerFilterJsInteropExports(OptionGenerateJsInteropExports options) {
this.options = options;
}
@Override
public String getPurpose() {
return "Include/exclude members and classes while generating JsInterop exports."
+ " Flag could be set multiple times to expand the pattern."
+ " (The flag has only effect if exporting is enabled via -generateJsInteropExports)";
}
@Override
public String getTag() {
throw new UnsupportedOperationException();
}
@Override
public String[] getTags() {
return new String[] { "-includeJsInteropExports", "-excludeJsInteropExports" };
}
@Override
public String getHelpTag() {
return "-includeJsInteropExports/excludeJsInteropExports";
}
@Override
public String[] getTagArgs() {
return new String[] {"regex"};
}
@Override
public int handle(String[] args, int startIndex) {
if (startIndex + 1 >= args.length) {
return -1;
}
String tagName = args[startIndex];
boolean excludePattern = tagName.equals("-excludeJsInteropExports");
if (excludePattern && options.getJsInteropExportFilter().isEmpty()) {
System.err.println("-excludeJsInteropExports must be preceeded by -includeJsInteropExports");
return -1;
}
String regex = args[startIndex + 1];
if (regex.startsWith("+") || regex.startsWith("-")) {
System.err.println(tagName + " regex cannot start with '+' or '-'");
return -1;
}
try {
options.getJsInteropExportFilter().add(excludePattern ? "-" + regex : regex);
} catch (IllegalArgumentException e) {
System.err.println(tagName + " regex is invalid: " + e.getMessage());
return -1;
}
return 1;
}
}