Index: core/src/com/intellij/spring/factories/SpringFactoryBeansManager.java
===================================================================
--- core/src/com/intellij/spring/factories/SpringFactoryBeansManager.java	(revision 11463)
+++ core/src/com/intellij/spring/factories/SpringFactoryBeansManager.java	Mon Oct 08 20:17:13 CEST 2007
@@ -38,7 +38,7 @@
   private Map<String, ObjectTypeResolver> mySpringFactories = new HashMap<String, ObjectTypeResolver>();
   private ObjectTypeResolver[] myCustomResolvers = new ObjectTypeResolver[]{new TransactionProxyFactoryBeanTypeResolver(),
     new JndiObjectFactoryBeanTypeResolver(), new SpringEjbTypeResolver(), new ProxyFactoryBeanTypeResolver(),
-    new ScopedProxyFactoryBeanTypeResolver(), new BeanReferenceFactoryBeanTypeResolver()};
+    new ScopedProxyFactoryBeanTypeResolver(), new BeanReferenceFactoryBeanTypeResolver(), new UtilConstantTypeResolver()};
 
   @NonNls private static final String FACTORIES_RESOURCE_XML = "/resources/factories/factories.xml";
   @NonNls private static final String PROPERTY_NAME_DELIMITER = ",";
Index: core/src/com/intellij/spring/model/SpringUtils.java
===================================================================
--- core/src/com/intellij/spring/model/SpringUtils.java	(revision 11463)
+++ core/src/com/intellij/spring/model/SpringUtils.java	Mon Oct 08 19:54:25 CEST 2007
@@ -290,12 +290,25 @@
   }
 
   public static boolean isBeanFactoryProduced(final PsiClass factory, final PsiType psiType, @NotNull final CommonSpringBean context) {
-    if (factory != null && psiType instanceof PsiClassType) {
-      final PsiClass psiClass = ((PsiClassType)psiType).resolve();
-      if (psiClass == null) return false;
-
+    if (factory != null && SpringFactoryBeansManager.isBeanFactory(factory)) {
       final SpringFactoryBeansManager factoryBeansManager = SpringFactoryBeansManager.getInstance();
-      if (SpringFactoryBeansManager.isBeanFactory(factory)) {
+      PsiClass psiClass = null;
+      if (psiType instanceof PsiClassType) {
+        psiClass = ((PsiClassType)psiType).resolve();
+      }
+      if (psiType instanceof PsiPrimitiveType) {
+        final Module module = context.getModule();
+        if (module != null) {
+          final GlobalSearchScope scope = module.getModuleWithDependenciesAndLibrariesScope(false);
+          final PsiManager psiManager = PsiManager.getInstance(module.getProject());
+
+          final PsiClassType boxedType = ((PsiPrimitiveType)psiType).getBoxedType(psiManager, scope);
+          if (boxedType == null) return false;
+          psiClass = boxedType.resolve();
+        }
+      }
+
+      if (psiClass != null) {
         // when product type of factory can not be resolved, it's treated as valid
         return !factoryBeansManager.isProductKnown(factory, context) || factoryBeansManager.canProduce(factory, psiClass, context);
       }
Index: core/src/com/intellij/spring/factories/resolvers/UtilConstantTypeResolver.java
===================================================================
--- core/src/com/intellij/spring/factories/resolvers/UtilConstantTypeResolver.java	Mon Oct 08 21:42:50 CEST 2007
+++ core/src/com/intellij/spring/factories/resolvers/UtilConstantTypeResolver.java	Mon Oct 08 21:42:50 CEST 2007
@@ -0,0 +1,73 @@
+package com.intellij.spring.factories.resolvers;
+
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.psi.*;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.spring.factories.ObjectTypeResolver;
+import com.intellij.spring.model.xml.CommonSpringBean;
+import com.intellij.spring.model.xml.util.SpringConstant;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collections;
+import java.util.Set;
+
+public class UtilConstantTypeResolver implements ObjectTypeResolver {
+  @NonNls private static final String FACTORY_CLASS = "org.springframework.beans.factory.config.FieldRetrievingFactoryBean";
+  @NonNls private static final char SEPARATOR = '.';
+
+  @NotNull
+  public Set<String> getObjectType(@NotNull final CommonSpringBean context) {
+    if (context instanceof SpringConstant) {
+      final SpringConstant constant = (SpringConstant)context;
+      final String staticField = StringUtil.notNullize(constant.getStaticField().getStringValue());
+
+      final int lastDotIndex = staticField.lastIndexOf(SEPARATOR);
+      if (lastDotIndex != -1) {
+        final String className = staticField.substring(0, lastDotIndex);
+        final String fieldName = staticField.substring(lastDotIndex + 1);
+
+        final PsiClass psiClass = findClassByExternalName(context, className);
+        if (psiClass != null) {
+          final PsiField psiField = psiClass.findFieldByName(fieldName, true);
+          if (psiField != null) {
+            final PsiType type = psiField.getType();
+            if (type instanceof PsiPrimitiveType) {
+              final String boxedTypeName = ((PsiPrimitiveType)type).getBoxedTypeName();
+              return Collections.singleton(boxedTypeName);
+            }
+            if (type instanceof PsiClassType) {
+              final PsiClass typeClass = ((PsiClassType)type).resolve();
+              if (typeClass != null) {
+                final String qualifiedName = typeClass.getQualifiedName();
+                if (qualifiedName != null) {
+                  return Collections.singleton(qualifiedName);
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+
+    return Collections.emptySet();
+  }
+
+  @Nullable
+  private static PsiClass findClassByExternalName(@NotNull final CommonSpringBean context, @NotNull final String externalName) {
+    final Module module = context.getModule();
+    if (module != null) {
+      final GlobalSearchScope scope = module.getModuleWithDependenciesAndLibrariesScope(false);
+      final PsiManager psiManager = context.getPsiManager();
+      final String className = externalName.replace('$', '.');
+      return psiManager.findClass(className, scope);
+    }
+    return null;
+  }
+
+  public boolean accept(@NotNull final String factoryClassName) {
+    return factoryClassName.equals(FACTORY_CLASS);
+  }
+}
Index: core/src/com/intellij/spring/model/highlighting/InjectionValueTypeInspection.java
===================================================================
--- core/src/com/intellij/spring/model/highlighting/InjectionValueTypeInspection.java	(revision 11463)
+++ core/src/com/intellij/spring/model/highlighting/InjectionValueTypeInspection.java	Mon Oct 08 19:54:25 CEST 2007
@@ -171,15 +171,13 @@
 
   private static void checkSpringPropertyInnerBean(final SpringElementsHolder elementsHolder,
                                                    final DomElementAnnotationHolder holder,
-                                                   @Nullable final PsiType injectionType) {
-    if (injectionType instanceof PsiClassType) {
+                                                   @NotNull final PsiType injectionType) {
-      final List<DomSpringBean> beans = DomUtil.getDefinedChildrenOfType(elementsHolder, DomSpringBean.class);
-      if (!beans.isEmpty()) {
-        final DomSpringBean bean = beans.get(0);
-        checkBeanClass(bean, injectionType, bean, holder);
-      }
-    }
+    final List<DomSpringBean> beans = DomUtil.getDefinedChildrenOfType(elementsHolder, DomSpringBean.class);
+    if (!beans.isEmpty()) {
+      final DomSpringBean bean = beans.get(0);
+      checkBeanClass(bean, injectionType, bean, holder);
+    }
+  }
-  }
 
   private static void checkBeanClass(@Nullable final CommonSpringBean springBean,
                                      @NotNull final PsiClass clazz,
@@ -302,8 +300,8 @@
       checkIdRef(elementsHolder, holder, requiredType);
       checkSpringPropertyProps(elementsHolder, holder, requiredType);
       checkSpringPropertyMap(elementsHolder, holder, requiredType);
-    }
-    checkSpringPropertyInnerBean(elementsHolder, holder, requiredType);
+      checkSpringPropertyInnerBean(elementsHolder, holder, requiredType);
+    }
     checkSpringPropertyListAndSet(elementsHolder, holder, requiredType);
   }
-}
\ No newline at end of file
+}

