d61c1a93f07e70f530dbe50ee7ce6cd541f54c91
[idea/community.git] / java / java-psi-impl / src / com / intellij / psi / impl / compiled / ClassFileDecompiler.java
1 // Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
2 package com.intellij.psi.impl.compiled;
3
4 import com.intellij.openapi.diagnostic.Logger;
5 import com.intellij.openapi.fileTypes.BinaryFileDecompiler;
6 import com.intellij.openapi.project.DefaultProjectFactory;
7 import com.intellij.openapi.vfs.VirtualFile;
8 import com.intellij.psi.PsiManager;
9 import com.intellij.psi.compiled.ClassFileDecompilers;
10 import org.jetbrains.annotations.NotNull;
11
12 public class ClassFileDecompiler implements BinaryFileDecompiler {
13   private static final Logger LOG = Logger.getInstance(ClassFileDecompiler.class);
14
15   @Override
16   public @NotNull CharSequence decompile(@NotNull VirtualFile file) {
17     ClassFileDecompilers.Decompiler decompiler = ClassFileDecompilers.getInstance().find(file);
18     if (decompiler instanceof ClassFileDecompilers.Full) {
19       PsiManager manager = PsiManager.getInstance(DefaultProjectFactory.getInstance().getDefaultProject());
20       return ((ClassFileDecompilers.Full)decompiler).createFileViewProvider(file, manager, true).getContents();
21     }
22
23     if (decompiler instanceof ClassFileDecompilers.Light) {
24       try {
25         return ((ClassFileDecompilers.Light)decompiler).getText(file);
26       }
27       catch (ClassFileDecompilers.Light.CannotDecompileException e) {
28         LOG.warn("decompiler: " + decompiler.getClass(), e);
29       }
30     }
31
32     return ClsFileImpl.decompile(file);
33   }
34 }