001 /* 002 * Copyright 2010-2015 JetBrains s.r.o. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package org.jetbrains.kotlin.asJava; 018 019 import com.intellij.openapi.components.ServiceManager; 020 import com.intellij.openapi.project.Project; 021 import com.intellij.psi.PsiClass; 022 import com.intellij.psi.search.GlobalSearchScope; 023 import org.jetbrains.annotations.NotNull; 024 import org.jetbrains.annotations.Nullable; 025 import org.jetbrains.kotlin.descriptors.ClassDescriptor; 026 import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; 027 import org.jetbrains.kotlin.name.FqName; 028 import org.jetbrains.kotlin.psi.KtClassOrObject; 029 import org.jetbrains.kotlin.psi.KtDeclaration; 030 import org.jetbrains.kotlin.psi.KtElement; 031 import org.jetbrains.kotlin.psi.KtFile; 032 import org.jetbrains.kotlin.resolve.BindingContext; 033 034 import java.util.Collection; 035 036 public abstract class LightClassGenerationSupport { 037 038 @NotNull 039 public static LightClassGenerationSupport getInstance(@NotNull Project project) { 040 return ServiceManager.getService(project, LightClassGenerationSupport.class); 041 } 042 043 @NotNull 044 public abstract LightClassConstructionContext getContextForClassOrObject(@NotNull KtClassOrObject classOrObject); 045 046 @NotNull 047 public abstract Collection<KtClassOrObject> findClassOrObjectDeclarations(@NotNull FqName fqName, @NotNull GlobalSearchScope searchScope); 048 049 /* 050 * Finds files whose package declaration is exactly {@code fqName}. For example, if a file declares 051 * package a.b.c 052 * it will not be returned for fqName "a.b" 053 * 054 * If the resulting collection is empty, it means that this package has not other declarations than sub-packages 055 */ 056 @NotNull 057 public abstract Collection<KtFile> findFilesForPackage(@NotNull FqName fqName, @NotNull GlobalSearchScope searchScope); 058 059 // Returns only immediately declared classes/objects, package classes are not included (they have no declarations) 060 @NotNull 061 public abstract Collection<KtClassOrObject> findClassOrObjectDeclarationsInPackage( 062 @NotNull FqName packageFqName, 063 @NotNull GlobalSearchScope searchScope 064 ); 065 066 public abstract boolean packageExists(@NotNull FqName fqName, @NotNull GlobalSearchScope scope); 067 068 @NotNull 069 public abstract Collection<FqName> getSubPackages(@NotNull FqName fqn, @NotNull GlobalSearchScope scope); 070 071 @Nullable 072 public abstract KtLightClass getLightClass(@NotNull KtClassOrObject classOrObject); 073 074 @Nullable 075 public abstract DeclarationDescriptor resolveToDescriptor(@NotNull KtDeclaration declaration); 076 077 @NotNull 078 public abstract BindingContext analyze(@NotNull KtElement element); 079 080 @NotNull 081 public abstract Collection<PsiClass> getFacadeClasses(@NotNull FqName facadeFqName, @NotNull GlobalSearchScope scope); 082 083 @NotNull 084 public abstract Collection<PsiClass> getMultifilePartClasses(@NotNull FqName partFqName, @NotNull GlobalSearchScope scope); 085 086 @NotNull 087 public abstract Collection<PsiClass> getFacadeClassesInPackage(@NotNull FqName packageFqName, @NotNull GlobalSearchScope scope); 088 089 @NotNull 090 public abstract Collection<String> getFacadeNames(@NotNull FqName packageFqName, @NotNull GlobalSearchScope scope); 091 092 @NotNull 093 public abstract Collection<KtFile> findFilesForFacade(@NotNull FqName facadeFqName, @NotNull GlobalSearchScope scope); 094 095 @NotNull 096 public abstract LightClassConstructionContext getContextForFacade(@NotNull Collection<KtFile> files); 097 }