com.eightbitmage.moonscript.intentions.utils.QuickfixUtil.java Source code

Java tutorial

Introduction

Here is the source code for com.eightbitmage.moonscript.intentions.utils.QuickfixUtil.java

Source

/*
 * Copyright 2010 Jon S Akhtar (Sylvanaar)
 *  
 *   Licensed under the Apache License, Version 2.0 (the "License");
 *   you may not use this file except in compliance with the License.
 *   You may obtain a copy of the License at
 *  
 *   http://www.apache.org/licenses/LICENSE-2.0
 *  
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 */
package com.eightbitmage.moonscript.intentions.utils;

import com.intellij.openapi.editor.Editor;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.OpenFileDescriptor;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.vfs.ReadonlyStatusHandler;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.codeStyle.SuggestedNameInfo;
import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;

import java.util.LinkedHashSet;
import java.util.Set;

/**
 * User: Dmitry.Krasilschikov
 * Date: 20.12.2007
 */
public class QuickfixUtil {
    //  @Nullable
    //  public static PsiClass findTargetClass(LuaReferenceExpression refExpr) {
    //    final PsiClass psiClass;
    //    if (refExpr.isQualified()) {
    //      MoonExpression qualifier = refExpr.getQualifierExpression();
    //      PsiType type = qualifier.getType();
    //      if (!(type instanceof PsiClassType)) return null;
    //
    //      psiClass = ((PsiClassType)type).resolve();
    //    } else {
    //      MoonPsiElement context = PsiTreeUtil.getParentOfType(refExpr, LuaTypeDefinition.class, MoonPsiFileBase.class);
    //      if (context instanceof LuaTypeDefinition) {
    //        return (PsiClass)context;
    //      } else if (context instanceof MoonPsiFileBase) return ((MoonPsiFileBase)context).getScriptClass();
    //      return null;
    //    }
    //    return psiClass;
    //  }

    //  public static boolean isStaticCall(LuaReferenceExpression refExpr) {
    //
    //    //todo: look more carefully
    //    MoonExpression qualifierExpression = refExpr.getQualifierExpression();
    //
    //    if (!(qualifierExpression instanceof LuaReferenceExpression)) return false;
    //
    //    LuaReferenceExpression referenceExpression = (LuaReferenceExpression)qualifierExpression;
    //    MoonPsiElement resolvedElement = ResolveUtil.resolveProperty(referenceExpression, referenceExpression.getName());
    //
    //    if (resolvedElement == null) return false;
    //    if (resolvedElement instanceof PsiClass) return true;
    //
    //    return false;
    //  }

    public static boolean ensureFileWritable(Project project, PsiFile file) {
        final VirtualFile virtualFile = file.getVirtualFile();
        final ReadonlyStatusHandler readonlyStatusHandler = ReadonlyStatusHandler.getInstance(project);
        final ReadonlyStatusHandler.OperationStatus operationStatus = readonlyStatusHandler
                .ensureFilesWritable(virtualFile);
        return !operationStatus.hasReadonlyFiles();
    }

    public static Editor positionCursor(@NotNull Project project, @NotNull PsiFile targetFile,
            @NotNull PsiElement element) {
        TextRange range = element.getTextRange();
        int textOffset = range.getStartOffset();

        VirtualFile vFile = targetFile.getVirtualFile();
        assert vFile != null;
        OpenFileDescriptor descriptor = new OpenFileDescriptor(project, vFile, textOffset);
        return FileEditorManager.getInstance(project).openTextEditor(descriptor, true);
    }

    //  public static String[] getMethodArgumentsNames(Project project, PsiType[] types) {
    //    Set<String> uniqNames = new LinkedHashSet<String>();
    //    Set<String> nonUniqNames = new THashSet<String>();
    //    for (PsiType type : types) {
    //      final SuggestedNameInfo nameInfo =
    //        JavaCodeStyleManager.getInstance(project).suggestVariableName(VariableKind.PARAMETER, null, null, type);
    //
    //      final String name = nameInfo.names[0];
    //      if (uniqNames.contains(name)) {
    //        int i = 2;
    //        while (uniqNames.contains(name + i)) i++;
    //        uniqNames.add(name + i);
    //        nonUniqNames.add(name);
    //      } else {
    //        uniqNames.add(name);
    //      }
    //    }
    //
    //    final String[] result = new String[uniqNames.size()];
    //    int i = 0;
    //    for (String name : uniqNames) {
    //      result[i] = nonUniqNames.contains(name) ? name + 1 : name;
    //      i++;
    //    }
    //    return result;
    //  }

    //  public static List<MyPair> swapArgumentsAndTypes(String[] names, PsiType[] types) {
    //    List<MyPair> result = new ArrayList<MyPair>();
    //
    //    if (names.length != types.length) return Collections.emptyList();
    //
    //    for (int i = 0; i < names.length; i++) {
    //      String name = names[i];
    //      final PsiType type = types[i];
    //
    //      result.add(new MyPair(name, type.getCanonicalText()));
    //    }
    //
    //    return result;
    //  }
    //
    //  public static boolean isCall(LuaReferenceExpression referenceExpression) {
    //    return referenceExpression.getParent() instanceof MoonFunctionCallStatement;
    //  }
    //
    //  public static String[] getArgumentsTypes(List<MyPair> listOfPairs) {
    //    final List<String> result = new ArrayList<String>();
    //
    //    if (listOfPairs == null) return ArrayUtil.EMPTY_STRING_ARRAY;
    //    for (MyPair listOfPair : listOfPairs) {
    //      String type = PsiTypesUtil.unboxIfPossible(listOfPair.second);
    //      result.add(type);
    //    }
    //
    //    return ArrayUtil.toStringArray(result);
    //  }
    //
    //  public static String[] getArgumentsNames(List<MyPair> listOfPairs) {
    //    final ArrayList<String> result = new ArrayList<String>();
    //    for (MyPair listOfPair : listOfPairs) {
    //      String name = listOfPair.first;
    //      result.add(name);
    //    }
    //
    //    return ArrayUtil.toStringArray(result);
    //  }

    public static String shortenType(String typeText) {
        if (typeText == null)
            return "";
        final int i = typeText.lastIndexOf(".");
        if (i != -1) {
            return typeText.substring(i + 1);
        }
        return typeText;
    }

    public static Module getModuleByPsiFile(PsiFile containingFile) {
        VirtualFile file;
        if (containingFile != null) {
            file = containingFile.getVirtualFile();
            if (file == null)
                return null;
        } else {
            return null;
        }

        return ProjectRootManager.getInstance(containingFile.getProject()).getFileIndex().getModuleForFile(file);
    }

    //  public static DynamicElementSettings createSettings(LuaReferenceExpression referenceExpression) {
    //    DynamicElementSettings settings = new DynamicElementSettings();
    //    final PsiClass containingClass = findTargetClass(referenceExpression);
    //
    //    assert containingClass != null;
    //    String className = containingClass.getQualifiedName();
    //    className = className == null ? containingClass.getContainingFile().getName() : className;
    //
    //    if (isStaticCall(referenceExpression)) {
    //      settings.setStatic(true);
    //    }
    //
    //    settings.setContainingClassName(className);
    //    settings.setName(referenceExpression.getName());
    //
    //    if (isCall(referenceExpression)) {
    //      List<PsiType> unboxedTypes = new ArrayList<PsiType>();
    //      for (PsiType type : PsiUtil.getArgumentTypes(referenceExpression, false)) {
    //        unboxedTypes.add(TypesUtil.unboxPrimitiveTypeWraperAndEraseGenerics(type));
    //      }
    //      final PsiType[] types = unboxedTypes.toArray(new PsiType[unboxedTypes.size()]);
    //      final String[] names = getMethodArgumentsNames(referenceExpression.getProject(), types);
    //      final List<MyPair> pairs = swapArgumentsAndTypes(names, types);
    //
    //      settings.setMethod(true);
    //      settings.setPairs(pairs);
    //    } else {
    //      settings.setMethod(false);
    //    }
    //    return settings;
    //  }
    //
    //  public static DynamicElementSettings createSettings(LuaArgumentLabel label, PsiClass targetClass) {
    //    DynamicElementSettings settings = new DynamicElementSettings();
    //
    //    assert targetClass != null;
    //    String className = targetClass.getQualifiedName();
    //    className = className == null ? targetClass.getContainingFile().getName() : className;
    //
    //    settings.setContainingClassName(className);
    //    settings.setName(label.getName());
    //
    //    return settings;
    //  }
}