MethodMatcher.MethodMatchParameter methodMatchParameter = new MethodMatcher.StringParameterMatcher(psiElement.getContext(), 1)
.withSignature(JOINS)
.match();
if(methodMatchParameter != null) {
MethodReference methodReference = PsiTreeUtil.getParentOfType(psiElement, MethodReference.class);
if(methodReference != null) {
String joinTable = PhpElementsUtil.getStringValue(PsiElementUtils.getMethodParameterPsiElementAt(methodReference, 0));
if(joinTable != null && StringUtils.isNotBlank(joinTable)) {
int pos = joinTable.lastIndexOf(".");
if(pos > 0) {
final String aliasName = joinTable.substring(pos + 1);
if(StringUtils.isNotBlank(aliasName)) {
Set<String> strings = new HashSet<String>() {{
add(aliasName);
add(fr.adrienbrault.idea.symfony2plugin.util.StringUtils.camelize(aliasName, true));
add(fr.adrienbrault.idea.symfony2plugin.util.StringUtils.underscore(aliasName));
}};
for(String string: strings) {
completionResultSet.addElement(LookupElementBuilder.create(string));
}
}
}
}
}
}
}
});
// $qb->expr()->in('')
// $qb->expr()->eg('')
extend(CompletionType.BASIC, PlatformPatterns.psiElement(), new CompletionProvider<CompletionParameters>() {
@Override
protected void addCompletions(@NotNull CompletionParameters completionParameters, ProcessingContext processingContext, @NotNull CompletionResultSet completionResultSet) {
PsiElement psiElement = completionParameters.getOriginalPosition();
if(psiElement == null) {
return;
}
MethodMatcher.MethodMatchParameter methodMatchParameter = new MethodMatcher.StringParameterMatcher(psiElement.getContext(), 0)
.withSignature(EXPR)
.match();
if(methodMatchParameter == null) {
return;
}
// simple resolve query inline instance usage
// $qb->expr()->in('')
MethodReference methodReference = methodMatchParameter.getMethodReference();
PsiElement methodReferenceChild = methodReference.getFirstChild();
if(!(methodReferenceChild instanceof MethodReference)) {
return;
}
QueryBuilderMethodReferenceParser qb = getQueryBuilderParser((MethodReference) methodReferenceChild);
if(qb == null) {
return;
}
QueryBuilderScopeContext collect = qb.collect();
buildLookupElements(completionResultSet, collect);
}
});
extend(CompletionType.BASIC, PlatformPatterns.psiElement(), new CompletionProvider<CompletionParameters>() {
@Override
protected void addCompletions(@NotNull CompletionParameters completionParameters, ProcessingContext processingContext, @NotNull CompletionResultSet completionResultSet) {
PsiElement psiElement = completionParameters.getOriginalPosition();
if (!Symfony2ProjectComponent.isEnabled(psiElement) || !(psiElement.getContext() instanceof StringLiteralExpression)) {
return;
}
MethodMatcher.MethodMatchParameter methodMatchParameter = new MethodMatcher.StringParameterMatcher(psiElement.getContext(), 2)
.withSignature("\\Doctrine\\ORM\\QueryBuilder", "from")
.match();
if(methodMatchParameter == null) {
return;
}
QueryBuilderMethodReferenceParser qb = getQueryBuilderParser(methodMatchParameter.getMethodReference());
if(qb == null) {
return;
}
QueryBuilderScopeContext collect = qb.collect();
buildLookupElements(completionResultSet, collect);
}
});
extend(CompletionType.BASIC, PlatformPatterns.psiElement(), new CompletionProvider<CompletionParameters>() {
@Override
protected void addCompletions(@NotNull CompletionParameters completionParameters, ProcessingContext processingContext, @NotNull CompletionResultSet completionResultSet) {
PsiElement psiElement = completionParameters.getOriginalPosition();
if (!Symfony2ProjectComponent.isEnabled(psiElement) || !(psiElement.getContext() instanceof StringLiteralExpression)) {
return;
}
MethodMatcher.MethodMatchParameter methodMatchParameter = new MethodMatcher.StringParameterMatcher(psiElement.getContext(), 0)
.withSignature("\\Doctrine\\ORM\\EntityRepository", "createQueryBuilder")
.match();
if(methodMatchParameter == null) {
return;
}
for(String type: methodMatchParameter.getMethodReference().getType().getTypes()) {
// strip last method call
if(type.endsWith(".createQueryBuilder")) {
attachClassNames(completionResultSet, type.substring(0, type.length() - ".createQueryBuilder".length()));
}
}
}
});
extend(CompletionType.BASIC, PlatformPatterns.psiElement(), new CompletionProvider<CompletionParameters>() {
@Override
protected void addCompletions(@NotNull CompletionParameters completionParameters, ProcessingContext processingContext, @NotNull CompletionResultSet completionResultSet) {
PsiElement psiElement = completionParameters.getOriginalPosition();
if (!Symfony2ProjectComponent.isEnabled(psiElement) || !(psiElement.getContext() instanceof StringLiteralExpression)) {
return;
}
MethodMatcher.MethodMatchParameter methodMatchParameter = new MethodMatcher.StringParameterMatcher(psiElement.getContext(), 1)
.withSignature("\\Doctrine\\ORM\\QueryBuilder", "from")
.match();
if(methodMatchParameter == null) {
return;
}
MethodReference methodReference = methodMatchParameter.getMethodReference();
String repoName = PhpElementsUtil.getStringValue(methodReference.getParameters()[0]);
if(repoName != null) {
attachClassNames(completionResultSet, repoName);
}
}