diff --git a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceEx.java b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceEx.java new file mode 100644 index 000000000000..5cf710cfb5a2 --- /dev/null +++ b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceEx.java @@ -0,0 +1,30 @@ +/* + * Copyright 2000-2017 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.compiler.backwardRefs; + +import com.intellij.compiler.CompilerReferenceService; +import com.intellij.compiler.classFilesIndex.impl.UsageIndexValue; +import com.intellij.openapi.project.Project; + +import java.util.TreeSet; + +public abstract class CompilerReferenceServiceEx extends CompilerReferenceService { + protected CompilerReferenceServiceEx(Project project) { + super(project); + } + + public abstract TreeSet getMethods(String rawReturnType); +} diff --git a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceImpl.java b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceImpl.java index cd0371dba8e4..910e3aac5a3d 100644 --- a/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/backwardRefs/CompilerReferenceServiceImpl.java @@ -16,7 +16,6 @@ package com.intellij.compiler.backwardRefs; import com.intellij.compiler.CompilerDirectHierarchyInfo; -import com.intellij.compiler.CompilerReferenceService; import com.intellij.compiler.backwardRefs.view.CompilerReferenceFindUsagesTestInfo; import com.intellij.compiler.backwardRefs.view.CompilerReferenceHierarchyTestInfo; import com.intellij.compiler.backwardRefs.view.DirtyScopeTestInfo; @@ -76,7 +75,7 @@ import java.util.stream.Stream; import static com.intellij.psi.search.GlobalSearchScope.getScopeRestrictedByFileTypes; import static com.intellij.psi.search.GlobalSearchScope.notScope; -public class CompilerReferenceServiceImpl extends CompilerReferenceService implements ModificationTracker { +public class CompilerReferenceServiceImpl extends CompilerReferenceServiceEx implements ModificationTracker { private final static Logger LOG = Logger.getInstance(CompilerReferenceServiceImpl.class); private final Set myFileTypes; @@ -168,14 +167,14 @@ public class CompilerReferenceServiceImpl extends CompilerReferenceService imple } @Override - public TreeSet getMethods(String name) { + public TreeSet getMethods(String rawReturnType) { try { myReadDataLock.lock(); if (myReader == null) return null; JavaLightUsageAdapter adapter = new JavaLightUsageAdapter(); try { - final int type = adapter.findMembersForReturnType(name, myReader.getNameEnumerator()); + final int type = adapter.findMembersForReturnType(rawReturnType, myReader.getNameEnumerator()); return Stream.of(new SignatureData(type, true), new SignatureData(type, false)).flatMap(sd -> { try { List refs = new SmartList<>(); diff --git a/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/CachedRelevantStaticMethodSearcher.java b/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/CachedRelevantStaticMethodSearcher.java index c153736e65d0..0935d8bce8d9 100644 --- a/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/CachedRelevantStaticMethodSearcher.java +++ b/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/CachedRelevantStaticMethodSearcher.java @@ -16,14 +16,15 @@ package com.intellij.compiler.classFilesIndex.chainsSearch; import com.intellij.compiler.CompilerReferenceService; +import com.intellij.compiler.backwardRefs.CompilerReferenceServiceEx; import com.intellij.compiler.classFilesIndex.chainsSearch.context.ChainCompletionContext; import com.intellij.compiler.classFilesIndex.chainsSearch.context.ContextRelevantStaticMethod; +import com.intellij.compiler.classFilesIndex.impl.MethodIncompleteSignature; import com.intellij.compiler.classFilesIndex.impl.UsageIndexValue; import com.intellij.psi.*; import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import com.intellij.compiler.classFilesIndex.impl.MethodIncompleteSignature; import java.util.*; @@ -32,11 +33,11 @@ import java.util.*; */ public class CachedRelevantStaticMethodSearcher { private final HashMap myCachedResolveResults = new HashMap<>(); - private final CompilerReferenceService myIndexReader; + private final CompilerReferenceServiceEx myIndexReader; private final ChainCompletionContext myCompletionContext; public CachedRelevantStaticMethodSearcher(final ChainCompletionContext completionContext) { - myIndexReader = CompilerReferenceService.getInstance(completionContext.getProject()); + myIndexReader = (CompilerReferenceServiceEx)CompilerReferenceService.getInstance(completionContext.getProject()); myCompletionContext = completionContext; } diff --git a/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/ChainsSearcher.java b/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/ChainsSearcher.java index 8345b5479d0c..4f495618ee3d 100644 --- a/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/ChainsSearcher.java +++ b/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/ChainsSearcher.java @@ -15,7 +15,7 @@ */ package com.intellij.compiler.classFilesIndex.chainsSearch; -import com.intellij.compiler.CompilerReferenceService; +import com.intellij.compiler.backwardRefs.CompilerReferenceServiceEx; import com.intellij.compiler.classFilesIndex.chainsSearch.context.ChainCompletionContext; import com.intellij.compiler.classFilesIndex.chainsSearch.context.TargetType; import com.intellij.compiler.classFilesIndex.impl.MethodIncompleteSignature; @@ -49,7 +49,7 @@ public final class ChainsSearcher { final Set contextQNames, final int maxResultSize, final ChainCompletionContext context, - final CompilerReferenceService methodsUsageIndexReader) { + final CompilerReferenceServiceEx methodsUsageIndexReader) { final SearchInitializer initializer = createInitializer(targetType, context.getExcludedQNames(), methodsUsageIndexReader, context); if (initializer == null) { return Collections.emptyList(); @@ -66,14 +66,14 @@ public final class ChainsSearcher { @Nullable private static SearchInitializer createInitializer(final TargetType target, final Set excludedParamsTypesQNames, - final CompilerReferenceService methodsUsageIndexReader, + final CompilerReferenceServiceEx methodsUsageIndexReader, final ChainCompletionContext context) { final SortedSet methods = methodsUsageIndexReader.getMethods(target.getClassQName()); return new SearchInitializer(methods, target.getClassQName(), excludedParamsTypesQNames, context); } @NotNull - private static List search(final CompilerReferenceService indexReader, + private static List search(final CompilerReferenceServiceEx indexReader, final SearchInitializer initializer, final Set toSet, final int pathMaximalLength, diff --git a/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/completion/MethodsChainsCompletionContributor.java b/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/completion/MethodsChainsCompletionContributor.java index 26035201b277..6f530f6eb721 100644 --- a/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/completion/MethodsChainsCompletionContributor.java +++ b/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/chainsSearch/completion/MethodsChainsCompletionContributor.java @@ -3,7 +3,11 @@ package com.intellij.compiler.classFilesIndex.chainsSearch.completion; import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.compiler.CompilerReferenceService; -import com.intellij.compiler.classFilesIndex.chainsSearch.*; +import com.intellij.compiler.backwardRefs.CompilerReferenceServiceEx; +import com.intellij.compiler.classFilesIndex.chainsSearch.ChainCompletionStringUtil; +import com.intellij.compiler.classFilesIndex.chainsSearch.ChainsSearcher; +import com.intellij.compiler.classFilesIndex.chainsSearch.MethodsChain; +import com.intellij.compiler.classFilesIndex.chainsSearch.MethodsChainLookupRangingHelper; import com.intellij.compiler.classFilesIndex.chainsSearch.context.ChainCompletionContext; import com.intellij.compiler.classFilesIndex.chainsSearch.context.ContextUtil; import com.intellij.compiler.classFilesIndex.chainsSearch.context.TargetType; @@ -14,13 +18,16 @@ import com.intellij.psi.*; import com.intellij.psi.impl.source.PsiImmediateClassType; import com.intellij.psi.search.searches.DirectClassInheritorsSearch; import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.*; +import com.intellij.util.ProcessingContext; +import com.intellij.util.Processor; +import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.*; -import static com.intellij.compiler.classFilesIndex.chainsSearch.completion.CompletionContributorPatternUtil.*; +import static com.intellij.compiler.classFilesIndex.chainsSearch.completion.CompletionContributorPatternUtil.patternForMethodParameter; +import static com.intellij.compiler.classFilesIndex.chainsSearch.completion.CompletionContributorPatternUtil.patternForVariableAssignment; import static com.intellij.patterns.PsiJavaPatterns.or; /** @@ -83,7 +90,7 @@ public class MethodsChainsCompletionContributor extends CompletionContributor { final Set contextRelevantTypes, final ChainCompletionContext completionContext) { final Project project = completionContext.getProject(); - final CompilerReferenceService methodsUsageIndexReader = CompilerReferenceService.getInstance(project); + final CompilerReferenceServiceEx methodsUsageIndexReader = (CompilerReferenceServiceEx)CompilerReferenceService.getInstance(project); final List searchResult = searchChains(target, contextRelevantTypes, MAX_SEARCH_RESULT_SIZE, MAX_CHAIN_SIZE, completionContext, methodsUsageIndexReader); if (searchResult.size() < MAX_SEARCH_RESULT_SIZE) { @@ -195,7 +202,7 @@ public class MethodsChainsCompletionContributor extends CompletionContributor { final int maxResultSize, final int maxChainSize, final ChainCompletionContext context, - final CompilerReferenceService methodsUsageIndexReader) { + final CompilerReferenceServiceEx methodsUsageIndexReader) { return ChainsSearcher.search(maxChainSize, target, contextVarsQNames, maxResultSize, context, methodsUsageIndexReader); } } \ No newline at end of file diff --git a/java/java-indexing-impl/src/com/intellij/compiler/classFilesIndex/impl/MethodIncompleteSignature.java b/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/impl/MethodIncompleteSignature.java similarity index 100% rename from java/java-indexing-impl/src/com/intellij/compiler/classFilesIndex/impl/MethodIncompleteSignature.java rename to java/compiler/impl/src/com/intellij/compiler/classFilesIndex/impl/MethodIncompleteSignature.java diff --git a/java/java-indexing-impl/src/com/intellij/compiler/classFilesIndex/impl/UsageIndexValue.java b/java/compiler/impl/src/com/intellij/compiler/classFilesIndex/impl/UsageIndexValue.java similarity index 100% rename from java/java-indexing-impl/src/com/intellij/compiler/classFilesIndex/impl/UsageIndexValue.java rename to java/compiler/impl/src/com/intellij/compiler/classFilesIndex/impl/UsageIndexValue.java diff --git a/java/java-indexing-impl/src/com/intellij/compiler/CompilerReferenceService.java b/java/java-indexing-impl/src/com/intellij/compiler/CompilerReferenceService.java index a76b75a7e610..c72d643f0d45 100644 --- a/java/java-indexing-impl/src/com/intellij/compiler/CompilerReferenceService.java +++ b/java/java-indexing-impl/src/com/intellij/compiler/CompilerReferenceService.java @@ -15,7 +15,6 @@ */ package com.intellij.compiler; -import com.intellij.compiler.classFilesIndex.impl.UsageIndexValue; import com.intellij.openapi.components.AbstractProjectComponent; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.project.Project; @@ -27,8 +26,6 @@ import com.intellij.psi.search.GlobalSearchScope; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.TreeSet; - /** * The service is intended to provide an information about class/method/field usages or classes hierarchy that is obtained on compilation time. * It means that this service should not affect any find usages result when initial project is not compiled or project language is not support @@ -42,9 +39,6 @@ public abstract class CompilerReferenceService extends AbstractProjectComponent super(project); } - //TODO - public abstract TreeSet getMethods(String name); - public static CompilerReferenceService getInstance(@NotNull Project project) { return project.getComponent(CompilerReferenceService.class); }