@Nullable @Override public PsiPackage resolvePackage( @NotNull PsiPackageManager packageManager, @NotNull VirtualFile virtualFile, @NotNull Class<? extends ModuleExtension> extensionClass, String qualifiedName) { ProjectFileIndex fileIndexFacade = ProjectFileIndex.SERVICE.getInstance(packageManager.getProject()); PsiManager psiManager = PsiManager.getInstance(packageManager.getProject()); if (fileIndexFacade.isInLibraryClasses(virtualFile)) { List<OrderEntry> orderEntriesForFile = fileIndexFacade.getOrderEntriesForFile(virtualFile); for (OrderEntry orderEntry : orderEntriesForFile) { Module ownerModule = orderEntry.getOwnerModule(); ModuleExtension extension = ModuleUtilCore.getExtension(ownerModule, extensionClass); if (extension != null) { for (PsiPackageSupportProvider p : PsiPackageSupportProvider.EP_NAME.getExtensions()) { if (p.isSupported(extension)) { return p.createPackage(psiManager, packageManager, extensionClass, qualifiedName); } } } } } return null; }
@Override public Collection<Module> getValidModules() { val list = new ArrayList<Module>(); for (val module : ModuleManager.getInstance(getProject()).getModules()) { if (ModuleUtilCore.getExtension(module, DotNetModuleExtension.class) != null) { list.add(module); } } return list; }
@Nullable @Override public RunProfileState getState( @NotNull Executor executor, @NotNull final ExecutionEnvironment executionEnvironment) throws ExecutionException { val module = getConfigurationModule().getModule(); if (module == null) { throw new ExecutionException("Module is null"); } DotNetModuleExtension<?> extension = ModuleUtilCore.getExtension(module, DotNetModuleExtension.class); if (extension == null) { throw new ExecutionException("Module don't have .NET extension"); } Sdk sdk = extension.getSdk(); if (sdk == null) { throw new ExecutionException("SDK for module is not defined"); } DebugConnectionInfo debugConnectionInfo = null; if (executor instanceof DefaultDebugExecutor) { debugConnectionInfo = new DebugConnectionInfo("127.0.0.1", -1, true); } DotNetConfiguration runProfile = (DotNetConfiguration) executionEnvironment.getRunProfile(); GeneralCommandLine runCommandLine = extension.createDefaultCommandLine(sdk, debugConnectionInfo); String programParameters = runProfile.getProgramParameters(); if (!StringUtil.isEmpty(programParameters)) { runCommandLine.addParameters(StringUtil.split(programParameters, " ")); } runCommandLine.setPassParentEnvironment(runProfile.isPassParentEnvs()); runCommandLine.getEnvironment().putAll(runProfile.getEnvs()); runCommandLine.setWorkDirectory( DotNetMacroUtil.expand(module, runProfile.getWorkingDirectory(), false)); DotNetRunProfileState state = new DotNetRunProfileState(executionEnvironment, runCommandLine); if (debugConnectionInfo != null) { state.putUserData(DotNetRunKeys.DEBUG_CONNECTION_INFO_KEY, debugConnectionInfo); } return state; }
private static void collectAllAndroidDependencies( Module module, boolean androidLibrariesOnly, List<AndroidModuleExtension> result, Set<AndroidModuleExtension> visited) { final OrderEntry[] entries = ModuleRootManager.getInstance(module).getOrderEntries(); // loop in the inverse order to resolve dependencies on the libraries, so that if a library // is required by two higher level libraries it can be inserted in the correct place for (int i = entries.length - 1; i >= 0; i--) { final OrderEntry orderEntry = entries[i]; if (orderEntry instanceof ModuleOrderEntry) { final ModuleOrderEntry moduleOrderEntry = (ModuleOrderEntry) orderEntry; if (moduleOrderEntry.getScope() == DependencyScope.COMPILE) { final Module depModule = moduleOrderEntry.getModule(); if (depModule != null) { final AndroidModuleExtension depFacet = ModuleUtilCore.getExtension(depModule, AndroidModuleExtension.class); if (depFacet != null && (!androidLibrariesOnly || depFacet.isLibraryProject()) && visited.add(depFacet)) { final List<WeakReference<AndroidModuleExtension>> cachedDepDeps = getInstance(depModule).getListRef(androidLibrariesOnly).get(); if (cachedDepDeps != null) { final List<AndroidModuleExtension> depDeps = dereference(cachedDepDeps); for (AndroidModuleExtension depDepFacet : depDeps) { if (visited.add(depDepFacet)) { result.add(depDepFacet); } } } else { collectAllAndroidDependencies(depModule, androidLibrariesOnly, result, visited); } result.add(depFacet); } } } } } }