All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.javascript.jscomp.ByPathWarningsGuard Maven / Gradle / Ivy

/*
 * Copyright 2008 The Closure Compiler Authors.
 *
 * 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.javascript.jscomp;

import static com.google.common.base.Preconditions.checkArgument;

import java.util.List;

/**
 * An implementation of a {@link WarningsGuard} that can modify the
 * {@link CheckLevel} based on the file that caused the warning, and whether
 * this file matches a set of paths (specified either as include or exclude
 * of path name parts).
 *
 * 

For example: *

 * List<String> paths = new ArrayList<String>();
 * paths.add("foo");
 * WarningsGuard guard =
 *     ByPathWarningsGuard.forPath(paths, CheckLevel.ERROR, 1);
 * 
* * This guard will convert any warning that came from a file that contains "foo" * in its path to an error. */ public final class ByPathWarningsGuard extends WarningsGuard { private static final long serialVersionUID = 1L; private final List paths; private final boolean include; private final int priority; private final CheckLevel level; /** * Constructs a new instance. The priority is determined by the * {@link CheckLevel}: ERROR have Priority.STRICT, and OFF have priority * FILTER_BY_PATH. * * Use {@link #forPath} or {@link #exceptPath} to actually create a new * instance. */ private ByPathWarningsGuard( List paths, boolean include, CheckLevel level) { checkArgument(paths != null); checkArgument(level == CheckLevel.OFF || level == CheckLevel.ERROR); this.paths = paths; this.include = include; this.level = level; this.priority = level == CheckLevel.ERROR ? WarningsGuard.Priority.STRICT.value : WarningsGuard.Priority.FILTER_BY_PATH.value; } /** * @param paths Paths for matching. * @param level The {@link CheckLevel} to apply on affected files. * @return a new {@link ByPathWarningsGuard} that would affect any file in the * given set of paths. */ public static ByPathWarningsGuard forPath( List paths, CheckLevel level) { return new ByPathWarningsGuard(paths, true, level); } /** * @param paths Paths for matching. * @param level The {@link CheckLevel} to apply on affected files. * @return a new {@link ByPathWarningsGuard} that would affect any file not * in the given set of paths. */ public static ByPathWarningsGuard exceptPath( List paths, CheckLevel level) { return new ByPathWarningsGuard(paths, false, level); } @Override public CheckLevel level(JSError error) { final String errorPath = error.getSourceName(); CheckLevel defaultLevel = error.getDefaultLevel(); if (defaultLevel != CheckLevel.ERROR && errorPath != null) { boolean inPath = false; for (String path : paths) { inPath |= errorPath.contains(path); } if (inPath == include) { return level; } } return null; } @Override protected int getPriority() { return priority; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy