diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/DomInvocationHandler.java b/xml/dom-impl/src/com/intellij/util/xml/impl/DomInvocationHandler.java index 10ea2943c418..ec9c6e029a49 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/DomInvocationHandler.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/DomInvocationHandler.java @@ -604,7 +604,7 @@ public abstract class DomInvocationHandler myJavaMethods = new ConcurrentFactoryMap() { + @Override + protected JavaMethod create(Method key) { + return JavaMethod.getMethod(myType, key); + } + }; private final Map myGetters = new ConcurrentFactoryMap() { @Override protected Boolean create(JavaMethod key) { @@ -167,6 +173,10 @@ public class InvocationCache { return myInvocations.get(method); } + public JavaMethod getInternedMethod(Method method) { + return myJavaMethods.get(method); + } + public void putInvocation(Method method, Invocation invocation) { myInvocations.put(method, invocation); } diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/StaticGenericInfoBuilder.java b/xml/dom-impl/src/com/intellij/util/xml/impl/StaticGenericInfoBuilder.java index 429a3a2a9d0e..d70a401b0572 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/StaticGenericInfoBuilder.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/StaticGenericInfoBuilder.java @@ -65,8 +65,9 @@ public class StaticGenericInfoBuilder { myClass = aClass; final Set methods = new THashSet(); + InvocationCache invocationCache = DomApplicationComponent.getInstance().getInvocationCache(myClass); for (final Method method : ReflectionCache.getMethods(myClass)) { - methods.add(JavaMethod.getMethod(myClass, method)); + methods.add(invocationCache.getInternedMethod(method)); } for (final JavaMethod method : methods) { if (DomImplUtil.isGetter(method) && method.getAnnotation(NameValue.class) != null) { @@ -80,11 +81,10 @@ public class StaticGenericInfoBuilder { if (implClass != null) { for (Method method : ReflectionCache.getMethods(implClass)) { final int modifiers = method.getModifiers(); - if (!Modifier.isAbstract(modifiers) && !Modifier.isVolatile(modifiers)) { - final JavaMethodSignature signature = new JavaMethodSignature(method); - if (signature.findMethod(myClass) != null) { - methods.remove(JavaMethod.getMethod(myClass, signature)); - } + if (!Modifier.isAbstract(modifiers) && + !Modifier.isVolatile(modifiers) && + new JavaMethodSignature(method).findMethod(myClass) != null) { + methods.remove(invocationCache.getInternedMethod(method)); } } }