get rid of intellij.build.toolbox.litegen parameter and use BuildOptions.TOOLBOX_LITE...
[idea/community.git] / java / java-impl / src / com / intellij / refactoring / extractMethodObject / reflect / FieldDeclarationDescriptor.java
1 // Copyright 2000-2019 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.refactoring.extractMethodObject.reflect;
3
4 import com.intellij.psi.PsiClass;
5 import com.intellij.psi.PsiElementFactory;
6 import com.intellij.psi.PsiField;
7 import com.intellij.psi.PsiMethodCallExpression;
8 import com.intellij.refactoring.extractMethodObject.ItemToReplaceDescriptor;
9 import org.jetbrains.annotations.NotNull;
10 import org.jetbrains.annotations.Nullable;
11
12 public class FieldDeclarationDescriptor implements ItemToReplaceDescriptor {
13   private final PsiField myField;
14   private final String myName;
15
16   private FieldDeclarationDescriptor(@NotNull PsiField field, @NotNull String name) {
17     myField = field;
18     myName = name;
19   }
20
21   @Nullable
22   public static ItemToReplaceDescriptor createIfInaccessible(@NotNull PsiField field) {
23     String fieldName = field.getName();
24     if (!PsiReflectionAccessUtil.isAccessibleType(field.getType()) && fieldName != null) {
25       return new FieldDeclarationDescriptor(field, fieldName);
26     }
27
28     return null;
29   }
30
31   @Override
32   public void replace(@NotNull PsiClass outerClass,
33                       @NotNull PsiElementFactory elementFactory,
34                       @NotNull PsiMethodCallExpression callExpression) {
35     PsiField newField = elementFactory.createField(myName, PsiReflectionAccessUtil.nearestAccessibleType(myField.getType()));
36     myField.replace(newField);
37   }
38 }