/* * 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 com.intellij.codeInsight.completion; import com.intellij.patterns.PlatformPatterns; import com.intellij.psi.*; import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference; import com.intellij.psi.javadoc.PsiDocTag; import com.intellij.util.ThreeState; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import static com.intellij.patterns.PsiJavaPatterns.psiElement; /** * @author peter */ public class JavadocCompletionConfidence extends CompletionConfidence { @NotNull @Override public ThreeState shouldSkipAutopopup(@NotNull PsiElement contextElement, @NotNull PsiFile psiFile, int offset) { if (psiElement().inside(PsiDocTag.class).accepts(contextElement)) { if (findJavaReference(psiFile, offset - 1) != null) { return ThreeState.NO; } if (PlatformPatterns.psiElement(JavaDocTokenType.DOC_TAG_NAME).accepts(contextElement)) { return ThreeState.NO; } if (contextElement.textMatches("#")) { return ThreeState.NO; } } return super.shouldSkipAutopopup(contextElement, psiFile, offset); } @Nullable private static PsiJavaReference findJavaReference(final PsiFile file, final int offset) { PsiReference reference = file.findReferenceAt(offset); if (reference instanceof PsiMultiReference) { for (final PsiReference psiReference : ((PsiMultiReference)reference).getReferences()) { if (psiReference instanceof PsiJavaReference) { return (PsiJavaReference)psiReference; } } } return reference instanceof PsiJavaReference ? (PsiJavaReference)reference : null; } }