Skip to content

Commit 64c3f9d

Browse files
committed
cache optimization (reformat)
1 parent 6ee0abb commit 64c3f9d

18 files changed

Lines changed: 1944 additions & 2270 deletions

csharp-psi-impl/src/main/java/consulo/csharp/lang/impl/psi/CSharpInheritableChecker.java

Lines changed: 305 additions & 375 deletions
Large diffs are not rendered by default.

csharp-psi-impl/src/main/java/consulo/csharp/lang/impl/psi/CSharpTypeRefPresentationUtil.java

Lines changed: 204 additions & 234 deletions
Large diffs are not rendered by default.

csharp-psi-impl/src/main/java/consulo/csharp/lang/impl/psi/CSharpTypeUtil.java

Lines changed: 442 additions & 526 deletions
Large diffs are not rendered by default.

csharp-psi-impl/src/main/java/consulo/csharp/lang/impl/psi/cast/CSharpCastSession.java

Lines changed: 51 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -31,57 +31,55 @@
3131
* @author VISTALL
3232
* @since 2023-12-31
3333
*/
34-
public class CSharpCastSession implements Closeable
35-
{
36-
private static final ThreadLocal<CSharpCastSession> ourSession = ThreadLocal.withInitial(CSharpCastSession::new);
37-
38-
@Nonnull
39-
public static CSharpCastSession start(Map<CSharpImpicitCastKey, CSharpTypeUtil.InheritResult> implicitCast)
40-
{
41-
CSharpCastSession session = get();
42-
session.myImplicitCast.putAll(implicitCast);
43-
return session;
44-
}
45-
46-
@Nonnull
47-
public static CSharpCastSession get()
48-
{
49-
return Objects.requireNonNull(ourSession.get());
50-
}
51-
52-
private Set<CSharpInheritKey> myVisited = new LinkedHashSet<>();
53-
54-
private Map<CSharpImpicitCastKey, CSharpTypeUtil.InheritResult> myImplicitCast = new HashMap<>();
55-
56-
public boolean mark(@Nonnull DotNetTypeRef top, @Nonnull DotNetTypeRef target, @Nullable Pair<CSharpCastType, GlobalSearchScope> castResolvingInfo)
57-
{
58-
CSharpInheritKey key = new CSharpInheritKey(top, target, castResolvingInfo);
59-
return myVisited.add(key);
60-
}
61-
62-
public CSharpTypeUtil.InheritResult recordImpicit(CSharpImpicitCastKey key, CSharpTypeUtil.InheritResult result)
63-
{
64-
myImplicitCast.put(key, result);
65-
return result;
66-
}
67-
68-
public CSharpTypeUtil.InheritResult getImplicitResult(CSharpImpicitCastKey key)
69-
{
70-
return myImplicitCast.get(key);
71-
}
72-
73-
public Map<CSharpImpicitCastKey, CSharpTypeUtil.InheritResult> getImplicitCast()
74-
{
75-
return myImplicitCast;
76-
}
77-
78-
private CSharpCastSession()
79-
{
80-
}
81-
82-
@Override
83-
public void close()
84-
{
85-
ourSession.remove();
86-
}
34+
public class CSharpCastSession implements Closeable {
35+
private static final ThreadLocal<CSharpCastSession> ourSession = ThreadLocal.withInitial(CSharpCastSession::new);
36+
37+
@Nonnull
38+
public static CSharpCastSession start(@Nonnull Map<CSharpImpicitCastKey, CSharpTypeUtil.InheritResult> implicitCast) {
39+
CSharpCastSession session = get();
40+
session.myServiceImplicitMap = Collections.unmodifiableMap(implicitCast);
41+
return session;
42+
}
43+
44+
@Nonnull
45+
public static CSharpCastSession get() {
46+
return Objects.requireNonNull(ourSession.get());
47+
}
48+
49+
private Set<CSharpInheritKey> myVisited = new LinkedHashSet<>();
50+
51+
private Map<CSharpImpicitCastKey, CSharpTypeUtil.InheritResult> myServiceImplicitMap = Map.of();
52+
53+
private Map<CSharpImpicitCastKey, CSharpTypeUtil.InheritResult> myNewImplicitMap = new HashMap<>();
54+
55+
public boolean mark(@Nonnull DotNetTypeRef top, @Nonnull DotNetTypeRef target, @Nullable Pair<CSharpCastType, GlobalSearchScope> castResolvingInfo) {
56+
CSharpInheritKey key = new CSharpInheritKey(top, target, castResolvingInfo);
57+
return myVisited.add(key);
58+
}
59+
60+
public CSharpTypeUtil.InheritResult recordImpicit(CSharpImpicitCastKey key, CSharpTypeUtil.InheritResult result) {
61+
myNewImplicitMap.put(key, result);
62+
return result;
63+
}
64+
65+
public CSharpTypeUtil.InheritResult getImplicitResult(CSharpImpicitCastKey key) {
66+
CSharpTypeUtil.InheritResult result = myServiceImplicitMap.get(key);
67+
if (result != null) {
68+
return result;
69+
}
70+
71+
return myNewImplicitMap.get(key);
72+
}
73+
74+
public void storeImplicit(@Nonnull Map<CSharpImpicitCastKey, CSharpTypeUtil.InheritResult> serviceImplicitMap) {
75+
serviceImplicitMap.putAll(myNewImplicitMap);
76+
}
77+
78+
private CSharpCastSession() {
79+
}
80+
81+
@Override
82+
public void close() {
83+
ourSession.remove();
84+
}
8785
}

csharp-psi-impl/src/main/java/consulo/csharp/lang/impl/psi/cast/CSharpImpicitCastKey.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,21 +17,18 @@
1717
package consulo.csharp.lang.impl.psi.cast;
1818

1919
import consulo.csharp.lang.CSharpCastType;
20-
import consulo.dotnet.psi.DotNetTypeDeclaration;
21-
import consulo.dotnet.psi.resolve.DotNetGenericExtractor;
2220
import consulo.dotnet.psi.resolve.DotNetTypeRef;
2321
import consulo.language.psi.scope.GlobalSearchScope;
24-
import consulo.util.lang.Pair;
2522
import jakarta.annotation.Nonnull;
2623

2724
/**
2825
* @author VISTALL
2926
* @since 2023-12-31
3027
*/
3128
public record CSharpImpicitCastKey(@Nonnull DotNetTypeRef to,
32-
@Nonnull DotNetTypeRef from,
33-
@Nonnull DotNetTypeDeclaration typeDeclaration,
34-
@Nonnull DotNetGenericExtractor extractor,
35-
@Nonnull Pair<CSharpCastType, GlobalSearchScope> castResolvingInfo)
36-
{
29+
@Nonnull DotNetTypeRef from,
30+
@Nonnull CSharpCastType castType,
31+
@Nonnull GlobalSearchScope searchScope) {
32+
33+
3734
}

csharp-psi-impl/src/main/java/consulo/csharp/lang/impl/psi/cast/CSharpInheritableCheckerCacher.java

Lines changed: 39 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,15 @@
2929
import consulo.language.psi.scope.GlobalSearchScope;
3030
import consulo.project.Project;
3131
import consulo.util.lang.Pair;
32+
import jakarta.annotation.Nonnull;
33+
import jakarta.annotation.Nullable;
3234
import jakarta.inject.Inject;
3335
import jakarta.inject.Singleton;
3436

35-
import jakarta.annotation.Nonnull;
36-
import jakarta.annotation.Nullable;
37+
import java.util.Comparator;
3738
import java.util.Map;
3839
import java.util.concurrent.ConcurrentHashMap;
40+
import java.util.concurrent.ConcurrentSkipListMap;
3941

4042
/**
4143
* @author VISTALL
@@ -44,54 +46,46 @@
4446
@Singleton
4547
@ServiceAPI(ComponentScope.PROJECT)
4648
@ServiceImpl
47-
public class CSharpInheritableCheckerCacher implements Disposable
48-
{
49-
public static CSharpInheritableCheckerCacher getInstance(@Nonnull Project project)
50-
{
51-
return project.getInstance(CSharpInheritableCheckerCacher.class);
52-
}
49+
public class CSharpInheritableCheckerCacher implements Disposable {
50+
public static CSharpInheritableCheckerCacher getInstance(@Nonnull Project project) {
51+
return project.getInstance(CSharpInheritableCheckerCacher.class);
52+
}
5353

54-
private final Map<CSharpInheritKey, CSharpTypeUtil.InheritResult> myCache = new ConcurrentHashMap<>();
55-
private final Map<CSharpImpicitCastKey, CSharpTypeUtil.InheritResult> myImplicitCast = new ConcurrentHashMap<>();
54+
private final Map<CSharpInheritKey, CSharpTypeUtil.InheritResult> myCache = new ConcurrentHashMap<>();
55+
private final Map<CSharpImpicitCastKey, CSharpTypeUtil.InheritResult> myImplicitCasts = new ConcurrentSkipListMap<>(Comparator.comparing(Object::toString));
5656

57-
@Inject
58-
public CSharpInheritableCheckerCacher(Project project)
59-
{
60-
project.getMessageBus().connect(this).subscribe(PsiModificationTrackerListener.class, () ->
61-
{
62-
myCache.clear();
63-
myImplicitCast.clear();
64-
});
65-
}
57+
@Inject
58+
public CSharpInheritableCheckerCacher(Project project) {
59+
project.getMessageBus().connect(this).subscribe(PsiModificationTrackerListener.class, () -> {
60+
myCache.clear();
61+
myImplicitCasts.clear();
62+
});
63+
}
6664

67-
@Nonnull
68-
@RequiredReadAction
69-
public CSharpTypeUtil.InheritResult getOrCheck(DotNetTypeRef top,
70-
DotNetTypeRef target,
71-
@Nullable Pair<CSharpCastType, GlobalSearchScope> castTypeResolver)
72-
{
73-
CSharpInheritKey key = new CSharpInheritKey(top, target, castTypeResolver);
74-
CSharpTypeUtil.InheritResult result = myCache.get(key);
75-
if(result != null)
76-
{
77-
return result;
78-
}
65+
@Nonnull
66+
@RequiredReadAction
67+
public CSharpTypeUtil.InheritResult getOrCheck(DotNetTypeRef top,
68+
DotNetTypeRef target,
69+
@Nullable Pair<CSharpCastType, GlobalSearchScope> castTypeResolver) {
70+
CSharpInheritKey key = new CSharpInheritKey(top, target, castTypeResolver);
71+
CSharpTypeUtil.InheritResult result = myCache.get(key);
72+
if (result != null) {
73+
return result;
74+
}
7975

80-
try (CSharpCastSession session = CSharpCastSession.start(myImplicitCast))
81-
{
82-
result = CSharpInheritableChecker.isInheritable(key.top(), key.target(), key.castResolvingInfo());
76+
try (CSharpCastSession session = CSharpCastSession.start(myImplicitCasts)) {
77+
result = CSharpInheritableChecker.isInheritable(key.top(), key.target(), key.castResolvingInfo());
8378

84-
myImplicitCast.putAll(session.getImplicitCast());
85-
}
79+
session.storeImplicit(myImplicitCasts);
80+
}
8681

87-
// we can't use computeIfAbsent since we can call store data in recursive mode, which ConcurrentHashMap not allow
88-
myCache.putIfAbsent(key, result);
89-
return result;
90-
}
82+
// we can't use computeIfAbsent since we can call store data in recursive mode, which ConcurrentHashMap not allow
83+
myCache.putIfAbsent(key, result);
84+
return result;
85+
}
9186

92-
@Override
93-
public void dispose()
94-
{
95-
myCache.clear();
96-
}
87+
@Override
88+
public void dispose() {
89+
myCache.clear();
90+
}
9791
}

0 commit comments

Comments
 (0)