@Nullable public static WeighingComparable<PsiElement, ProximityLocation> getProximity(final Computable<PsiElement> elementComputable, final PsiElement context, ProcessingContext processingContext) { PsiElement element = elementComputable.compute(); if (element == null) return null; if (element instanceof MetadataPsiElementBase) return null; if (context == null) return null; Module contextModule = processingContext.get(MODULE_BY_LOCATION); if (contextModule == null) { contextModule = ModuleUtilCore.findModuleForPsiElement(context); processingContext.put(MODULE_BY_LOCATION, contextModule); } if (contextModule == null) return null; return new WeighingComparable<PsiElement,ProximityLocation>(elementComputable, new ProximityLocation(context, contextModule, processingContext), PROXIMITY_WEIGHERS); }
@Override public int compare(final Object o1, final Object o2) { PsiElement element1 = o1 instanceof PsiElement ? (PsiElement)o1 : null; PsiElement element2 = o2 instanceof PsiElement ? (PsiElement)o2 : null; if (element1 == null) return element2 == null ? 0 : 1; if (element2 == null) return -1; final WeighingComparable<PsiElement, ProximityLocation> proximity1 = myProximities.get(element1); final WeighingComparable<PsiElement, ProximityLocation> proximity2 = myProximities.get(element2); if (proximity1 == null || proximity2 == null) { return 0; } if (!proximity1.equals(proximity2)) { return - proximity1.compareTo(proximity2); } if (myContext == null) return 0; Module contextModule = ModuleUtil.findModuleForPsiElement(myContext); if (contextModule == null) return 0; StatisticsManager statisticsManager = StatisticsManager.getInstance(); final ProximityLocation location = new ProximityLocation(myContext, contextModule); int count1 = statisticsManager.getUseCount(STATISTICS_KEY, element1, location); int count2 = statisticsManager.getUseCount(STATISTICS_KEY, element1, location); return count2 - count1; }
@Nullable public static WeighingComparable<PsiElement, ProximityLocation> getProximity(final Computable<PsiElement> elementComputable, final PsiElement context, ProcessingContext processingContext) { PsiElement element = elementComputable.compute(); if (element == null) return null; if (element instanceof MetadataPsiElementBase) return null; if (context == null) return null; Module contextModule = processingContext.get(MODULE_BY_LOCATION); if (contextModule == null) { contextModule = ModuleUtil.findModuleForPsiElement(context); processingContext.put(MODULE_BY_LOCATION, contextModule); } if (contextModule == null) return null; return new WeighingComparable<PsiElement,ProximityLocation>(elementComputable, new ProximityLocation(context, contextModule, processingContext), PROXIMITY_WEIGHERS); }
@Override public int compare(final Object o1, final Object o2) { PsiElement element1 = o1 instanceof PsiElement ? (PsiElement)o1 : null; PsiElement element2 = o2 instanceof PsiElement ? (PsiElement)o2 : null; if (element1 == null) return element2 == null ? 0 : 1; if (element2 == null) return -1; if (myContext != null && myContextModule != null) { final ProximityLocation location = new ProximityLocation(myContext, myContextModule); StatisticsInfo info1 = StatisticsManager.serialize(STATISTICS_KEY, element1, location); StatisticsInfo info2 = StatisticsManager.serialize(STATISTICS_KEY, element2, location); if (info1 != null && info2 != null) { StatisticsManager statisticsManager = StatisticsManager.getInstance(); int count1 = statisticsManager.getLastUseRecency(info1); int count2 = statisticsManager.getLastUseRecency(info2); if (count1 != count2) { return count1 < count2 ? -1 : 1; } } } final WeighingComparable<PsiElement, ProximityLocation> proximity1 = myProximities.get(element1); final WeighingComparable<PsiElement, ProximityLocation> proximity2 = myProximities.get(element2); if (proximity1 == null || proximity2 == null) { return 0; } return -proximity1.compareTo(proximity2); }
@Nullable public static WeighingComparable<PsiElement, ProximityLocation> getProximity(final PsiElement element, final PsiElement context) { if (element == null) return null; if (element instanceof MetadataPsiElementBase) return null; final Module contextModule = context != null ? ModuleUtilCore.findModuleForPsiElement(context) : null; return WeighingService.weigh(WEIGHER_KEY, element, new ProximityLocation(context, contextModule)); }
@Nullable public static WeighingComparable<PsiElement, ProximityLocation> getProximity(final PsiElement element, final PsiElement context) { if (element == null) return null; if (element instanceof MetadataPsiElementBase) return null; final Module contextModule = context != null ? ModuleUtil.findModuleForPsiElement(context) : null; return WeighingService.weigh(WEIGHER_KEY, element, new ProximityLocation(context, contextModule)); }
@Override protected WeighingComparable<PsiElement, ProximityLocation> create(final PsiElement key) { return getProximity(key, myContext); }
@Nullable public static WeighingComparable<PsiElement, ProximityLocation> getProximity(final PsiElement element, final PsiElement context, ProcessingContext processingContext) { return getProximity(new Computable.PredefinedValueComputable<PsiElement>(element), context, processingContext); }