JavaClassFinderImpl: J2K

This commit is contained in:
baratynskiy
2017-04-07 11:08:09 +03:00
committed by Mikhail Glukhikh
parent 7af5dc7d03
commit fe9a2b30fd
@@ -14,97 +14,69 @@
* limitations under the License. * limitations under the License.
*/ */
package org.jetbrains.kotlin.load.java; package org.jetbrains.kotlin.load.java
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.PsiPackage; import com.intellij.psi.search.DelegatingGlobalSearchScope
import com.intellij.psi.search.DelegatingGlobalSearchScope; import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.kotlin.asJava.KtLightClassMarker
import org.jetbrains.annotations.NotNull; import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.load.java.structure.JavaClass
import org.jetbrains.kotlin.idea.KotlinFileType; import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
import org.jetbrains.kotlin.load.java.structure.JavaClass; import org.jetbrains.kotlin.load.java.structure.impl.JavaPackageImpl
import org.jetbrains.kotlin.load.java.structure.JavaPackage; import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.load.java.structure.impl.JavaPackageImpl; import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.ClassId; import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.name.FqName; import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer
import org.jetbrains.kotlin.resolve.BindingTrace; import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade
import org.jetbrains.kotlin.resolve.CodeAnalyzerInitializer; import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer
import org.jetbrains.kotlin.resolve.jvm.KotlinJavaPsiFacade;
import org.jetbrains.kotlin.resolve.lazy.KotlinCodeAnalyzer;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct
import javax.inject.Inject; import javax.inject.Inject
import java.util.Set;
public class JavaClassFinderImpl implements JavaClassFinder { class JavaClassFinderImpl : JavaClassFinder {
private Project project;
private GlobalSearchScope baseScope; private lateinit var project: Project
private GlobalSearchScope javaSearchScope; private lateinit var baseScope: GlobalSearchScope
private KotlinJavaPsiFacade javaFacade; private lateinit var javaSearchScope: GlobalSearchScope
private lateinit var javaFacade: KotlinJavaPsiFacade
@Inject @Inject
public void setProject(@NotNull Project project) { fun setProject(project: Project) {
this.project = project; this.project = project
} }
@Inject @Inject
public void setScope(@NotNull GlobalSearchScope scope) { fun setScope(scope: GlobalSearchScope) {
this.baseScope = scope; this.baseScope = scope
} }
public class FilterOutKotlinSourceFilesScope extends DelegatingGlobalSearchScope { inner class FilterOutKotlinSourceFilesScope(baseScope: GlobalSearchScope) : DelegatingGlobalSearchScope(baseScope) {
public FilterOutKotlinSourceFilesScope(@NotNull GlobalSearchScope baseScope) {
super(baseScope);
}
@Override override fun contains(file: VirtualFile) = myBaseScope.contains(file) && (file.isDirectory || file.fileType !== KotlinFileType.INSTANCE)
public boolean contains(@NotNull VirtualFile file) {
return myBaseScope.contains(file) && (file.isDirectory() || file.getFileType() != KotlinFileType.INSTANCE);
}
@NotNull val base: GlobalSearchScope = myBaseScope
public GlobalSearchScope getBase() {
return myBaseScope;
}
//NOTE: expected by class finder to be not null //NOTE: expected by class finder to be not null
@NotNull override fun getProject() = this@JavaClassFinderImpl.project
@Override
public Project getProject() { override fun toString() = "JCFI: $myBaseScope"
return project;
}
@Override
public String toString() {
return "JCFI: " + myBaseScope;
}
} }
@PostConstruct @PostConstruct
public void initialize(@NotNull BindingTrace trace, @NotNull KotlinCodeAnalyzer codeAnalyzer) { fun initialize(trace: BindingTrace, codeAnalyzer: KotlinCodeAnalyzer) {
javaSearchScope = new FilterOutKotlinSourceFilesScope(baseScope); javaSearchScope = FilterOutKotlinSourceFilesScope(baseScope)
javaFacade = KotlinJavaPsiFacade.getInstance(project); javaFacade = KotlinJavaPsiFacade.getInstance(project)
CodeAnalyzerInitializer.Companion.getInstance(project).initialize(trace, codeAnalyzer.getModuleDescriptor(), codeAnalyzer); CodeAnalyzerInitializer.getInstance(project).initialize(trace, codeAnalyzer.moduleDescriptor, codeAnalyzer)
} }
@Nullable
@Override
public JavaClass findClass(@NotNull ClassId classId) {
return javaFacade.findClass(classId, javaSearchScope);
}
@Nullable override fun findClass(classId: ClassId) = javaFacade.findClass(classId, javaSearchScope)
@Override
public JavaPackage findPackage(@NotNull FqName fqName) { override fun findPackage(fqName: FqName) = javaFacade.findPackage(fqName.asString(), javaSearchScope)?.let { JavaPackageImpl(it, javaSearchScope) }
PsiPackage psiPackage = javaFacade.findPackage(fqName.asString(), javaSearchScope);
return psiPackage == null ? null : new JavaPackageImpl(psiPackage, javaSearchScope); override fun knownClassNamesInPackage(packageFqName: FqName): Set<String>? = javaFacade.knownClassNamesInPackage(packageFqName)
}
@Nullable
@Override
public Set<String> knownClassNamesInPackage(@NotNull FqName packageFqName) {
return javaFacade.knownClassNamesInPackage(packageFqName);
}
} }