001 /* 002 * Copyright 2010-2013 JetBrains s.r.o. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017 package org.jetbrains.jet.asJava.light; 018 019 import com.intellij.lang.Language; 020 import com.intellij.lang.java.JavaLanguage; 021 import com.intellij.navigation.NavigationItem; 022 import com.intellij.psi.*; 023 import com.intellij.psi.impl.ElementPresentationUtil; 024 import com.intellij.psi.impl.light.LightElement; 025 import com.intellij.psi.impl.light.LightModifierList; 026 import com.intellij.ui.RowIcon; 027 import com.intellij.util.IncorrectOperationException; 028 import com.intellij.util.PlatformIcons; 029 import org.jetbrains.annotations.NonNls; 030 import org.jetbrains.annotations.NotNull; 031 import org.jetbrains.annotations.Nullable; 032 033 import javax.swing.*; 034 035 // Based on com.intellij.psi.impl.light.LightVariableBuilder 036 public class LightVariableBuilder<T extends LightVariableBuilder> extends LightElement implements PsiVariable, NavigationItem { 037 private final String myName; 038 private final PsiType myType; 039 private volatile LightModifierList myModifierList; 040 private volatile Icon myBaseIcon = PlatformIcons.VARIABLE_ICON; 041 private String myOriginInfo; 042 043 public LightVariableBuilder(@NotNull String name, @NotNull String type, @NotNull PsiElement navigationElement) { 044 this(name, JavaPsiFacade.getElementFactory(navigationElement.getProject()).createTypeFromText(type, navigationElement), navigationElement); 045 } 046 047 public LightVariableBuilder(@NotNull String name, @NotNull PsiType type, @NotNull PsiElement navigationElement) { 048 this(navigationElement.getManager(), name, type, JavaLanguage.INSTANCE); 049 setNavigationElement(navigationElement); 050 } 051 052 public LightVariableBuilder(PsiManager manager, @NotNull String name, @NotNull PsiType type, Language language) { 053 super(manager, language); 054 myName = name; 055 myType = type; 056 myModifierList = new LightModifierList(manager); 057 } 058 059 @Override 060 public String toString() { 061 return "LightVariableBuilder:" + getName(); 062 } 063 064 @NotNull 065 @Override 066 public PsiType getType() { 067 return myType; 068 } 069 070 @Override 071 @NotNull 072 public PsiModifierList getModifierList() { 073 return myModifierList; 074 } 075 076 public T setModifiers(String... modifiers) { 077 myModifierList = new LightModifierList(getManager(), getLanguage(), modifiers); 078 return (T)this; 079 } 080 081 @Override 082 public boolean hasModifierProperty(@NonNls @NotNull String name) { 083 return myModifierList.hasModifierProperty(name); 084 } 085 086 @NotNull 087 @Override 088 public String getName() { 089 return myName; 090 } 091 092 @Override 093 public PsiTypeElement getTypeElement() { 094 return null; 095 } 096 097 @Override 098 public PsiExpression getInitializer() { 099 return null; 100 } 101 102 @Override 103 public boolean hasInitializer() { 104 return false; 105 } 106 107 @Override 108 public void normalizeDeclaration() throws IncorrectOperationException { 109 } 110 111 @Override 112 public Object computeConstantValue() { 113 return null; 114 } 115 116 @Override 117 public PsiIdentifier getNameIdentifier() { 118 return null; 119 } 120 121 @Override 122 public PsiElement setName(@NonNls @NotNull String name) throws IncorrectOperationException { 123 throw new UnsupportedOperationException("setName is not implemented yet in org.jetbrains.jet.asJava.light.LightVariableBuilder"); 124 } 125 126 @Override 127 protected boolean isVisibilitySupported() { 128 return true; 129 } 130 131 @Override 132 public Icon getElementIcon(final int flags) { 133 final RowIcon baseIcon = ElementPresentationUtil.createLayeredIcon(myBaseIcon, this, false); 134 return ElementPresentationUtil.addVisibilityIcon(this, flags, baseIcon); 135 } 136 137 public T setBaseIcon(Icon baseIcon) { 138 myBaseIcon = baseIcon; 139 return (T)this; 140 } 141 142 //@Nullable 143 //@Override 144 //public String getOriginInfo() { 145 // return myOriginInfo; 146 //} 147 148 public void setOriginInfo(@Nullable String originInfo) { 149 myOriginInfo = originInfo; 150 } 151 }