This repository has been archived by the owner on Apr 21, 2023. It is now read-only.
/
IdeCrossrefProposalProvider.java
101 lines (91 loc) · 4.06 KB
/
IdeCrossrefProposalProvider.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/**
* Copyright (c) 2015 itemis AG (http://www.itemis.eu) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.eclipse.xtext.ide.editor.contentassist;
import com.google.common.base.Predicate;
import com.google.inject.Inject;
import org.apache.log4j.Logger;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.xtend.lib.annotations.AccessorType;
import org.eclipse.xtend.lib.annotations.Accessors;
import org.eclipse.xtext.CrossReference;
import org.eclipse.xtext.ide.editor.contentassist.ContentAssistContext;
import org.eclipse.xtext.ide.editor.contentassist.ContentAssistEntry;
import org.eclipse.xtext.ide.editor.contentassist.IIdeContentProposalAcceptor;
import org.eclipse.xtext.ide.editor.contentassist.IdeContentProposalCreator;
import org.eclipse.xtext.ide.editor.contentassist.IdeContentProposalPriorities;
import org.eclipse.xtext.naming.IQualifiedNameConverter;
import org.eclipse.xtext.resource.IEObjectDescription;
import org.eclipse.xtext.scoping.IScope;
import org.eclipse.xtext.xbase.lib.Exceptions;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
import org.eclipse.xtext.xbase.lib.Pure;
/**
* Special content assist proposal provider for cross-references.
* @noreference
*/
@SuppressWarnings("all")
public class IdeCrossrefProposalProvider {
private final static Logger LOG = Logger.getLogger(IdeCrossrefProposalProvider.class);
@Accessors(AccessorType.PROTECTED_GETTER)
@Inject
private IQualifiedNameConverter qualifiedNameConverter;
@Accessors(AccessorType.PROTECTED_GETTER)
@Inject
private IdeContentProposalCreator proposalCreator;
@Inject
private IdeContentProposalPriorities proposalPriorities;
public void lookupCrossReference(final IScope scope, final CrossReference crossReference, final ContentAssistContext context, final IIdeContentProposalAcceptor acceptor, final Predicate<IEObjectDescription> filter) {
try {
Iterable<IEObjectDescription> _queryScope = this.queryScope(scope, crossReference, context);
for (final IEObjectDescription candidate : _queryScope) {
{
boolean _canAcceptMoreProposals = acceptor.canAcceptMoreProposals();
boolean _not = (!_canAcceptMoreProposals);
if (_not) {
return;
}
boolean _apply = filter.apply(candidate);
if (_apply) {
final ContentAssistEntry entry = this.createProposal(candidate, crossReference, context);
acceptor.accept(entry, this.proposalPriorities.getCrossRefPriority(candidate, entry));
}
}
}
} catch (final Throwable _t) {
if (_t instanceof UnsupportedOperationException) {
final UnsupportedOperationException uoe = (UnsupportedOperationException)_t;
IdeCrossrefProposalProvider.LOG.error("Failed to create content assist proposals for cross-reference.", uoe);
} else {
throw Exceptions.sneakyThrow(_t);
}
}
}
protected Iterable<IEObjectDescription> queryScope(final IScope scope, final CrossReference crossReference, final ContentAssistContext context) {
return scope.getAllElements();
}
protected ContentAssistEntry createProposal(final IEObjectDescription candidate, final CrossReference crossRef, final ContentAssistContext context) {
final Procedure1<ContentAssistEntry> _function = (ContentAssistEntry it) -> {
it.setSource(candidate);
EClass _eClass = candidate.getEClass();
String _name = null;
if (_eClass!=null) {
_name=_eClass.getName();
}
it.setDescription(_name);
};
return this.proposalCreator.createProposal(this.qualifiedNameConverter.toString(candidate.getName()), context, _function);
}
@Pure
protected IQualifiedNameConverter getQualifiedNameConverter() {
return this.qualifiedNameConverter;
}
@Pure
protected IdeContentProposalCreator getProposalCreator() {
return this.proposalCreator;
}
}