From 66a0e59ca961395fe814f5d1161be2b56d82d548 Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 14 Aug 2015 15:33:26 +0300 Subject: [PATCH] 'Add annotations to classpath' quickfix supported when IDEA is running from sources --- ...insAnnotationsExternalLibraryResolver.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/JetBrainsAnnotationsExternalLibraryResolver.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/JetBrainsAnnotationsExternalLibraryResolver.java index f377d28563bd..28d031196eaa 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/JetBrainsAnnotationsExternalLibraryResolver.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/JetBrainsAnnotationsExternalLibraryResolver.java @@ -16,18 +16,20 @@ package com.intellij.codeInsight.daemon.impl.quickfix; import com.intellij.codeInsight.AnnotationUtil; -import com.intellij.openapi.roots.ExternalLibraryDescriptor; import com.intellij.codeInsight.daemon.quickFix.ExternalLibraryResolver; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.module.EffectiveLanguageLevelUtil; import com.intellij.openapi.module.Module; +import com.intellij.openapi.roots.ExternalLibraryDescriptor; import com.intellij.openapi.util.io.FileUtil; import com.intellij.pom.java.LanguageLevel; import com.intellij.util.ThreeState; +import org.intellij.lang.annotations.Flow; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; +import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -39,17 +41,34 @@ public class JetBrainsAnnotationsExternalLibraryResolver extends ExternalLibrary @NotNull @Override public List getLibraryClassesRoots() { - return Collections.singletonList(FileUtil.toSystemIndependentName(new File(PathManager.getLibPath(), "annotations.jar").getAbsolutePath())); + File annotationsJar = new File(PathManager.getLibPath(), "annotations.jar"); + if (annotationsJar.exists()) { + return Collections.singletonList(FileUtil.toSystemIndependentName(annotationsJar.getAbsolutePath())); + } + return getPathsToAnnotationsDirectoriesInDevelopmentMode("annotations"); } }; + private static final ExternalLibraryDescriptor JAVA8 = new JetBrainsAnnotationsLibraryDescriptor() { @NotNull @Override public List getLibraryClassesRoots() { - return Collections.singletonList(FileUtil.toSystemIndependentName(new File(PathManager.getHomePath(), "redist/annotations-java8.jar").getAbsolutePath())); + File annotationsJar = new File(PathManager.getHomePath(), "redist/annotations-java8.jar"); + if (annotationsJar.exists()) { + return Collections.singletonList(FileUtil.toSystemIndependentName(annotationsJar.getAbsolutePath())); + } + return getPathsToAnnotationsDirectoriesInDevelopmentMode("annotations-java8"); } }; + @NotNull + private static List getPathsToAnnotationsDirectoriesInDevelopmentMode(final String moduleName) { + final String annotationsRoot = PathManager.getJarPathForClass(Flow.class); + if (annotationsRoot == null) return Collections.emptyList(); + return Arrays.asList(annotationsRoot, FileUtil.toSystemIndependentName(new File(new File(annotationsRoot).getParentFile(), + moduleName).getAbsolutePath())); + } + @Nullable @Override public ExternalClassResolveResult resolveClass(@NotNull String shortClassName, @NotNull ThreeState isAnnotation, @NotNull Module contextModule) { -- 2.32.0