KtLightMethod(Field): use dummyDelegate to determine modifier properties

This commit is contained in:
Pavel V. Talanov
2017-02-28 17:24:13 +03:00
parent abf206a134
commit fa58f1b4d7
7 changed files with 55 additions and 9 deletions
@@ -91,7 +91,7 @@ sealed class KtLightFieldImpl<T: PsiField>(
override fun getModifierList() = _modifierList
override fun hasModifierProperty(@NonNls name: String) = clsDelegate.hasModifierProperty(name)
override fun hasModifierProperty(@NonNls name: String) = (dummyDelegate ?: clsDelegate).hasModifierProperty(name)
override fun getText() = kotlinOrigin?.text ?: ""
@@ -254,7 +254,7 @@ class KtLightMethodImpl private constructor(
override fun getName() = dummyDelegate?.name ?: clsDelegate.name
override fun hasModifierProperty(name: String) = clsDelegate.hasModifierProperty(name)
override fun hasModifierProperty(name: String) = (dummyDelegate ?: clsDelegate).hasModifierProperty(name)
override fun getThrowsList() = clsDelegate.throwsList
@@ -0,0 +1,17 @@
public final class A {
@kotlin.jvm.Transient
@kotlin.jvm.Volatile
@org.jetbrains.annotations.NotNull
private transient volatile java.lang.String c;
@kotlin.jvm.Synchronized
@kotlin.jvm.Strictfp
public final synchronized strictfp void f() { /* compiled code */ }
@org.jetbrains.annotations.NotNull
public final java.lang.String getC() { /* compiled code */ }
public final void setC(@org.jetbrains.annotations.NotNull java.lang.String p) { /* compiled code */ }
public A() { /* compiled code */ }
}
@@ -0,0 +1,13 @@
// A
class A {
@Synchronized
@Strictfp
fun f() {
}
@Transient
@Volatile
var c: String = ""
}
@@ -80,6 +80,12 @@ public class CompilerLightClassTestGenerated extends AbstractCompilerLightClassT
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses/compilationErrors"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("AnnotationModifiers.kt")
public void testAnnotationModifiers() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/AnnotationModifiers.kt");
doTest(fileName);
}
@TestMetadata("SameName.kt")
public void testSameName() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/SameName.kt");
@@ -19,10 +19,7 @@ package org.jetbrains.kotlin.idea.caches.resolve
import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.ModuleRootModificationUtil
import com.intellij.openapi.util.io.FileUtilRt
import com.intellij.psi.JavaPsiFacade
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiField
import com.intellij.psi.PsiMethod
import com.intellij.psi.*
import com.intellij.psi.impl.java.stubs.PsiJavaFileStub
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.util.PsiTreeUtil
@@ -188,21 +185,28 @@ object LightClassLazinessChecker {
}
private data class FieldInfo(
val name: String
val name: String,
val modifiers: List<String>
)
private fun fieldInfo(field: PsiField) = with(field) {
FieldInfo(name!!)
FieldInfo(
name!!, PsiModifier.MODIFIERS.asList().filter { hasModifierProperty(it) }
)
}
private data class MethodInfo(
val name: String,
val modifiers: List<String>,
val isConstructor: Boolean,
val parameterCount: Int
)
private fun methodInfo(method: PsiMethod) = with(method) {
MethodInfo(name, isConstructor, method.parameterList.parametersCount)
MethodInfo(
name, PsiModifier.MODIFIERS.asList().filter { hasModifierProperty(it) },
isConstructor, method.parameterList.parametersCount
)
}
}
@@ -80,6 +80,12 @@ public class IdeLightClassTestGenerated extends AbstractIdeLightClassTest {
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/asJava/lightClasses/compilationErrors"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true);
}
@TestMetadata("AnnotationModifiers.kt")
public void testAnnotationModifiers() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/AnnotationModifiers.kt");
doTest(fileName);
}
@TestMetadata("SameName.kt")
public void testSameName() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/asJava/lightClasses/compilationErrors/SameName.kt");