User: joe Date: 25 Feb 25 13:15 Revision: 7969d538cf650138757613461e89ffe941f1d00b Summary: Add MixinAnnotationHandler.forMixinAnnotation(PsiAnnotation) and cleanup usages TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9849&personal=false Index: src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt =================================================================== --- src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -247,8 +247,7 @@ val modifierList = expressionAnnotation.findContainingModifierList() ?: return emptyList() val (handler, handlerAnnotation) = modifierList.annotations.mapFirstNotNull { annotation -> - val qName = annotation.qualifiedName ?: return@mapFirstNotNull null - val handler = MixinAnnotationHandler.forMixinAnnotation(qName, project) ?: return@mapFirstNotNull null + val handler = MixinAnnotationHandler.forMixinAnnotation(annotation, project) ?: return@mapFirstNotNull null handler to annotation } ?: return emptyList() @@ -285,8 +284,7 @@ val mixinClass = modifierList.findContainingClass() ?: return emptyList() val (handler, handlerAnnotation) = modifierList.annotations.mapFirstNotNull { annotation -> - val qName = annotation.qualifiedName ?: return@mapFirstNotNull null - val handler = MixinAnnotationHandler.forMixinAnnotation(qName, project) ?: return@mapFirstNotNull null + val handler = MixinAnnotationHandler.forMixinAnnotation(annotation, project) ?: return@mapFirstNotNull null handler to annotation } ?: return emptyList() Index: src/main/kotlin/platform/mixin/handlers/MixinAnnotationHandler.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/MixinAnnotationHandler.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/handlers/MixinAnnotationHandler.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -96,6 +96,11 @@ fun getBuiltinHandlers(): Sequence> = EP_NAME.extensions.asSequence().map { it.key to it.instance } + fun forMixinAnnotation(annotation: PsiAnnotation, project: Project = annotation.project): MixinAnnotationHandler? { + val qName = annotation.qualifiedName ?: return null + return forMixinAnnotation(qName, project) + } + fun forMixinAnnotation(qualifiedName: String, project: Project? = null): MixinAnnotationHandler? { val extension = COLLECTOR.findSingle(qualifiedName) if (extension != null) { Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantInjectionPoint.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantInjectionPoint.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantInjectionPoint.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -87,8 +87,7 @@ override fun getArgsValues(at: PsiAnnotation, key: String): Array { fun collectTargets(constantToCompletion: (Any) -> Any?): Array { val injectorAnnotation = AtResolver.findInjectorAnnotation(at) ?: return ArrayUtilRt.EMPTY_OBJECT_ARRAY - val handler = injectorAnnotation.qualifiedName - ?.let { MixinAnnotationHandler.forMixinAnnotation(it, at.project) } + val handler = MixinAnnotationHandler.forMixinAnnotation(injectorAnnotation) ?: return ArrayUtilRt.EMPTY_OBJECT_ARRAY val expandConditions = parseExpandConditions(AtResolver.getArgs(at)) Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantStringMethodInjectionPoint.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantStringMethodInjectionPoint.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantStringMethodInjectionPoint.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -99,8 +99,7 @@ } val injectorAnnotation = AtResolver.findInjectorAnnotation(at) ?: return ArrayUtilRt.EMPTY_OBJECT_ARRAY - val handler = injectorAnnotation.qualifiedName - ?.let { MixinAnnotationHandler.forMixinAnnotation(it, at.project) } + val handler = MixinAnnotationHandler.forMixinAnnotation(injectorAnnotation) ?: return ArrayUtilRt.EMPTY_OBJECT_ARRAY return handler.resolveTarget(injectorAnnotation).asSequence() Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/NewInsnInjectionPoint.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -70,8 +70,7 @@ } val injectorAnnotation = AtResolver.findInjectorAnnotation(at) ?: return ArrayUtilRt.EMPTY_OBJECT_ARRAY - val handler = injectorAnnotation.qualifiedName - ?.let { MixinAnnotationHandler.forMixinAnnotation(it, at.project) } + val handler = MixinAnnotationHandler.forMixinAnnotation(injectorAnnotation) ?: return ArrayUtilRt.EMPTY_OBJECT_ARRAY return handler.resolveTarget(injectorAnnotation).asSequence() Index: src/main/kotlin/platform/mixin/insight/MixinElementLineMarkerProvider.kt =================================================================== --- src/main/kotlin/platform/mixin/insight/MixinElementLineMarkerProvider.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/insight/MixinElementLineMarkerProvider.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -64,9 +64,7 @@ } ?: return null val (handler, annotation) = element.annotations.mapFirstNotNull { annotation -> - annotation.qualifiedName?.let { qName -> - MixinAnnotationHandler.forMixinAnnotation(qName, annotation.project)?.let { it to annotation } - } + MixinAnnotationHandler.forMixinAnnotation(annotation)?.let { it to annotation } } ?: return null if (handler.isUnresolved(annotation) != null) { return null Index: src/main/kotlin/platform/mixin/insight/MixinEntryPoint.kt =================================================================== --- src/main/kotlin/platform/mixin/insight/MixinEntryPoint.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/insight/MixinEntryPoint.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -60,8 +60,7 @@ } val project = member.project for (annotation in member.annotations) { - val qName = annotation.qualifiedName ?: continue - val handler = MixinAnnotationHandler.forMixinAnnotation(qName, project) + val handler = MixinAnnotationHandler.forMixinAnnotation(annotation, project) if (handler is InjectorAnnotationHandler) { return PsiUtil.ACCESS_LEVEL_PRIVATE } Index: src/main/kotlin/platform/mixin/inspection/MixinAnnotationTargetInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/MixinAnnotationTargetInspection.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/inspection/MixinAnnotationTargetInspection.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -43,8 +43,7 @@ if (qName == AT) { var parentAnnotation = annotation.parentOfType() while (parentAnnotation != null) { - val parentQName = parentAnnotation.qualifiedName ?: return - if (MixinAnnotationHandler.forMixinAnnotation(parentQName, parentAnnotation.project) != null) { + if (MixinAnnotationHandler.forMixinAnnotation(parentAnnotation) != null) { break } parentAnnotation = parentAnnotation.parentOfType() @@ -52,9 +51,7 @@ if (parentAnnotation == null) { return } - val parentQName = parentAnnotation.qualifiedName ?: return - val handler = MixinAnnotationHandler.forMixinAnnotation(parentQName, parentAnnotation.project) - ?: return + val handler = MixinAnnotationHandler.forMixinAnnotation(parentAnnotation) ?: return val targets = handler.resolveTarget(parentAnnotation).ifEmpty { return } val failure = targets.asSequence() .mapNotNull { Index: src/main/kotlin/platform/mixin/inspection/MixinAnnotationsInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/MixinAnnotationsInspection.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/inspection/MixinAnnotationsInspection.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -40,8 +40,7 @@ private class Visitor(private val holder: ProblemsHolder) : JavaElementVisitor() { override fun visitAnnotation(annotation: PsiAnnotation) { - val qualifiedName = annotation.qualifiedName ?: return - if (MixinAnnotationHandler.forMixinAnnotation(qualifiedName, annotation.project) == null) { + if (MixinAnnotationHandler.forMixinAnnotation(annotation, annotation.project) == null) { return } Index: src/main/kotlin/platform/mixin/inspection/injector/CtorHeadPostInitInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/injector/CtorHeadPostInitInspection.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/inspection/injector/CtorHeadPostInitInspection.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -57,9 +57,7 @@ } val injectorAnnotation = AtResolver.findInjectorAnnotation(annotation) ?: return - val handler = injectorAnnotation.qualifiedName - ?.let { MixinAnnotationHandler.forMixinAnnotation(it, holder.project) } - ?: return + val handler = MixinAnnotationHandler.forMixinAnnotation(injectorAnnotation, holder.project) ?: return val targets = handler.resolveTarget(injectorAnnotation).filterIsInstance() if (targets.any { Index: src/main/kotlin/platform/mixin/inspection/injector/InvalidInjectorMethodSignatureInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/injector/InvalidInjectorMethodSignatureInspection.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/inspection/injector/InvalidInjectorMethodSignatureInspection.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -95,8 +95,7 @@ var reportedSignature = false for (annotation in modifiers.annotations) { - val qName = annotation.qualifiedName ?: continue - val handler = MixinAnnotationHandler.forMixinAnnotation(qName, annotation.project) + val handler = MixinAnnotationHandler.forMixinAnnotation(annotation, annotation.project) as? InjectorAnnotationHandler ?: continue val methodAttribute = annotation.findDeclaredAttributeValue("method") ?: continue val targetMethods = MethodReference.resolveAllIfNotAmbiguous(methodAttribute) ?: continue Index: src/main/kotlin/platform/mixin/inspection/injector/UnnecessaryUnsafeInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/injector/UnnecessaryUnsafeInspection.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/inspection/injector/UnnecessaryUnsafeInspection.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -95,9 +95,7 @@ companion object { fun mightTargetConstructor(project: Project, at: PsiAnnotation): Boolean { val injectorAnnotation = AtResolver.findInjectorAnnotation(at) ?: return true - val handler = injectorAnnotation.qualifiedName?.let { - MixinAnnotationHandler.forMixinAnnotation(it, project) - } ?: return true + val handler = MixinAnnotationHandler.forMixinAnnotation(injectorAnnotation, project) ?: return true val targets = handler.resolveTarget(injectorAnnotation) .filterIsInstance() Index: src/main/kotlin/platform/mixin/inspection/mixinextras/LocalArgsOnlyInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/mixinextras/LocalArgsOnlyInspection.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/inspection/mixinextras/LocalArgsOnlyInspection.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -53,8 +53,7 @@ val method = parameter.findContainingMethod() ?: return val targets = method.annotations.mapFirstNotNull { annotation -> - val qName = annotation.qualifiedName ?: return@mapFirstNotNull null - val handler = MixinAnnotationHandler.forMixinAnnotation(qName, holder.project) + val handler = MixinAnnotationHandler.forMixinAnnotation(annotation, holder.project) ?: return@mapFirstNotNull null handler.resolveTarget(annotation).asSequence() .filterIsInstance() Index: src/main/kotlin/platform/mixin/inspection/mixinextras/UnnecessaryMutableLocalInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/mixinextras/UnnecessaryMutableLocalInspection.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/inspection/mixinextras/UnnecessaryMutableLocalInspection.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -54,7 +54,7 @@ override fun visitMethod(method: PsiMethod) { val project = method.project val hasValidMixinAnnotation = method.annotations.any { ann -> - ann.qualifiedName?.let { MixinAnnotationHandler.forMixinAnnotation(it, project) } + MixinAnnotationHandler.forMixinAnnotation(ann, project) // Mutable Local references do have different semantics inside a WrapOperation. ?.let { it is InjectorAnnotationHandler && it !is WrapOperationHandler } == true } Index: src/main/kotlin/platform/mixin/inspection/mixinextras/UnresolvedLocalCaptureInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/mixinextras/UnresolvedLocalCaptureInspection.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/inspection/mixinextras/UnresolvedLocalCaptureInspection.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -49,9 +49,8 @@ val parameter = localAnnotation.parentOfType() ?: return val method = parameter.findContainingMethod() ?: return val targets = method.annotations.mapFirstNotNull { annotation -> - val qName = annotation.qualifiedName ?: return@mapFirstNotNull null val handler = - MixinAnnotationHandler.forMixinAnnotation(qName, holder.project) as? InjectorAnnotationHandler + MixinAnnotationHandler.forMixinAnnotation(annotation, holder.project) as? InjectorAnnotationHandler ?: return@mapFirstNotNull null handler.resolveInstructions(annotation) } ?: return Index: src/main/kotlin/platform/mixin/inspection/reference/AmbiguousReferenceInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/reference/AmbiguousReferenceInspection.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/inspection/reference/AmbiguousReferenceInspection.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -45,8 +45,7 @@ value: PsiAnnotationMemberValue, holder: ProblemsHolder, ) { - val qName = annotation.qualifiedName ?: return - val handler = MixinAnnotationHandler.forMixinAnnotation(qName, annotation.project) + val handler = MixinAnnotationHandler.forMixinAnnotation(annotation) if (handler !is InjectorAnnotationHandler || handler.isSoft) { return } Index: src/main/kotlin/platform/mixin/inspection/reference/UnnecessaryQualifiedMemberReferenceInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/reference/UnnecessaryQualifiedMemberReferenceInspection.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/inspection/reference/UnnecessaryQualifiedMemberReferenceInspection.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -44,8 +44,7 @@ value: PsiAnnotationMemberValue, holder: ProblemsHolder, ) { - val qName = annotation.qualifiedName ?: return - if (MixinAnnotationHandler.forMixinAnnotation(qName, annotation.project) !is InjectorAnnotationHandler) { + if (MixinAnnotationHandler.forMixinAnnotation(annotation) !is InjectorAnnotationHandler) { return } Index: src/main/kotlin/platform/mixin/reference/AbstractMethodReference.kt =================================================================== --- src/main/kotlin/platform/mixin/reference/AbstractMethodReference.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/reference/AbstractMethodReference.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -72,10 +72,8 @@ override fun isUnresolved(context: PsiElement): Boolean { // check if the annotation handler is soft - val annotationQName = context.parentOfType()?.qualifiedName - if (annotationQName != null && - MixinAnnotationHandler.forMixinAnnotation(annotationQName, context.project)?.isSoft == true - ) { + val annotation = context.parentOfType() + if (annotation != null && MixinAnnotationHandler.forMixinAnnotation(annotation)?.isSoft == true) { return false } Index: src/main/kotlin/platform/mixin/reference/target/DefinitionReferences.kt =================================================================== --- src/main/kotlin/platform/mixin/reference/target/DefinitionReferences.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/reference/target/DefinitionReferences.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -97,8 +97,7 @@ val project = context.project val modifierList = context.findContainingModifierList() ?: return emptyList() val (annotation, handler) = modifierList.annotations.mapFirstNotNull { annotation -> - val qName = annotation.qualifiedName ?: return@mapFirstNotNull null - val handler = MixinAnnotationHandler.forMixinAnnotation(qName, project) ?: return@mapFirstNotNull null + val handler = MixinAnnotationHandler.forMixinAnnotation(annotation, project) ?: return@mapFirstNotNull null annotation to handler } ?: return emptyList() Index: src/main/kotlin/platform/mixin/reference/target/TargetReference.kt =================================================================== --- src/main/kotlin/platform/mixin/reference/target/TargetReference.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/reference/target/TargetReference.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -74,11 +74,8 @@ .filterIsInstance() .flatMap { it.owner?.annotations?.asSequence() ?: emptySequence() } .mapNotNull { annotation -> - val qName = annotation.qualifiedName ?: return@mapNotNull null - ( - MixinAnnotationHandler.forMixinAnnotation(qName, annotation.project) - as? InjectorAnnotationHandler - )?.let { it to annotation } + (MixinAnnotationHandler.forMixinAnnotation(annotation) as? InjectorAnnotationHandler) + ?.let { it to annotation } }.firstOrNull() ?: return null if (forUnresolved && handler.isSoft) { return null Index: src/main/kotlin/platform/mixin/util/Mixin.kt =================================================================== --- src/main/kotlin/platform/mixin/util/Mixin.kt (revision 28a411ba7fd44ebb4537b5343c6b8fb86ffbce77) +++ src/main/kotlin/platform/mixin/util/Mixin.kt (revision 7969d538cf650138757613461e89ffe941f1d00b) @@ -239,8 +239,7 @@ } val project = element.project for (annotation in element.annotations) { - val qName = annotation.qualifiedName ?: continue - val handler = MixinAnnotationHandler.forMixinAnnotation(qName, project) + val handler = MixinAnnotationHandler.forMixinAnnotation(annotation, project) if (handler != null && handler.isEntryPoint) { return true }