mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
maven: smart completion suggests basic variants in maven dom
This commit is contained in:
+2
-1
@@ -9,7 +9,7 @@ import org.jetbrains.idea.maven.model.MavenId;
|
||||
import java.util.Collection;
|
||||
import java.util.Set;
|
||||
|
||||
public class MavenArtifactCoordinatesGroupIdConverter extends MavenArtifactCoordinatesConverter {
|
||||
public class MavenArtifactCoordinatesGroupIdConverter extends MavenArtifactCoordinatesConverter implements MavenSmartConverter<String> {
|
||||
@Override
|
||||
protected boolean doIsValid(MavenId id, MavenProjectIndicesManager manager, ConvertContext context) {
|
||||
if (StringUtil.isEmpty(id.getGroupId())) return false;
|
||||
@@ -21,6 +21,7 @@ public class MavenArtifactCoordinatesGroupIdConverter extends MavenArtifactCoord
|
||||
return manager.getGroupIds();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Collection<String> getSmartVariants(ConvertContext convertContext) {
|
||||
Set<String> groupIds = new HashSet<String>();
|
||||
String artifactId = MavenArtifactCoordinatesHelper.getId(convertContext).getArtifactId();
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.idea.maven.dom.converters;
|
||||
|
||||
import com.intellij.util.xml.ConvertContext;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public interface MavenSmartConverter<T> {
|
||||
Collection<T> getSmartVariants(ConvertContext convertContext);
|
||||
}
|
||||
-87
@@ -1,87 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.idea.maven.dom.model.completion;
|
||||
|
||||
import com.intellij.codeInsight.completion.CompletionContributor;
|
||||
import com.intellij.codeInsight.completion.CompletionParameters;
|
||||
import com.intellij.codeInsight.completion.CompletionResultSet;
|
||||
import com.intellij.codeInsight.completion.CompletionType;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.xml.XmlText;
|
||||
import com.intellij.psi.xml.XmlToken;
|
||||
import com.intellij.util.xml.Converter;
|
||||
import com.intellij.util.xml.impl.GenericDomValueReference;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.maven.dom.converters.MavenArtifactCoordinatesGroupIdConverter;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
public class MavenGroupIdSmartCompletionContributor extends CompletionContributor {
|
||||
|
||||
@Override
|
||||
public void fillCompletionVariants(final CompletionParameters parameters, final CompletionResultSet result) {
|
||||
|
||||
if (parameters.getCompletionType() != CompletionType.SMART) {
|
||||
return;
|
||||
}
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
final GenericDomValueReference reference = getReference(parameters);
|
||||
if (reference == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
Collection<String> variants =
|
||||
((MavenArtifactCoordinatesGroupIdConverter)reference.getConverter()).getSmartVariants(reference.getConvertContext());
|
||||
|
||||
for (String variant : variants) {
|
||||
if (!StringUtil.isEmptyOrSpaces(variant)) {
|
||||
result.addElement(LookupElementBuilder.create(variant));
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private GenericDomValueReference getReference(CompletionParameters parameters) {
|
||||
|
||||
if (!(parameters.getPosition() instanceof XmlToken)) return null;
|
||||
|
||||
PsiReference[] references = getReferences(parameters);
|
||||
for (final PsiReference psiReference : references) {
|
||||
if (psiReference instanceof GenericDomValueReference) {
|
||||
final Converter converter = ((GenericDomValueReference)psiReference).getConverter();
|
||||
if (converter instanceof MavenArtifactCoordinatesGroupIdConverter) {
|
||||
return (GenericDomValueReference)psiReference;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static PsiReference[] getReferences(CompletionParameters parameters) {
|
||||
PsiElement psiElement = parameters.getPosition().getParent();
|
||||
|
||||
return psiElement instanceof XmlText ? psiElement.getParent().getReferences() : psiElement.getReferences();
|
||||
}
|
||||
}
|
||||
+108
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.jetbrains.idea.maven.dom.model.completion;
|
||||
|
||||
import com.intellij.codeInsight.completion.CompletionContributor;
|
||||
import com.intellij.codeInsight.completion.CompletionParameters;
|
||||
import com.intellij.codeInsight.completion.CompletionResultSet;
|
||||
import com.intellij.codeInsight.completion.CompletionType;
|
||||
import com.intellij.codeInsight.lookup.LookupElement;
|
||||
import com.intellij.codeInsight.lookup.LookupElementBuilder;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.util.Computable;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiNamedElement;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.impl.source.xml.TagNameReference;
|
||||
import com.intellij.psi.xml.XmlText;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.xml.Converter;
|
||||
import com.intellij.util.xml.ResolvingConverter;
|
||||
import com.intellij.util.xml.impl.GenericDomValueReference;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.dom.MavenDomUtil;
|
||||
import org.jetbrains.idea.maven.dom.converters.MavenSmartConverter;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
public class MavenSmartCompletionContributor extends CompletionContributor {
|
||||
@Override
|
||||
public void fillCompletionVariants(final CompletionParameters parameters, CompletionResultSet result) {
|
||||
if (parameters.getCompletionType() != CompletionType.SMART) return;
|
||||
|
||||
Collection<?> variants = ApplicationManager.getApplication().runReadAction(new Computable<Collection<?>>() {
|
||||
@Override
|
||||
public Collection<?> compute() {
|
||||
return getVariants(parameters);
|
||||
}
|
||||
});
|
||||
|
||||
for (Object each : variants) {
|
||||
LookupElement e;
|
||||
if (each instanceof LookupElement) {
|
||||
e = (LookupElement)each;
|
||||
}
|
||||
else if (each instanceof String) {
|
||||
e = LookupElementBuilder.create((String)each);
|
||||
}
|
||||
else if (each instanceof PsiNamedElement) {
|
||||
e = LookupElementBuilder.create((PsiNamedElement)each);
|
||||
}
|
||||
else {
|
||||
e = LookupElementBuilder.create(each, String.valueOf(each));
|
||||
}
|
||||
result.addElement(e);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Collection<?> getVariants(CompletionParameters parameters) {
|
||||
if (!MavenDomUtil.isMavenFile(parameters.getOriginalFile())) return Collections.emptyList();
|
||||
|
||||
SmartList<?> result = new SmartList<Object>();
|
||||
|
||||
for (PsiReference each : getReferences(parameters)) {
|
||||
if (each instanceof TagNameReference) continue;
|
||||
|
||||
if (each instanceof GenericDomValueReference) {
|
||||
GenericDomValueReference reference = (GenericDomValueReference)each;
|
||||
|
||||
Converter converter = reference.getConverter();
|
||||
|
||||
if (converter instanceof MavenSmartConverter) {
|
||||
result.addAll(((MavenSmartConverter)converter).getSmartVariants(reference.getConvertContext()));
|
||||
}
|
||||
else if (converter instanceof ResolvingConverter) {
|
||||
//noinspection unchecked
|
||||
result.addAll(((ResolvingConverter)converter).getVariants(reference.getConvertContext()));
|
||||
}
|
||||
}
|
||||
else {
|
||||
//noinspection unchecked
|
||||
Collections.addAll((Collection)result, each.getVariants());
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static PsiReference[] getReferences(CompletionParameters parameters) {
|
||||
PsiElement psiElement = parameters.getPosition().getParent();
|
||||
return psiElement instanceof XmlText ? psiElement.getParent().getReferences() : psiElement.getReferences();
|
||||
}
|
||||
}
|
||||
@@ -66,8 +66,11 @@
|
||||
<dom.extender domClass="org.jetbrains.idea.maven.dom.model.MavenDomConfigurationParameter"
|
||||
extenderClass="org.jetbrains.idea.maven.dom.MavenPluginConfigurationParameterDomExtender"/>
|
||||
|
||||
<completion.contributor language="any" implementationClass="org.jetbrains.idea.maven.dom.references.MavenPropertyCompletionContributor"
|
||||
<completion.contributor language="any"
|
||||
implementationClass="org.jetbrains.idea.maven.dom.references.MavenPropertyCompletionContributor"
|
||||
id="Maven"/>
|
||||
<completion.contributor language="XML"
|
||||
implementationClass="org.jetbrains.idea.maven.dom.model.completion.MavenSmartCompletionContributor"/>
|
||||
|
||||
<psi.referenceContributor implementation="org.jetbrains.idea.maven.dom.references.MavenPropertyPsiReferenceContributor"/>
|
||||
<usageTargetProvider implementation="org.jetbrains.idea.maven.dom.references.MavenUsageTargetProvider"/>
|
||||
@@ -96,8 +99,6 @@
|
||||
<gotoFileContributor implementation="org.jetbrains.idea.maven.utils.MavenGotoSettingsFileContibutor"/>
|
||||
<fileTemplateGroup implementation="org.jetbrains.idea.maven.utils.MavenFileTemplateGroupFactory"/>
|
||||
|
||||
<completion.contributor language="XML"
|
||||
implementationClass="org.jetbrains.idea.maven.dom.model.completion.MavenGroupIdSmartCompletionContributor"/>
|
||||
<annotator language="XML" implementationClass="org.jetbrains.idea.maven.dom.annotator.MavenDomGutterAnnotator"/>
|
||||
</extensions>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user