blob: c3fa2ebe05c368d5646d5c666cb7d673b5415187 [file] [log] [blame]
/*
* Copyright 2000-2014 JetBrains s.r.o.
*
* 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.intellij.openapi.roots;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.module.JpsModuleSourceRootType;
import java.util.List;
import java.util.Set;
/**
* Interface providing root information model for a given module.
* It's implemented by {@link ModuleRootManager}.
*
* @author dsl
*/
public interface ModuleRootModel {
/**
* Returns the module to which the model belongs.
*
* @return the module instance.
*/
@NotNull
Module getModule();
/**
* Use this method to obtain all content entries of a module. Entries are given in
* lexicographical order of their paths.
*
* @return list of content entries for this module
* @see ContentEntry
*/
@NotNull
ContentEntry[] getContentEntries();
/**
* Use this method to obtain order of roots of a module. Order of entries is important.
*
* @return list of order entries for this module
*/
@NotNull
OrderEntry[] getOrderEntries();
/*
* Returns the SDK used by the module.
*
* @return either module-specific or inherited SDK
* @see #isSdkInherited()
*/
@Nullable
Sdk getSdk();
/**
* Returns <code>true</code> if SDK for this module is inherited from a project.
*
* @return true if the SDK is inherited, false otherwise
* @see ProjectRootManager#getProjectSdk()
* @see ProjectRootManager#setProjectSdk(com.intellij.openapi.projectRoots.Sdk)
*/
boolean isSdkInherited();
/**
* Returns an array of content roots from all content entries.
*
* @return the array of content roots.
* @see #getContentEntries()
*/
@NotNull
VirtualFile[] getContentRoots();
/**
* Returns an array of content root urls from all content entries.
*
* @return the array of content root URLs.
* @see #getContentEntries()
*/
@NotNull
String[] getContentRootUrls();
/**
* Returns an array of exclude roots from all content entries.
*
* @return the array of excluded roots.
* @see #getContentEntries()
*/
@NotNull
VirtualFile[] getExcludeRoots();
/**
* Returns an array of exclude root urls from all content entries.
*
* @return the array of excluded root URLs.
* @see #getContentEntries()
*/
@NotNull
String[] getExcludeRootUrls();
/**
* Returns an array of source roots from all content entries.
*
* @return the array of source roots.
* @see #getContentEntries()
* @see #getSourceRoots(boolean)
*/
@NotNull
VirtualFile[] getSourceRoots();
/**
* Returns an array of source roots from all content entries.
*
* @param includingTests determines whether test source roots should be included in the result
* @return the array of source roots.
* @see #getContentEntries()
* @since 10.0
*/
@NotNull
VirtualFile[] getSourceRoots(boolean includingTests);
/**
* Return a list of source roots of the specified type.
*
* @param rootType type of source roots
* @return list of source roots
*/
@NotNull
List<VirtualFile> getSourceRoots(@NotNull JpsModuleSourceRootType<?> rootType);
/**
* Return a list of source roots which types belong to the specified set.
*
* @param rootTypes types of source roots
* @return list of source roots
*/
@NotNull
List<VirtualFile> getSourceRoots(@NotNull Set<? extends JpsModuleSourceRootType<?>> rootTypes);
/**
* Returns an array of source root urls from all content entries.
*
* @return the array of source root URLs.
* @see #getContentEntries()
* @see #getSourceRootUrls(boolean)
*/
@NotNull
String[] getSourceRootUrls();
/**
* Returns an array of source root urls from all content entries.
*
* @param includingTests determines whether test source root urls should be included in the result
* @return the array of source root URLs.
* @see #getContentEntries()
* @since 10.0
*/
@NotNull
String[] getSourceRootUrls(boolean includingTests);
/**
* Passes all order entries in the module to the specified visitor.
*
* @param policy the visitor to accept.
* @param initialValue the default value to be returned by the visit process.
* @return the value returned by the visitor.
* @see OrderEntry#accept(RootPolicy, Object)
*/
<R> R processOrder(RootPolicy<R> policy, R initialValue);
/**
* Returns {@link OrderEnumerator} instance which can be used to process order entries of the module (with or without dependencies) and
* collect classes or source roots.
*
* @return {@link OrderEnumerator} instance
* @since 10.0
*/
@NotNull
OrderEnumerator orderEntries();
/**
* Returns list of module names <i>this module</i> depends on.
*
* @return the list of module names this module depends on.
*/
@NotNull
String[] getDependencyModuleNames();
<T> T getModuleExtension(Class<T> klass);
@NotNull
Module[] getModuleDependencies();
@NotNull
Module[] getModuleDependencies(boolean includeTests);
}