mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
prefer temporary and comment injections to automatic
This commit is contained in:
+17
-12
@@ -16,22 +16,27 @@
|
||||
package com.intellij.psi.impl.source.tree.injected;
|
||||
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import com.intellij.util.containers.JBIterable;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class ClassMapCachingNulls<T> {
|
||||
private final Map<Class, T[]> myBackingMap;
|
||||
private final T[] myEmptyArray;
|
||||
private final List<T> myOrderingArray;
|
||||
private final Map<Class, T[]> myMap = ContainerUtil.newConcurrentMap();
|
||||
|
||||
public ClassMapCachingNulls(@NotNull Map<Class, T[]> backingMap, T[] emptyArray) {
|
||||
public ClassMapCachingNulls(@NotNull Map<Class, T[]> backingMap, T[] emptyArray, @NotNull List<T> orderingArray) {
|
||||
myBackingMap = backingMap;
|
||||
myEmptyArray = emptyArray;
|
||||
myOrderingArray = orderingArray;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -64,29 +69,29 @@ public class ClassMapCachingNulls<T> {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private List<T> getFromBackingMap(Class aClass) {
|
||||
T[] value = myBackingMap.get(aClass);
|
||||
List<T> result = null;
|
||||
Set<T> result = null;
|
||||
if (value != null) {
|
||||
assert value.length != 0;
|
||||
result = new ArrayList<>(Arrays.asList(value));
|
||||
result = new HashSet<>(Arrays.asList(value));
|
||||
}
|
||||
for (final Class aClass1 : aClass.getInterfaces()) {
|
||||
result = addFromUpper(result, aClass1);
|
||||
}
|
||||
final Class superclass = aClass.getSuperclass();
|
||||
if (superclass != null) {
|
||||
for (final Class superclass : JBIterable.of(aClass.getSuperclass()).append(aClass.getInterfaces())) {
|
||||
result = addFromUpper(result, superclass);
|
||||
}
|
||||
return result;
|
||||
|
||||
if (result == null) return null;
|
||||
final Set<T> _result = result;
|
||||
return myOrderingArray.stream().filter(_result::contains).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private List<T> addFromUpper(List<T> value, Class superclass) {
|
||||
private Set<T> addFromUpper(Set<T> value, Class superclass) {
|
||||
T[] fromUpper = get(superclass);
|
||||
if (fromUpper != null) {
|
||||
assert fromUpper.length != 0;
|
||||
if (value == null) {
|
||||
value = new ArrayList<>(fromUpper.length);
|
||||
value = new HashSet<>(fromUpper.length);
|
||||
}
|
||||
for (T t : fromUpper) {
|
||||
if (!value.contains(t)) {
|
||||
|
||||
+1
-1
@@ -241,7 +241,7 @@ public class InjectedLanguageManagerImpl extends InjectedLanguageManager impleme
|
||||
}
|
||||
}
|
||||
|
||||
ClassMapCachingNulls<MultiHostInjector> result = new ClassMapCachingNulls<>(injectors, new MultiHostInjector[0]);
|
||||
ClassMapCachingNulls<MultiHostInjector> result = new ClassMapCachingNulls<>(injectors, new MultiHostInjector[0], allInjectors);
|
||||
cachedInjectors = result;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -45,8 +45,8 @@
|
||||
|
||||
<projectConfigurable groupId="editor" displayName="Language Injections" dynamic="true" id="IntelliLang.Configuration" instance="org.intellij.plugins.intelliLang.InjectionsSettingsUI" nonDefaultProject="true"/>
|
||||
|
||||
<multiHostInjector implementation="org.intellij.plugins.intelliLang.inject.CommentLanguageInjector"/>
|
||||
<multiHostInjector implementation="org.intellij.plugins.intelliLang.inject.TemporaryPlacesInjector"/>
|
||||
<multiHostInjector id="TemporaryPlacesInjector" implementation="org.intellij.plugins.intelliLang.inject.TemporaryPlacesInjector" order="first"/>
|
||||
<multiHostInjector implementation="org.intellij.plugins.intelliLang.inject.CommentLanguageInjector" order="after TemporaryPlacesInjector"/>
|
||||
<multiHostInjector implementation="org.intellij.plugins.intelliLang.inject.DefaultLanguageInjector" order="last"/>
|
||||
|
||||
<projectService serviceInterface="org.intellij.plugins.intelliLang.inject.TemporaryPlacesRegistry"
|
||||
|
||||
@@ -521,7 +521,7 @@
|
||||
<projectService serviceInterface="com.intellij.psi.impl.source.tree.injected.JavaConcatenationInjectorManager"
|
||||
serviceImplementation="com.intellij.psi.impl.source.tree.injected.JavaConcatenationInjectorManager"/>
|
||||
|
||||
<multiHostInjector implementation="com.intellij.psi.impl.source.tree.injected.JavaConcatenationInjectorManager$Concatenation2InjectorAdapter" order="last"/>
|
||||
<multiHostInjector implementation="com.intellij.psi.impl.source.tree.injected.JavaConcatenationInjectorManager$Concatenation2InjectorAdapter" order="first"/>
|
||||
|
||||
<projectService serviceInterface="com.intellij.psi.SmartTypePointerManager"
|
||||
serviceImplementation="com.intellij.psi.impl.smartPointers.SmartTypePointerManagerImpl"/>
|
||||
|
||||
Reference in New Issue
Block a user