@@ -0,0 +1,1377 @@
+/*%0A * Copyright 2000-2009 JetBrains s.r.o.%0A *%0A * Licensed under the Apache License, Version 2.0 (the %22License%22);%0A * you may not use this file except in compliance with the License.%0A * You may obtain a copy of the License at%0A *%0A * http://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A */%0Apackage com.intellij.util;%0A%0Aimport com.intellij.util.containers.ConcurrentFactoryMap;%0A%0A/**%0A * @author peter%0A */%0Apublic class ReflectionAssignabilityCache %7B%0A  private final ConcurrentFactoryMap%3CClass, ConcurrentFactoryMap%3CClass, Boolean%3E%3E myCache = new ConcurrentFactoryMap%3CClass, ConcurrentFactoryMap%3CClass, Boolean%3E%3E() %7B%0A    @Override%0A    protected ConcurrentFactoryMap%3CClass, Boolean%3E create(final Class anc) %7B%0A      return new ConcurrentFactoryMap%3CClass, Boolean%3E() %7B%0A        @Override%0A        protected Boolean create(Class desc) %7B%0A          return anc.isAssignableFrom(desc);%0A        %7D%0A      %7D;%0A    %7D%0A  %7D;%0A%0A  public boolean isAssignable(Class ancestor, Class descendant) %7B%0A    return ancestor == descendant %7C%7C myCache.get(ancestor).get(descendant).booleanValue();%0A  %7D%0A%0A%7D%0A

Revert "cleanup"