Extract VirtualFileBoundJavaClass interface
This commit is contained in:
committed by
Mikhail Glukhikh
parent
a815125281
commit
c9a04fe1e2
+5
-1
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.load.java.structure.impl
|
package org.jetbrains.kotlin.load.java.structure.impl
|
||||||
|
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
import com.intellij.psi.PsiTypeParameter
|
import com.intellij.psi.PsiTypeParameter
|
||||||
import org.jetbrains.kotlin.asJava.KtLightClassMarker
|
import org.jetbrains.kotlin.asJava.KtLightClassMarker
|
||||||
@@ -26,7 +27,7 @@ import org.jetbrains.kotlin.name.FqName
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.psi.KtPsiUtil
|
import org.jetbrains.kotlin.psi.KtPsiUtil
|
||||||
|
|
||||||
class JavaClassImpl(psiClass: PsiClass) : JavaClassifierImpl<PsiClass>(psiClass), JavaClass, JavaAnnotationOwnerImpl, JavaModifierListOwnerImpl {
|
class JavaClassImpl(psiClass: PsiClass) : JavaClassifierImpl<PsiClass>(psiClass), VirtualFileBoundJavaClass, JavaAnnotationOwnerImpl, JavaModifierListOwnerImpl {
|
||||||
init {
|
init {
|
||||||
assert(psiClass !is PsiTypeParameter) { "PsiTypeParameter should be wrapped in JavaTypeParameter, not JavaClass: use JavaClassifier.create()" }
|
assert(psiClass !is PsiTypeParameter) { "PsiTypeParameter should be wrapped in JavaTypeParameter, not JavaClass: use JavaClassifier.create()" }
|
||||||
}
|
}
|
||||||
@@ -109,6 +110,9 @@ class JavaClassImpl(psiClass: PsiClass) : JavaClassifierImpl<PsiClass>(psiClass)
|
|||||||
override val lightClassOriginKind: LightClassOriginKind?
|
override val lightClassOriginKind: LightClassOriginKind?
|
||||||
get() = (psi as? KtLightClassMarker)?.originKind
|
get() = (psi as? KtLightClassMarker)?.originKind
|
||||||
|
|
||||||
|
override val virtualFile: VirtualFile?
|
||||||
|
get() = psi.containingFile?.virtualFile
|
||||||
|
|
||||||
override fun getAnnotationOwnerPsi() = psi.modifierList
|
override fun getAnnotationOwnerPsi() = psi.modifierList
|
||||||
|
|
||||||
private fun assertNotLightClass() {
|
private fun assertNotLightClass() {
|
||||||
|
|||||||
+24
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2017 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 org.jetbrains.kotlin.load.java.structure.impl
|
||||||
|
|
||||||
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
|
|
||||||
|
interface VirtualFileBoundJavaClass : JavaClass {
|
||||||
|
val virtualFile: VirtualFile?
|
||||||
|
}
|
||||||
+3
-2
@@ -21,6 +21,7 @@ import com.intellij.util.containers.ContainerUtil
|
|||||||
import gnu.trove.THashMap
|
import gnu.trove.THashMap
|
||||||
import org.jetbrains.kotlin.builtins.PrimitiveType
|
import org.jetbrains.kotlin.builtins.PrimitiveType
|
||||||
import org.jetbrains.kotlin.load.java.structure.*
|
import org.jetbrains.kotlin.load.java.structure.*
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.utils.addIfNotNull
|
import org.jetbrains.kotlin.utils.addIfNotNull
|
||||||
@@ -29,14 +30,14 @@ import java.text.CharacterIterator
|
|||||||
import java.text.StringCharacterIterator
|
import java.text.StringCharacterIterator
|
||||||
|
|
||||||
class BinaryJavaClass(
|
class BinaryJavaClass(
|
||||||
val virtualFile: VirtualFile,
|
override val virtualFile: VirtualFile,
|
||||||
override val fqName: FqName,
|
override val fqName: FqName,
|
||||||
private val context: ClassifierResolutionContext,
|
private val context: ClassifierResolutionContext,
|
||||||
private val signatureParser: BinaryClassSignatureParser,
|
private val signatureParser: BinaryClassSignatureParser,
|
||||||
override var access: Int = 0,
|
override var access: Int = 0,
|
||||||
override val outerClass: JavaClass?,
|
override val outerClass: JavaClass?,
|
||||||
classContent: ByteArray? = null
|
classContent: ByteArray? = null
|
||||||
) : ClassVisitor(ASM_API_VERSION_FOR_CLASS_READING), JavaClass, BinaryJavaModifierListOwner, BinaryJavaAnnotationOwner {
|
) : ClassVisitor(ASM_API_VERSION_FOR_CLASS_READING), VirtualFileBoundJavaClass, BinaryJavaModifierListOwner, BinaryJavaAnnotationOwner {
|
||||||
lateinit var myInternalName: String
|
lateinit var myInternalName: String
|
||||||
|
|
||||||
override val annotations: MutableCollection<JavaAnnotation> = mutableListOf()
|
override val annotations: MutableCollection<JavaAnnotation> = mutableListOf()
|
||||||
|
|||||||
@@ -20,8 +20,7 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl
|
import org.jetbrains.kotlin.load.java.structure.impl.VirtualFileBoundJavaClass
|
||||||
import org.jetbrains.kotlin.load.java.structure.impl.classFiles.BinaryJavaClass
|
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.utils.sure
|
import org.jetbrains.kotlin.utils.sure
|
||||||
|
|
||||||
@@ -34,10 +33,8 @@ abstract class VirtualFileFinder : KotlinClassFinder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun findKotlinClass(javaClass: JavaClass): KotlinJvmBinaryClass? {
|
override fun findKotlinClass(javaClass: JavaClass): KotlinJvmBinaryClass? {
|
||||||
var file =
|
var file = (javaClass as? VirtualFileBoundJavaClass)?.virtualFile ?: return null
|
||||||
(javaClass as? JavaClassImpl)?.psi?.containingFile?.virtualFile
|
|
||||||
?: (javaClass as? BinaryJavaClass)?.virtualFile
|
|
||||||
?: return null
|
|
||||||
if (javaClass.outerClass != null) {
|
if (javaClass.outerClass != null) {
|
||||||
// For nested classes we get a file of the containing class, to get the actual class file for A.B.C,
|
// For nested classes we get a file of the containing class, to get the actual class file for A.B.C,
|
||||||
// we take the file for A, take its parent directory, then in this directory we look for A$B$C.class
|
// we take the file for A, take its parent directory, then in this directory we look for A$B$C.class
|
||||||
|
|||||||
Reference in New Issue
Block a user