Modify various usages of old PSI structure of primary ctor

This commit is contained in:
Denis Zharkov
2015-03-30 17:51:21 +03:00
parent cafa018066
commit 741c9febe2
8 changed files with 23 additions and 20 deletions
@@ -671,8 +671,10 @@ public class JetFlowInformationProvider {
return; return;
} }
report(Errors.UNUSED_PARAMETER.on((JetParameter) element, variableDescriptor), ctxt); report(Errors.UNUSED_PARAMETER.on((JetParameter) element, variableDescriptor), ctxt);
} else if (owner instanceof JetClass) { }
if (!((JetParameter) element).hasValOrVarNode() && !((JetClass) owner).isAnnotation()) { else if (owner instanceof JetPrimaryConstructor) {
if (!((JetParameter) element).hasValOrVarNode() &&
!((JetPrimaryConstructor) owner).getContainingClass().isAnnotation()) {
report(Errors.UNUSED_PARAMETER.on((JetParameter) element, variableDescriptor), ctxt); report(Errors.UNUSED_PARAMETER.on((JetParameter) element, variableDescriptor), ctxt);
} }
} }
@@ -309,8 +309,8 @@ public class JetPsiFactory(private val project: Project) {
return importDirective.getParent() as JetImportList return importDirective.getParent() as JetImportList
} }
public fun createPrimaryConstructor(): PsiElement { public fun createPrimaryConstructor(): JetPrimaryConstructor {
return createClass("class A()").findElementAt(7)!!.getParent()!! return createClass("class A()").getPrimaryConstructor()!!
} }
public fun createClassLabel(labelName: String): JetSimpleNameExpression { public fun createClassLabel(labelName: String): JetSimpleNameExpression {
@@ -451,9 +451,9 @@ public class JetPsiUtil {
@Nullable @Nullable
public static JetClass getClassIfParameterIsProperty(@NotNull JetParameter jetParameter) { public static JetClass getClassIfParameterIsProperty(@NotNull JetParameter jetParameter) {
if (jetParameter.hasValOrVarNode()) { if (jetParameter.hasValOrVarNode()) {
PsiElement parent = jetParameter.getParent(); PsiElement grandParent = jetParameter.getParent().getParent();
if (parent instanceof JetParameterList && parent.getParent() instanceof JetClass) { if (grandParent instanceof JetPrimaryConstructor) {
return (JetClass) parent.getParent(); return ((JetPrimaryConstructor) grandParent).getContainingClassOrNull();
} }
} }
@@ -141,8 +141,8 @@ public class LazyDeclarationResolver {
@Override @Override
public DeclarationDescriptor visitParameter(@NotNull JetParameter parameter, Void data) { public DeclarationDescriptor visitParameter(@NotNull JetParameter parameter, Void data) {
PsiElement grandFather = parameter.getParent().getParent(); PsiElement grandFather = parameter.getParent().getParent();
if (grandFather instanceof JetClass) { if (grandFather instanceof JetPrimaryConstructor) {
JetClass jetClass = (JetClass) grandFather; JetClass jetClass = ((JetPrimaryConstructor) grandFather).getContainingClass();
// This is a primary constructor parameter // This is a primary constructor parameter
ClassDescriptor classDescriptor = getClassDescriptor(jetClass); ClassDescriptor classDescriptor = getClassDescriptor(jetClass);
if (parameter.hasValOrVarNode()) { if (parameter.hasValOrVarNode()) {
@@ -18,20 +18,15 @@ package org.jetbrains.kotlin.asJava
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics import org.jetbrains.kotlin.resolve.diagnostics.Diagnostics
import org.jetbrains.kotlin.psi.JetFile
import org.jetbrains.kotlin.psi.JetClassBody
import org.jetbrains.kotlin.psi.JetClassOrObject
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.psi.JetPropertyAccessor
import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm.* import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm.*
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ConflictingJvmDeclarationsData import org.jetbrains.kotlin.resolve.jvm.diagnostics.ConflictingJvmDeclarationsData
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind.* import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind.*
import org.jetbrains.kotlin.diagnostics.Errors.* import org.jetbrains.kotlin.diagnostics.Errors.*
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory.* import org.jetbrains.kotlin.diagnostics.DiagnosticFactory.*
import org.jetbrains.kotlin.psi.JetParameter
import org.jetbrains.kotlin.psi.JetClass
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory import org.jetbrains.kotlin.diagnostics.DiagnosticFactory
import org.jetbrains.kotlin.psi.*
public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Diagnostics, moduleScope: GlobalSearchScope): Diagnostics? { public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Diagnostics, moduleScope: GlobalSearchScope): Diagnostics? {
fun getDiagnosticsForPackage(file: JetFile): Diagnostics? { fun getDiagnosticsForPackage(file: JetFile): Diagnostics? {
@@ -51,7 +46,7 @@ public fun getJvmSignatureDiagnostics(element: PsiElement, otherDiagnostics: Dia
} }
if (element is JetParameter && element.getValOrVarNode() != null) { if (element is JetParameter && element.getValOrVarNode() != null) {
// property declared in constructor // property declared in constructor
val parentClass = parent?.getParent() as? JetClass val parentClass = (parent?.getParent()?.getParent() as? JetClass)
if (parentClass != null) { if (parentClass != null) {
return getDiagnosticsForClass(parentClass) return getDiagnosticsForClass(parentClass)
} }
@@ -75,7 +75,7 @@ public fun JetParameter.toPsiParameter(): PsiParameter? {
val method: PsiMethod? = when (owner) { val method: PsiMethod? = when (owner) {
is JetFunction -> LightClassUtil.getLightClassMethod(owner) is JetFunction -> LightClassUtil.getLightClassMethod(owner)
is JetPropertyAccessor -> LightClassUtil.getLightClassAccessorMethod(owner) is JetPropertyAccessor -> LightClassUtil.getLightClassAccessorMethod(owner)
is JetClass -> LightClassUtil.getPsiClass(owner)?.getConstructors()?.let { constructors -> is JetPrimaryConstructor -> LightClassUtil.getPsiClass(owner.getContainingClass())?.getConstructors()?.let { constructors ->
if (constructors.isNotEmpty()) constructors[0] else null if (constructors.isNotEmpty()) constructors[0] else null
} }
else -> null else -> null
@@ -104,7 +104,7 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() {
if (declaration is JetEnumEntry) return if (declaration is JetEnumEntry) return
if (declaration.hasModifier(JetTokens.OVERRIDE_KEYWORD)) return if (declaration.hasModifier(JetTokens.OVERRIDE_KEYWORD)) return
if (declaration is JetProperty && declaration.isLocal()) return if (declaration is JetProperty && declaration.isLocal()) return
if (declaration is JetParameter && (declaration.getParent()?.getParent() !is JetClass || !declaration.hasValOrVarNode())) return if (declaration is JetParameter && (declaration.getParent()?.getParent() !is JetPrimaryConstructor || !declaration.hasValOrVarNode())) return
if (declaration is JetNamedFunction && isConventionalName(declaration)) return if (declaration is JetNamedFunction && isConventionalName(declaration)) return
// More expensive, resolve-based checks // More expensive, resolve-based checks
@@ -285,7 +285,11 @@ public class JetFunctionDefinitionUsage<T extends PsiElement> extends JetUsageIn
anchor = ((JetClass) element).getNameIdentifier(); anchor = ((JetClass) element).getNameIdentifier();
} }
if (anchor != null) { if (anchor != null) {
newParameterList = (JetParameterList) element.addAfter(newParameterList, anchor); JetPrimaryConstructor constructor =
(JetPrimaryConstructor) element.addAfter(psiFactory.createPrimaryConstructor(), anchor);
JetParameterList oldParameterList = constructor.getValueParameterList();
assert oldParameterList != null : "primary constructor from factory has parameter list";
newParameterList = (JetParameterList) oldParameterList.replace(newParameterList);
} }
} }
else if (isLambda) { else if (isLambda) {
@@ -339,7 +343,9 @@ public class JetFunctionDefinitionUsage<T extends PsiElement> extends JetUsageIn
((JetFunction)element).addModifier(newVisibilityToken); ((JetFunction)element).addModifier(newVisibilityToken);
} }
else { else {
((JetClass)element).addPrimaryConstructorModifier(newVisibilityToken); JetPrimaryConstructor constructor = ((JetClass) element).getPrimaryConstructor();
assert constructor != null : "Primary constructor should be created before changing visibility";
constructor.addModifier(newVisibilityToken);
} }
} }