Registered annotations provider as a service instead of static class to avoid problems with projects disposal.

This commit is contained in:
Evgeny Gerashchenko
2012-07-02 23:21:22 +04:00
parent 23a1c85c44
commit fa3e3ee104
8 changed files with 29 additions and 45 deletions
@@ -1617,7 +1617,7 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
result.addAll(Arrays.asList(list.getAnnotations()));
}
PsiAnnotation[] externalAnnotations = ExternalAnnotationsProvider.getInstance().findExternalAnnotations(owner.getProject(), owner);
PsiAnnotation[] externalAnnotations = ExternalAnnotationsProvider.getInstance(owner.getProject()).findExternalAnnotations(owner);
if (externalAnnotations != null) {
result.addAll(Arrays.asList(externalAnnotations));
}
@@ -1635,6 +1635,6 @@ public class JavaDescriptorResolver implements DependencyClassByQualifiedNameRes
}
}
return ExternalAnnotationsProvider.getInstance().findExternalAnnotation(owner.getProject(), owner, fqName);
return ExternalAnnotationsProvider.getInstance(owner.getProject()).findExternalAnnotation(owner, fqName);
}
}
@@ -105,13 +105,13 @@ public class CoreAnnotationsProvider extends ExternalAnnotationsProvider {
@Override
@Nullable
public PsiAnnotation findExternalAnnotation(@NotNull Project project, @NotNull final PsiModifierListOwner listOwner, @NotNull final String annotationFQN) {
public PsiAnnotation findExternalAnnotation(@NotNull final PsiModifierListOwner listOwner, @NotNull final String annotationFQN) {
return collectExternalAnnotations(listOwner).get(annotationFQN);
}
@Override
@Nullable
public PsiAnnotation[] findExternalAnnotations(@NotNull Project project, @NotNull final PsiModifierListOwner listOwner) {
public PsiAnnotation[] findExternalAnnotations(@NotNull final PsiModifierListOwner listOwner) {
final Map<String, PsiAnnotation> result = collectExternalAnnotations(listOwner);
return result.isEmpty() ? null : result.values().toArray(new PsiAnnotation[result.size()]);
}
@@ -16,6 +16,7 @@
package org.jetbrains.jet.lang.resolve.java.extAnnotations;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiModifierListOwner;
@@ -29,20 +30,13 @@ import org.jetbrains.annotations.Nullable;
*/
@Deprecated
public abstract class ExternalAnnotationsProvider {
private static ExternalAnnotationsProvider instance;
@Nullable
public abstract PsiAnnotation findExternalAnnotation(@NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN);
@Nullable
public abstract PsiAnnotation findExternalAnnotation(@NotNull Project project, @NotNull PsiModifierListOwner listOwner, @NotNull String annotationFQN);
public abstract PsiAnnotation[] findExternalAnnotations(@NotNull PsiModifierListOwner listOwner);
@Nullable
public abstract PsiAnnotation[] findExternalAnnotations(@NotNull Project project, @NotNull PsiModifierListOwner listOwner);
@NotNull
public static ExternalAnnotationsProvider getInstance() {
return instance;
}
public static void setInstance(@NotNull ExternalAnnotationsProvider instance) {
ExternalAnnotationsProvider.instance = instance;
public static ExternalAnnotationsProvider getInstance(@NotNull Project project) {
return ServiceManager.getService(project, ExternalAnnotationsProvider.class);
}
}