| /* |
| * Copyright (C) 2011 The Android Open Source Project |
| * |
| * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php |
| * |
| * 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.android.ide.eclipse.adt.internal.resources; |
| |
| import com.android.annotations.Nullable; |
| import com.android.ide.eclipse.adt.internal.editors.layout.gle2.IncludeFinder; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.jface.dialogs.IInputValidator; |
| |
| import java.util.Collection; |
| |
| /** A validator which checks for cyclic dependencies */ |
| public class CyclicDependencyValidator implements IInputValidator { |
| private final Collection<String> mInvalidIds; |
| |
| private CyclicDependencyValidator(Collection<String> invalid) { |
| this.mInvalidIds = invalid; |
| } |
| |
| @Override |
| public String isValid(String newText) { |
| if (mInvalidIds.contains(newText)) { |
| return "Cyclic include, not valid"; |
| } |
| return null; |
| } |
| |
| /** |
| * Creates a validator which ensures that the chosen id is not for a layout that is |
| * directly or indirectly including the given layout. Used to avoid cyclic |
| * dependencies when offering layouts to be included within a given file, etc. |
| * |
| * @param file the target file that candidate layouts should not directly or |
| * indirectly include |
| * @return a validator which checks whether resource ids are valid or whether they |
| * could result in a cyclic dependency |
| */ |
| @Nullable |
| public static IInputValidator create(@Nullable IFile file) { |
| if (file == null) { |
| return null; |
| } |
| |
| IProject project = file.getProject(); |
| IncludeFinder includeFinder = IncludeFinder.get(project); |
| final Collection<String> invalid = |
| includeFinder.getInvalidIncludes(file); |
| |
| return new CyclicDependencyValidator(invalid); |
| } |
| } |