diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsFileImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsFileImpl.java index 5a151e6c0895..b8d2babbd836 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsFileImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/compiled/ClsFileImpl.java @@ -63,6 +63,7 @@ import com.intellij.psi.util.CachedValuesManager; import com.intellij.psi.util.PsiUtil; import com.intellij.reference.SoftReference; import com.intellij.util.ArrayUtil; +import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; import com.intellij.util.cls.ClsFormatException; import org.jetbrains.annotations.NonNls; @@ -582,6 +583,18 @@ public class ClsFileImpl extends ClsRepositoryPsiElement @Nullable public static PsiJavaFileStub buildFileStub(@NotNull VirtualFile file, @NotNull byte[] bytes) throws ClsFormatException { + return buildFileStub(file, bytes, new Function() { + @Override + public PsiJavaFileStub fun(String packageName) { + return new PsiJavaFileStubImpl(packageName, true); + } + }); + } + + @Nullable + public static PsiJavaFileStub buildFileStub(@NotNull VirtualFile file, + @NotNull byte[] bytes, + @NotNull Function stubBuilder) throws ClsFormatException { try { if (ClassFileViewProvider.isInnerClass(file, bytes)) { return null; @@ -590,7 +603,7 @@ public class ClsFileImpl extends ClsRepositoryPsiElement ClassReader reader = new ClassReader(bytes); String className = file.getNameWithoutExtension(); String packageName = getPackageName(reader.getClassName()); - PsiJavaFileStubImpl stub = new PsiJavaFileStubImpl(packageName, true); + PsiJavaFileStub stub = stubBuilder.fun(packageName); try { StubBuildingVisitor visitor = new StubBuildingVisitor(file, STRATEGY, stub, 0, className); diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiJavaFileStub.java b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiJavaFileStub.java index d4788c7248a7..d1b8242dd537 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiJavaFileStub.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/java/stubs/PsiJavaFileStub.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2016 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,5 +26,8 @@ public interface PsiJavaFileStub extends PsiClassHolderFileStub { String getPackageName(); boolean isCompiled(); StubPsiFactory getPsiFactory(); + + /** @deprecated override {@link #getPsiFactory()} instead (to be removed in IDEA 17) */ + @SuppressWarnings("unused") void setPsiFactory(StubPsiFactory factory); -} +} \ No newline at end of file