public AlternativeMethodSignatureData( @NotNull ExternalAnnotationResolver externalAnnotationResolver, @NotNull JavaMethod method, @Nullable JetType receiverType, @NotNull Project project, @NotNull List<ValueParameterDescriptor> valueParameters, @Nullable JetType originalReturnType, @NotNull List<TypeParameterDescriptor> methodTypeParameters, boolean hasSuperMethods) { String signature = SignaturesUtil.getKotlinSignature(externalAnnotationResolver, method); if (signature == null) { setAnnotated(false); altFunDeclaration = null; return; } if (receiverType != null) { throw new UnsupportedOperationException( "Alternative annotations for extension functions are not supported yet"); } setAnnotated(true); altFunDeclaration = JetPsiFactory.createFunction(project, signature); originalToAltTypeParameters = DescriptorResolverUtils.recreateTypeParametersAndReturnMapping(methodTypeParameters, null); try { checkForSyntaxErrors(altFunDeclaration); checkEqualFunctionNames(altFunDeclaration, method); computeTypeParameters(methodTypeParameters); computeValueParameters(valueParameters); if (originalReturnType != null) { altReturnType = computeReturnType( originalReturnType, altFunDeclaration.getReturnTypeRef(), originalToAltTypeParameters); } if (hasSuperMethods) { checkParameterAndReturnTypesForOverridingMethods( valueParameters, methodTypeParameters, originalReturnType); } } catch (AlternativeSignatureMismatchException e) { setError(e.getMessage()); } }
private FunctionDescriptor makeFunction(String funDecl) { JetNamedFunction function = JetPsiFactory.createFunction(getProject(), funDecl); return descriptorResolver.resolveFunctionDescriptor(root, library.getLibraryScope(), function); }