summaryrefslogtreecommitdiff
path: root/java/java-impl/src/com/intellij/psi/impl
diff options
context:
space:
mode:
Diffstat (limited to 'java/java-impl/src/com/intellij/psi/impl')
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java32
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java31
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/search/AnnotatedPackagesSearcher.java135
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/search/VariableInIncompleteCodeSearcher.java71
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/manipulators/PsiDocTagValueManipulator.java57
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/manipulators/StringLiteralManipulator.java57
-rw-r--r--java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/GenericReferenceProvider.java44
7 files changed, 34 insertions, 393 deletions
diff --git a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java
index 58476c6fc799..8ea592fd99aa 100644
--- a/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java
+++ b/java/java-impl/src/com/intellij/psi/impl/JavaPsiImplementationHelperImpl.java
@@ -23,6 +23,7 @@ import com.intellij.lang.java.JavaLanguage;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.StdFileTypes;
+import com.intellij.openapi.module.EffectiveLanguageLevelUtil;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.project.Project;
@@ -39,6 +40,7 @@ import com.intellij.psi.impl.compiled.ClsClassImpl;
import com.intellij.psi.impl.source.codeStyle.ImportHelper;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.psi.util.PsiUtil;
import com.intellij.util.IncorrectOperationException;
import com.intellij.util.containers.ContainerUtil;
import gnu.trove.THashSet;
@@ -137,9 +139,35 @@ public class JavaPsiImplementationHelperImpl extends JavaPsiImplementationHelper
return clsFile;
}
- @Nullable
+ @NotNull
@Override
- public LanguageLevel getClassesLanguageLevel(VirtualFile virtualFile) {
+ public LanguageLevel getEffectiveLanguageLevel(@Nullable VirtualFile virtualFile) {
+ if (virtualFile == null) return PsiUtil.getLanguageLevel(myProject);
+
+ final VirtualFile folder = virtualFile.getParent();
+ if (folder != null) {
+ final LanguageLevel level = folder.getUserData(LanguageLevel.KEY);
+ if (level != null) return level;
+ }
+
+ final ProjectFileIndex index = ProjectRootManager.getInstance(myProject).getFileIndex();
+ Module module = index.getModuleForFile(virtualFile);
+ if (module != null && index.isInSourceContent(virtualFile)) {
+ return EffectiveLanguageLevelUtil.getEffectiveLanguageLevel(module);
+ }
+
+ LanguageLevel classesLanguageLevel = getClassesLanguageLevel(virtualFile);
+ return classesLanguageLevel != null ? classesLanguageLevel : PsiUtil.getLanguageLevel(myProject);
+ }
+
+ /**
+ * For files under a library source root, returns the language level configured for the corresponding classes root.
+ *
+ * @param virtualFile virtual file for which language level is requested.
+ * @return language level for classes root or null if file is not under a library source root or no matching classes root is found.
+ */
+ @Nullable
+ private LanguageLevel getClassesLanguageLevel(VirtualFile virtualFile) {
final ProjectFileIndex index = ProjectRootManager.getInstance(myProject).getFileIndex();
final VirtualFile sourceRoot = index.getSourceRootForFile(virtualFile);
final VirtualFile folder = virtualFile.getParent();
diff --git a/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java b/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java
index 5464c6cbd83d..005629c81cd9 100644
--- a/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java
+++ b/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java
@@ -27,17 +27,13 @@ import com.intellij.ide.fileTemplates.JavaTemplateUtil;
import com.intellij.ide.fileTemplates.ui.CreateFromTemplateDialog;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.StdFileTypes;
-import com.intellij.openapi.module.LanguageLevelUtil;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.LanguageLevelProjectExtension;
import com.intellij.openapi.roots.ProjectFileIndex;
import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.*;
+import com.intellij.psi.impl.JavaPsiImplementationHelper;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -162,7 +158,7 @@ public class JavaDirectoryServiceImpl extends CoreJavaDirectoryService {
}
private static String getIncorrectTemplateMessage(String templateName) {
- return PsiBundle.message("psi.error.incorroect.class.template.message",
+ return PsiBundle.message("psi.error.incorrect.class.template.message",
FileTemplateManager.getInstance().internalTemplateToSubject(templateName), templateName);
}
@@ -177,7 +173,7 @@ public class JavaDirectoryServiceImpl extends CoreJavaDirectoryService {
String fileName = name + "." + StdFileTypes.JAVA.getDefaultExtension();
directory.checkCreateFile(fileName);
- PsiNameHelper helper = JavaPsiFacade.getInstance(directory.getProject()).getNameHelper();
+ PsiNameHelper helper = PsiNameHelper.getInstance(directory.getProject());
PsiPackage aPackage = JavaDirectoryService.getInstance().getPackage(directory);
String qualifiedName = aPackage == null ? null : aPackage.getQualifiedName();
if (!StringUtil.isEmpty(qualifiedName) && !helper.isQualifiedName(qualifiedName)) {
@@ -192,28 +188,9 @@ public class JavaDirectoryServiceImpl extends CoreJavaDirectoryService {
return file.equals(sourceRoot);
}
- private static final Key<LanguageLevel> LANG_LEVEL_IN_DIRECTORY = new Key<LanguageLevel>("LANG_LEVEL_IN_DIRECTORY");
@Override
public LanguageLevel getLanguageLevel(@NotNull PsiDirectory dir) {
- synchronized (PsiLock.LOCK) {
- LanguageLevel level = dir.getUserData(LANG_LEVEL_IN_DIRECTORY);
- if (level == null) {
- level = getLanguageLevelInner(dir);
- dir.putUserData(LANG_LEVEL_IN_DIRECTORY, level);
- }
- return level;
- }
- }
-
- private static LanguageLevel getLanguageLevelInner(@NotNull PsiDirectory dir) {
- final VirtualFile virtualFile = dir.getVirtualFile();
- final Project project = dir.getProject();
- final Module module = ProjectRootManager.getInstance(project).getFileIndex().getModuleForFile(virtualFile);
- if (module != null) {
- return LanguageLevelUtil.getEffectiveLanguageLevel(module);
- }
-
- return LanguageLevelProjectExtension.getInstance(project).getLanguageLevel();
+ return JavaPsiImplementationHelper.getInstance(dir.getProject()).getEffectiveLanguageLevel(dir.getVirtualFile());
}
}
diff --git a/java/java-impl/src/com/intellij/psi/impl/search/AnnotatedPackagesSearcher.java b/java/java-impl/src/com/intellij/psi/impl/search/AnnotatedPackagesSearcher.java
deleted file mode 100644
index 8e52d775a846..000000000000
--- a/java/java-impl/src/com/intellij/psi/impl/search/AnnotatedPackagesSearcher.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2000-2013 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.
- */
-
-/*
- * @author max
- */
-package com.intellij.psi.impl.search;
-
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.*;
-import com.intellij.psi.impl.PsiManagerImpl;
-import com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.search.PsiSearchHelper;
-import com.intellij.psi.search.SearchScope;
-import com.intellij.psi.search.searches.AnnotatedPackagesSearch;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.Processor;
-import com.intellij.util.QueryExecutor;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Collection;
-
-public class AnnotatedPackagesSearcher implements QueryExecutor<PsiPackage, AnnotatedPackagesSearch.Parameters> {
- private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.search.AnnotatedPackagesSearcher");
-
- @Override
- public boolean execute(@NotNull final AnnotatedPackagesSearch.Parameters p, @NotNull final Processor<PsiPackage> consumer) {
- final PsiClass annClass = p.getAnnotationClass();
- assert annClass.isAnnotationType() : "Annotation type should be passed to annotated packages search";
-
- final String annotationFQN = annClass.getQualifiedName();
- assert annotationFQN != null;
-
- final PsiManagerImpl psiManager = (PsiManagerImpl)annClass.getManager();
- final SearchScope useScope = p.getScope();
-
- final String annotationShortName = annClass.getName();
- assert annotationShortName != null;
-
- final GlobalSearchScope scope = useScope instanceof GlobalSearchScope ? (GlobalSearchScope)useScope : null;
-
- final Collection<PsiAnnotation> annotations = JavaAnnotationIndex.getInstance().get(annotationShortName, psiManager.getProject(), scope);
- for (PsiAnnotation annotation : annotations) {
- PsiModifierList modlist = (PsiModifierList)annotation.getParent();
- final PsiElement owner = modlist.getParent();
- if (!(owner instanceof PsiClass)) continue;
- PsiClass candidate = (PsiClass)owner;
- if (!"package-info".equals(candidate.getName())) continue;
-
- LOG.assertTrue(candidate.isValid());
-
- final PsiJavaCodeReferenceElement ref = annotation.getNameReferenceElement();
- if (ref == null) continue;
-
- if (!psiManager.areElementsEquivalent(ref.resolve(), annClass)) continue;
- if (useScope instanceof GlobalSearchScope &&
- !((GlobalSearchScope)useScope).contains(candidate.getContainingFile().getVirtualFile())) {
- continue;
- }
- final String qname = candidate.getQualifiedName();
- if (qname != null && !consumer.process(JavaPsiFacade.getInstance(psiManager.getProject()).findPackage(
- qname.substring(0, qname.lastIndexOf('.'))))) {
- return false;
- }
- }
-
- PsiSearchHelper helper = PsiSearchHelper.SERVICE.getInstance(psiManager.getProject());
- final GlobalSearchScope infoFilesFilter = new PackageInfoFilesOnly();
-
- GlobalSearchScope infoFiles =
- useScope instanceof GlobalSearchScope ? ((GlobalSearchScope)useScope).intersectWith(infoFilesFilter) : infoFilesFilter;
-
- final boolean[] wantmore = {true};
- helper.processAllFilesWithWord(annotationShortName, infoFiles, new Processor<PsiFile>() {
- @Override
- public boolean process(final PsiFile psiFile) {
- PsiPackageStatement stmt = PsiTreeUtil.getChildOfType(psiFile, PsiPackageStatement.class);
- if (stmt == null) return true;
-
- final PsiModifierList annotations = stmt.getAnnotationList();
- if (annotations == null) return true;
- final PsiAnnotation ann = annotations.findAnnotation(annotationFQN);
- if (ann == null) return true;
-
- final PsiJavaCodeReferenceElement ref = ann.getNameReferenceElement();
- if (ref == null) return true;
-
- if (!psiManager.areElementsEquivalent(ref.resolve(), annClass)) return true;
-
- wantmore[0] = consumer.process(JavaPsiFacade.getInstance(psiManager.getProject()).findPackage(stmt.getPackageName()));
- return wantmore[0];
- }
- }, true);
-
- return wantmore[0];
- }
-
- private static class PackageInfoFilesOnly extends GlobalSearchScope {
- @Override
- public int compare(@NotNull final VirtualFile file1, @NotNull final VirtualFile file2) {
- return 0;
- }
-
- @Override
- public boolean contains(@NotNull final VirtualFile file) {
- return "package-info.java".equals(file.getName());
- }
-
- @Override
- public boolean isSearchInLibraries() {
- return false;
- }
-
- @Override
- public boolean isSearchInModuleContent(@NotNull final Module aModule) {
- return true;
- }
- }
-} \ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/psi/impl/search/VariableInIncompleteCodeSearcher.java b/java/java-impl/src/com/intellij/psi/impl/search/VariableInIncompleteCodeSearcher.java
deleted file mode 100644
index fc0ca69b6a4c..000000000000
--- a/java/java-impl/src/com/intellij/psi/impl/search/VariableInIncompleteCodeSearcher.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Copyright 2000-2011 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.psi.impl.search;
-
-import com.intellij.lang.java.JavaLanguage;
-import com.intellij.openapi.application.QueryExecutorBase;
-import com.intellij.psi.*;
-import com.intellij.psi.search.LocalSearchScope;
-import com.intellij.psi.search.PsiElementProcessor;
-import com.intellij.psi.search.SearchScope;
-import com.intellij.psi.search.searches.ReferencesSearch;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.Processor;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * Looks for references to local variable or method parameter in invalid (incomplete) code.
- */
-public class VariableInIncompleteCodeSearcher extends QueryExecutorBase<PsiReference, ReferencesSearch.SearchParameters> {
- public VariableInIncompleteCodeSearcher() {
- super(true);
- }
-
- @Override
- public void processQuery(@NotNull final ReferencesSearch.SearchParameters p, @NotNull final Processor<PsiReference> consumer) {
- final PsiElement refElement = p.getElementToSearch();
- if (!refElement.isValid() || !(refElement instanceof PsiLocalVariable || refElement instanceof PsiParameter)) return;
-
- final String name = ((PsiVariable)refElement).getName();
- if (name == null) return;
-
- final SearchScope scope = p.getEffectiveSearchScope();
- if (!(scope instanceof LocalSearchScope)) return;
-
- PsiElement[] elements = ((LocalSearchScope)scope).getScope();
- if (elements == null || elements.length == 0) return;
-
- PsiElementProcessor processor = new PsiElementProcessor() {
- @Override
- public boolean execute(@NotNull final PsiElement element) {
- if (element instanceof PsiJavaCodeReferenceElement) {
- final PsiJavaCodeReferenceElement ref = (PsiJavaCodeReferenceElement)element;
- if (!ref.isQualified() && name.equals(ref.getText()) &&
- ref.resolve() == null && ref.advancedResolve(true).getElement() == refElement) {
- consumer.process(ref);
- }
- }
- return true;
- }
- };
-
- for (PsiElement element : elements) {
- if (element.getLanguage().isKindOf(JavaLanguage.INSTANCE)) {
- PsiTreeUtil.processElements(element, processor);
- }
- }
- }
-}
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/manipulators/PsiDocTagValueManipulator.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/manipulators/PsiDocTagValueManipulator.java
deleted file mode 100644
index 34c1d9df885f..000000000000
--- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/manipulators/PsiDocTagValueManipulator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2000-2014 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.psi.impl.source.resolve.reference.impl.manipulators;
-
-import com.intellij.openapi.util.TextRange;
-import com.intellij.psi.AbstractElementManipulator;
-import com.intellij.psi.JavaPsiFacade;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.javadoc.PsiDocTag;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * @author Gregory.Shrago
- */
-public class PsiDocTagValueManipulator extends AbstractElementManipulator<PsiDocTag> {
-
- @Override
- public PsiDocTag handleContentChange(@NotNull PsiDocTag tag, @NotNull TextRange range, String newContent) throws IncorrectOperationException {
- final StringBuilder replacement = new StringBuilder( tag.getText() );
-
- replacement.replace(
- range.getStartOffset(),
- range.getEndOffset(),
- newContent
- );
- return (PsiDocTag)tag.replace(JavaPsiFacade.getInstance(tag.getProject()).getElementFactory().createDocTagFromText(replacement.toString()));
- }
-
- @NotNull
- @Override
- public TextRange getRangeInElement(@NotNull final PsiDocTag tag) {
- final PsiElement[] elements = tag.getDataElements();
- if (elements.length == 0) {
- final PsiElement name = tag.getNameElement();
- final int offset = name.getStartOffsetInParent() + name.getTextLength();
- return new TextRange(offset, offset);
- }
- final PsiElement first = elements[0];
- final PsiElement last = elements[elements.length - 1];
- return new TextRange(first.getStartOffsetInParent(), last.getStartOffsetInParent()+last.getTextLength());
- }
-} \ No newline at end of file
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/manipulators/StringLiteralManipulator.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/manipulators/StringLiteralManipulator.java
deleted file mode 100644
index 9d9b1f1ce9e2..000000000000
--- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/manipulators/StringLiteralManipulator.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright 2000-2014 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.psi.impl.source.resolve.reference.impl.manipulators;
-
-import com.intellij.openapi.util.TextRange;
-import com.intellij.openapi.util.text.StringUtil;
-import com.intellij.psi.*;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-
-/**
- * @author ven
- */
-public class StringLiteralManipulator extends AbstractElementManipulator<PsiLiteralExpression> {
- @Override
- public PsiLiteralExpression handleContentChange(@NotNull PsiLiteralExpression expr, @NotNull TextRange range, String newContent) throws IncorrectOperationException {
- String oldText = expr.getText();
- if (oldText.startsWith("\"")) {
- newContent = StringUtil.escapeStringCharacters(newContent);
- }
- else if (oldText.startsWith("'") && newContent.length() <= 1) {
- newContent = newContent.length() == 1 && newContent.charAt(0) == '\''? "\\'" : newContent;
- }
- else {
- throw new IncorrectOperationException("cannot handle content change for: " + oldText + ", expr: " + expr);
- }
-
- String newText = oldText.substring(0, range.getStartOffset()) + newContent + oldText.substring(range.getEndOffset());
- final PsiExpression newExpr = JavaPsiFacade.getInstance(expr.getProject()).getElementFactory().createExpressionFromText(newText, null);
- return (PsiLiteralExpression)expr.replace(newExpr);
- }
-
- @NotNull
- @Override
- public TextRange getRangeInElement(@NotNull final PsiLiteralExpression element) {
- return getValueRange(element);
- }
-
- public static TextRange getValueRange(PsiLiteralExpression element) {
- final Object value = element.getValue();
- if (!(value instanceof String || value instanceof Character)) return TextRange.from(0, element.getTextLength());
- return new TextRange(1, Math.max(1, element.getTextLength() - 1));
- }
-}
diff --git a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/GenericReferenceProvider.java b/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/GenericReferenceProvider.java
deleted file mode 100644
index 216dcddb351f..000000000000
--- a/java/java-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/GenericReferenceProvider.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright 2000-2009 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.psi.impl.source.resolve.reference.impl.providers;
-
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiReferenceProvider;
-import com.intellij.psi.scope.PsiScopeProcessor;
-import com.intellij.psi.scope.util.PsiScopesUtil;
-
-/**
- * Created by IntelliJ IDEA.
- * User: ik
- * Date: 27.03.2003
- * Time: 17:23:43
- * To change this template use Options | File Templates.
- */
-public abstract class GenericReferenceProvider extends PsiReferenceProvider {
- private boolean mySoft = false;
-
- public void handleEmptyContext(PsiScopeProcessor processor, PsiElement position) {
- PsiScopesUtil.treeWalkUp(processor, position, null);
- }
-
- public void setSoft(boolean softFlag) {
- mySoft = softFlag;
- }
-
- public boolean isSoft() {
- return mySoft;
- }
-}