From 303542df46102fb066d592abd9465fe641e78d0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Kypta?= Date: Thu, 16 Jul 2015 13:11:12 +0200 Subject: [PATCH] Fix #57 and freeze on version 1.3.1 --- META-INF/plugin.xml | 5 +++-- .../butterknife/ButterKnifeFactory.java | 20 +++++++++++++++++++ .../butterknifezelezny/common/Utils.java | 14 +++++++++++++ .../navigation/NavigationMarkerProvider.java | 5 ++++- 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/META-INF/plugin.xml b/META-INF/plugin.xml index 876eee5..e27cb42 100644 --- a/META-INF/plugin.xml +++ b/META-INF/plugin.xml @@ -1,7 +1,7 @@ eu.inmite.android.plugin.butterknifezelezny Android ButterKnife Zelezny - 1.4-SNAPSHOT + 1.3.1 Avast - 1.4-SNAPSHOT + 1.3.1 (7/16/2015)
    +
  • Fixed plugin crash (#57)
1.3 (7/15/2015) diff --git a/src/com/avast/android/butterknifezelezny/butterknife/ButterKnifeFactory.java b/src/com/avast/android/butterknifezelezny/butterknife/ButterKnifeFactory.java index 1fa9042..debd5ef 100644 --- a/src/com/avast/android/butterknifezelezny/butterknife/ButterKnifeFactory.java +++ b/src/com/avast/android/butterknifezelezny/butterknife/ButterKnifeFactory.java @@ -8,6 +8,7 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.search.EverythingGlobalScope; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Factory for obtaining proper ButterKnife version. @@ -38,12 +39,31 @@ private ButterKnifeFactory() { * @param psiElement Element for which we are searching for ButterKnife * @return ButterKnife */ + @Nullable public static IButterKnife findButterKnifeForPsiElement(@NotNull Project project, @NotNull PsiElement psiElement) { for (IButterKnife butterKnife : sSupportedButterKnives) { if (Utils.isClassAvailableForPsiFile(project, psiElement, butterKnife.getDistinctClassName())) { return butterKnife; } } + // we haven't found any version of ButterKnife in the module, let's fallback to the whole project + return findButterKnifeForProject(project); + } + + /** + * Find ButterKnife that is available in the {@link Project}. + * + * @param project Project + * @return ButterKnife + * @since 1.3.1 + */ + @Nullable + private static IButterKnife findButterKnifeForProject(@NotNull Project project) { + for (IButterKnife butterKnife : sSupportedButterKnives) { + if (Utils.isClassAvailableForProject(project, butterKnife.getDistinctClassName())) { + return butterKnife; + } + } return null; } diff --git a/src/com/avast/android/butterknifezelezny/common/Utils.java b/src/com/avast/android/butterknifezelezny/common/Utils.java index 49cc8f0..1693a30 100644 --- a/src/com/avast/android/butterknifezelezny/common/Utils.java +++ b/src/com/avast/android/butterknifezelezny/common/Utils.java @@ -315,4 +315,18 @@ public static boolean isClassAvailableForPsiFile(@NotNull Project project, @NotN PsiClass classInModule = JavaPsiFacade.getInstance(project).findClass(className, moduleScope); return classInModule != null; } + /** + * Check whether classpath of a the whole project contains given class. + * This is only fallback for wrongly setup projects. + * + * @param project Project + * @param className Class name of the searched class + * @return True if the class is present on the classpath + * @since 1.3.1 + */ + public static boolean isClassAvailableForProject(@NotNull Project project, @NotNull String className) { + PsiClass classInModule = JavaPsiFacade.getInstance(project).findClass(className, + new EverythingGlobalScope(project)); + return classInModule != null; + } } diff --git a/src/com/avast/android/butterknifezelezny/navigation/NavigationMarkerProvider.java b/src/com/avast/android/butterknifezelezny/navigation/NavigationMarkerProvider.java index 74c9e57..b281df7 100644 --- a/src/com/avast/android/butterknifezelezny/navigation/NavigationMarkerProvider.java +++ b/src/com/avast/android/butterknifezelezny/navigation/NavigationMarkerProvider.java @@ -67,7 +67,7 @@ public ButterKnifeLink(String srcAnnotation, String dstAnnotation) { } @Nullable - public static ButterKnifeLink getButterKnifeLink(@NotNull IButterKnife butterKnife, + public static ButterKnifeLink getButterKnifeLink(@Nullable IButterKnife butterKnife, @NotNull Predicate predicate) { Map, ButterKnifeLink> subMap = sMap.get(butterKnife); if (subMap != null) { @@ -88,6 +88,9 @@ public static ButterKnifeLink getButterKnifeLink(@NotNull IButterKnife butterKni @Override public LineMarkerInfo getLineMarkerInfo(@NotNull final PsiElement element) { final IButterKnife butterKnife = ButterKnifeFactory.findButterKnifeForPsiElement(element.getProject(), element); + if (butterKnife == null) { + return null; + } if (IS_FIELD_IDENTIFIER.apply(element)) { return getNavigationLineMarker((PsiIdentifier)element, ButterKnifeLink.getButterKnifeLink(butterKnife, IS_FIELD_IDENTIFIER));