protected void generateConvertMethod(PsiElementFactory factory, PsiClass cls, ClassEntity classEntity) { if (cls == null || cls.getName() == null) { return; } if (Config.getInstant().isObjectFromData()) { createMethod(factory, Config.getInstant().getObjectFromDataStr().replace("$ClassName$", cls.getName()).trim(), cls); } if (Config.getInstant().isObjectFromData1()) { createMethod(factory, Config.getInstant().getObjectFromDataStr1().replace("$ClassName$", cls.getName()).trim(), cls); } if (Config.getInstant().isArrayFromData()) { createMethod(factory, Config.getInstant().getArrayFromDataStr().replace("$ClassName$", cls.getName()).trim(), cls); } if (Config.getInstant().isArrayFromData1()) { createMethod(factory, Config.getInstant().getArrayFromData1Str().replace("$ClassName$", cls.getName()).trim(), cls); } }
protected void createMethod(PsiElementFactory factory, String method, PsiClass cls) { Try.run(new Try.TryListener() { @Override public void run() { cls.add(factory.createMethodFromText(method, cls)); } @Override public void runAgain() { } @Override public void error() { } }); }
protected void generateField(PsiElementFactory factory, FieldEntity fieldEntity, PsiClass cls, ClassEntity classEntity) { if (fieldEntity.isGenerate()) { Try.run(new Try.TryListener() { @Override public void run() { cls.add(factory.createFieldFromText(generateFieldText(classEntity, fieldEntity, null), cls)); } @Override public void runAgain() { fieldEntity.setFieldName(FieldHelper.generateLuckyFieldName(fieldEntity.getFieldName())); cls.add(factory.createFieldFromText(generateFieldText(classEntity, fieldEntity, Constant.FIXME), cls)); } @Override public void error() { cls.addBefore(factory.createCommentFromText("// FIXME generate failure field " + fieldEntity.getFieldName(), cls), cls.getChildren()[0]); } }); } }
public FieldsDialog(ConvertBridge.Operator operator, ClassEntity classEntity, PsiElementFactory factory, PsiClass psiClass, PsiClass aClass, PsiFile file, Project project , String generateClassStr) { this.operator = operator; this.factory = factory; this.aClass = aClass; this.file = file; this.project = project; this.psiClass = psiClass; this.generateClassStr = generateClassStr; setContentPane(contentPane); setTitle("Virgo Model"); getRootPane().setDefaultButton(buttonOK); this.setAlwaysOnTop(true); initListener(classEntity, generateClassStr); }
private void addAnnotationToPackageInfo(Project project, PsiJavaFile packageInfoFile) { if (!FileModificationService.getInstance().preparePsiElementForWrite(packageInfoFile)) { return; } PsiPackageStatement packageStatement = packageInfoFile.getPackageStatement(); if (packageStatement == null) { return; } PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); PsiAnnotation annotation = factory.createAnnotationFromText("@" + annotationForTypeQualifierFqn, packageInfoFile.getContext()); PsiElement addedAnnotation = packageInfoFile.addBefore(annotation, packageStatement); JavaCodeStyleManager.getInstance(project).shortenClassReferences(addedAnnotation); removeRedundantAnnotationsInPackage(project, packageInfoFile.getContainingDirectory().getFiles(), annotation); }
static List<String> findAnnotations(PsiModifierListOwner element, boolean nullable) { if (overridesSuper(element)) { return Collections.emptyList(); } List<String> annotations = new ArrayList<>(); Project project = element.getProject(); PsiModifierList modifierList = element.getModifierList(); List<String> nullabilityAnnotations = nullable ? NullableNotNullManager.getInstance(project).getNullables() : NullableNotNullManager.getInstance(project).getNotNulls(); for (String notNullAnnotationFqn : nullabilityAnnotations) { PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); PsiAnnotation annotation = factory.createAnnotationFromText("@" + notNullAnnotationFqn, null); PsiAnnotation.TargetType[] targetTypes = getTargetsForLocation(modifierList); if (isNullabilityAnnotationForTypeQualifierDefault(annotation, nullable, targetTypes)) { annotations.add(annotation.getQualifiedName()); } } return annotations; }
private PsiMethod makePsiMethod( AbstractSrcMethod method, PsiClass psiClass ) { PsiElementFactory elementFactory = JavaPsiFacade.getInstance( psiClass.getProject() ).getElementFactory(); StringBuilder sb = new StringBuilder(); method.render( sb, 0 ); try { return elementFactory.createMethodFromText( sb.toString(), psiClass ); } catch( IncorrectOperationException ioe ) { // the text of the method does not conform to method grammar, probably being edited in an IJ editor, // ignore these since the editor provides error information return null; } }
@Override public void actionPerformed(AnActionEvent e) { // 获取编辑器中的文件 Project project = e.getData(PlatformDataKeys.PROJECT); Editor editor = e.getData(PlatformDataKeys.EDITOR); PsiFile file = PsiUtilBase.getPsiFileInEditor(editor, project); // 获取当前类 PsiClass targetClass = getTargetClass(editor, file); // 获取元素操作的工厂类 PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); // 生成代码 new LayoutCreator(project, targetClass, factory, file).execute(); }
public JavaCoreProjectEnvironment(Disposable parentDisposable, CoreApplicationEnvironment applicationEnvironment) { super(parentDisposable, applicationEnvironment); myProject.registerService(PsiElementFactory.class, new PsiElementFactoryImpl(myPsiManager)); myProject.registerService(JavaPsiImplementationHelper.class, createJavaPsiImplementationHelper()); myProject.registerService(PsiResolveHelper.class, new PsiResolveHelperImpl(myPsiManager)); myProject.registerService(LanguageLevelProjectExtension.class, new CoreLanguageLevelProjectExtension()); myProject.registerService(JavaResolveCache.class, new JavaResolveCache(myMessageBus)); myProject.registerService(JavaCodeStyleSettingsFacade.class, new CoreJavaCodeStyleSettingsFacade()); myProject.registerService(JavaCodeStyleManager.class, new CoreJavaCodeStyleManager()); myPackageIndex = createCorePackageIndex(); myProject.registerService(PackageIndex.class, myPackageIndex); myFileManager = createCoreFileManager(); myProject.registerService(JavaFileManager.class, myFileManager); JavaPsiFacadeImpl javaPsiFacade = new JavaPsiFacadeImpl(myProject, myPsiManager, myFileManager, myMessageBus); myProject.registerService(JavaPsiFacade.class, javaPsiFacade); }
@Override public PsiExpression getDescriptorEvaluation(DebuggerContext context) throws EvaluateException { PsiElementFactory elementFactory = JavaPsiFacade.getInstance(context.getProject()).getElementFactory(); String fieldName; if(isStatic()) { String typeName = myField.declaringType().name().replace('$', '.'); typeName = DebuggerTreeNodeExpression.normalize(typeName, PositionUtil.getContextElement(context), context.getProject()); fieldName = typeName + "." + getName(); } else { //noinspection HardCodedStringLiteral fieldName = isOuterLocalVariableValue()? StringUtil.trimStart(getName(), OUTER_LOCAL_VAR_FIELD_PREFIX) : "this." + getName(); } try { return elementFactory.createExpressionFromText(fieldName, null); } catch (IncorrectOperationException e) { throw new EvaluateException(DebuggerBundle.message("error.invalid.field.name", getName()), e); } }
@Override protected void doFix(Project project, ProblemDescriptor descriptor) throws IncorrectOperationException { final PsiElement element = descriptor.getPsiElement(); final String text = element.getText(); final int max = text.length() - 1; if (max < 1) { return; } int index = 0; while (index < max && (text.charAt(index) == '0' || text.charAt(index) == '_')) { index++; } final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project); final PsiElementFactory factory = psiFacade.getElementFactory(); final String textWithoutLeadingZeros = text.substring(index); final PsiExpression decimalNumber = factory.createExpressionFromText(textWithoutLeadingZeros, element); element.replace(decimalNumber); }
@Override public PsiType[] getParameterTypes() { ArrayList<PsiType> types = new ArrayList<PsiType>(); PsiManagerEx manager = getManager(); GlobalSearchScope scope = GlobalSearchScope.allScope(getProject()); PsiElementFactory factory = JavaPsiFacade.getInstance(getProject()).getElementFactory(); for (GrDocMethodParameter parameter : getParameters()) { GrDocReferenceElement typeElement = parameter.getTypeElement(); try { PsiType type = factory.createTypeFromText(typeElement.getText(), this); type = TypesUtil.boxPrimitiveType(type, manager, scope); types.add(type); } catch (IncorrectOperationException e) { LOG.info(e); types.add(null); } } return types.toArray(PsiType.createArray(types.size())); }
@Override public void readMethod(PsiCodeBlock methodBody, PsiElementFactory factory, PsiField field) { if (null == methodBody) { return; } String fieldName = field.getName(); String parameterType = ((PsiClassReferenceType) field.getType()).getParameters()[0].getPresentableText(); // // phones = new ArrayList<>(); // // in.readTypedList(phones, Phone.CREATOR); // methodBody.add(factory.createStatementFromText(fieldName + " = new ArrayList<" + parameterType + ">();", null)); // methodBody.add(factory.createStatementFromText("in.readTypedList(" + fieldName + ", " + parameterType + ".CREATOR);", null)); // phones = in.createTypedArrayList(Phone.CREATOR); methodBody.add(factory.createStatementFromText(fieldName + " = in.createTypedArrayList(" + parameterType + ".CREATOR);", null)); }
public void testQuickFix_classWithNullaryConstructor() { ProblemDescriptorImpl problemDescriptorMock = mock(ProblemDescriptorImpl.class); MockitoAnnotations.initMocks(this); PsiElementFactory factory = JavaPsiFacade.getInstance(myFixture.getProject()).getElementFactory(); PsiClass psiClass = factory.createClass(getName()); PsiMethod nullaryConstructor = factory.createMethodFromText("public " + psiClass.getName() + "() { }", psiClass); psiClass.addAfter(nullaryConstructor, null); ConstructorInspection constructorInspection = new ConstructorInspection(); ConstructorInspection.MyQuickFix myQuickFix = constructorInspection.new MyQuickFix(psiClass); myQuickFix.applyFix(myFixture.getProject(), problemDescriptorMock); Assert.assertEquals(1, psiClass.getConstructors().length); Assert.assertTrue(EndpointUtilities.isPublicNullaryConstructor(psiClass.getConstructors()[0])); }
public void testQuickFix_classWithNonNullaryConstructor() { ProblemDescriptorImpl problemDescriptorMock = mock(ProblemDescriptorImpl.class); MockitoAnnotations.initMocks(this); PsiElementFactory factory = JavaPsiFacade.getInstance(myFixture.getProject()).getElementFactory(); PsiClass psiClass = factory.createClass(getName()); PsiMethod nullaryConstructor = factory.createMethodFromText( "public " + psiClass.getName() + "(String param) { }", psiClass); psiClass.addAfter(nullaryConstructor, null); ConstructorInspection constructorInspection = new ConstructorInspection(); ConstructorInspection.MyQuickFix myQuickFix = constructorInspection.new MyQuickFix(psiClass); myQuickFix.applyFix(myFixture.getProject(), problemDescriptorMock); Assert.assertEquals(2, psiClass.getConstructors().length); Assert.assertTrue(EndpointUtilities.isPublicNullaryConstructor(psiClass.getConstructors()[0])); }
public JavaCoreProjectEnvironment(Disposable parentDisposable, CoreApplicationEnvironment applicationEnvironment) { super(parentDisposable, applicationEnvironment); myProject.registerService(PsiElementFactory.class, new PsiElementFactoryImpl(myPsiManager)); myProject.registerService(JavaPsiImplementationHelper.class, createJavaPsiImplementationHelper()); myProject.registerService(PsiResolveHelper.class, new PsiResolveHelperImpl(myPsiManager)); myProject.registerService(LanguageLevelProjectExtension.class, new CoreLanguageLevelProjectExtension()); myProject.registerService(JavaResolveCache.class, new JavaResolveCache(myMessageBus)); myProject.registerService(JavaCodeStyleSettingsFacade.class, new CoreJavaCodeStyleSettingsFacade()); myProject.registerService(JavaCodeStyleManager.class, new CoreJavaCodeStyleManager()); registerProjectExtensionPoint(PsiElementFinder.EP_NAME, PsiElementFinder.class); myPackageIndex = createCorePackageIndex(); myProject.registerService(PackageIndex.class, myPackageIndex); myFileManager = createCoreFileManager(); myProject.registerService(JavaFileManager.class, myFileManager); JavaPsiFacadeImpl javaPsiFacade = new JavaPsiFacadeImpl(myProject, myPsiManager, myFileManager, myMessageBus); registerProjectComponent(JavaPsiFacade.class, javaPsiFacade); myProject.registerService(JavaPsiFacade.class, javaPsiFacade); }
public PsiType[] getParameterTypes() { ArrayList<PsiType> types = new ArrayList<PsiType>(); PsiManagerEx manager = getManager(); GlobalSearchScope scope = GlobalSearchScope.allScope(getProject()); PsiElementFactory factory = JavaPsiFacade.getInstance(getProject()).getElementFactory(); for (GrDocMethodParameter parameter : getParameters()) { GrDocReferenceElement typeElement = parameter.getTypeElement(); try { PsiType type = factory.createTypeFromText(typeElement.getText(), this); type = TypesUtil.boxPrimitiveType(type, manager, scope); types.add(type); } catch (IncorrectOperationException e) { LOG.info(e); types.add(null); } } return types.toArray(new PsiType[types.size()]); }
private void addImport(PsiElementFactory elementFactory, String fullyQualifiedName){ final PsiFile file = psiClass.getContainingFile(); if (!(file instanceof PsiJavaFile)) { return; } final PsiJavaFile javaFile = (PsiJavaFile)file; final PsiImportList importList = javaFile.getImportList(); if (importList == null) { return; } // Check if already imported for (PsiImportStatementBase is : importList.getAllImportStatements()) { String impQualifiedName = is.getImportReference().getQualifiedName(); if (fullyQualifiedName.equals(impQualifiedName)){ return; // Already imported so nothing neede } } // Not imported yet so add it importList.add(elementFactory.createImportStatementOnDemand(fullyQualifiedName)); }
/** * Make the class implementing Parcelable */ private void makeClassImplementParcelable(PsiElementFactory elementFactory, JavaCodeStyleManager styleManager) { final PsiClassType[] implementsListTypes = psiClass.getImplementsListTypes(); final String implementsType = "android.os.Parcelable"; for (PsiClassType implementsListType : implementsListTypes) { PsiClass resolved = implementsListType.resolve(); // Already implements Parcelable, no need to add it if (resolved != null && implementsType.equals(resolved.getQualifiedName())) { return; } } PsiJavaCodeReferenceElement implementsReference = elementFactory.createReferenceFromText(implementsType, psiClass); PsiReferenceList implementsList = psiClass.getImplementsList(); if (implementsList != null) { styleManager.shortenClassReferences(implementsList.add(implementsReference)); } }
private LombokLightFieldBuilder createLoggerField(@NotNull PsiClass psiClass, @NotNull PsiAnnotation psiAnnotation) { final Project project = psiClass.getProject(); final PsiManager manager = psiClass.getContainingFile().getManager(); final PsiElementFactory psiElementFactory = JavaPsiFacade.getElementFactory(project); final PsiType psiLoggerType = psiElementFactory.createTypeFromText(loggerType, psiClass); LombokLightFieldBuilder loggerField = new LombokLightFieldBuilder(manager, getLoggerName(psiClass), psiLoggerType) .withContainingClass(psiClass) .withModifier(PsiModifier.FINAL) .withModifier(PsiModifier.PRIVATE) .withNavigationElement(psiAnnotation); if (isLoggerStatic(psiClass)) { loggerField.withModifier(PsiModifier.STATIC); } final String loggerInitializerParameter = createLoggerInitializeParameter(psiClass, psiAnnotation); final PsiExpression initializer = psiElementFactory.createExpressionFromText(String.format(loggerInitializer, loggerInitializerParameter), psiClass); loggerField.setInitializer(initializer); return loggerField; }
private PsiMethod rebuildMethodFromString() { final StringBuilder methodTextDeclaration = new StringBuilder(); methodTextDeclaration.append(getAllModifierProperties((LightModifierList) getModifierList())); PsiType returnType = getReturnType(); if (null != returnType) { methodTextDeclaration.append(returnType.getCanonicalText()).append(' '); } methodTextDeclaration.append(getName()); methodTextDeclaration.append('('); if (getParameterList().getParametersCount() > 0) { for (PsiParameter parameter : getParameterList().getParameters()) { methodTextDeclaration.append(parameter.getType().getCanonicalText()).append(' ').append(parameter.getName()).append(','); } methodTextDeclaration.deleteCharAt(methodTextDeclaration.length() - 1); } methodTextDeclaration.append(')'); methodTextDeclaration.append('{').append(" ").append('}'); final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(getManager().getProject()); final PsiMethod methodFromText = elementFactory.createMethodFromText(methodTextDeclaration.toString(), getContainingClass()); if (null != getBody()) { methodFromText.getBody().replace(getBody()); } return methodFromText; }
/** * Creates a PsiType for a PsiClass enriched with generic substitution information if available */ @NotNull private static PsiType getTypeWithGenerics(@NotNull PsiClass psiClass, @NotNull PsiTypeParameter... classTypeParameters) { PsiType result; final PsiElementFactory factory = JavaPsiFacade.getElementFactory(psiClass.getProject()); if (classTypeParameters.length > 0) { Map<PsiTypeParameter, PsiType> substitutionMap = new HashMap<PsiTypeParameter, PsiType>(); for (PsiTypeParameter typeParameter : classTypeParameters) { substitutionMap.put(typeParameter, factory.createType(typeParameter)); } result = factory.createType(psiClass, factory.createSubstitutor(substitutionMap)); } else { result = factory.createType(psiClass); } return result; }
private PsiClass rebuildClass(@NotNull Project project, @NotNull PsiClass fromClass) { final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(project); PsiClass resultClass = elementFactory.createClass(StringUtil.defaultIfEmpty(fromClass.getName(), "UnknownClassName")); copyModifiers(fromClass.getModifierList(), resultClass.getModifierList()); rebuildTypeParameter(fromClass, resultClass); for (PsiField psiField : fromClass.getFields()) { resultClass.add(rebuildField(project, psiField)); } for (PsiMethod psiMethod : fromClass.getMethods()) { resultClass.add(rebuildMethod(project, psiMethod)); } return (PsiClass) CodeStyleManager.getInstance(project).reformat(resultClass); }
@Override public PsiMethod[] generateGetters(PsiField field) { final Project project = field.getProject(); final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); final PsiMethod getter = PropertyUtil.generateGetterPrototype(field); final PsiType wrappedType = JavaFxPsiUtil.getWrappedPropertyType(field, project, JavaFxCommonClassNames.ourReadOnlyMap); final PsiTypeElement returnTypeElement = getter.getReturnTypeElement(); LOG.assertTrue(returnTypeElement != null); returnTypeElement.replace(factory.createTypeElement(wrappedType)); final PsiCodeBlock getterBody = getter.getBody(); LOG.assertTrue(getterBody != null); getterBody.getStatements()[0].replace(factory.createStatementFromText("return " + field.getName() + ".get();", field)); final PsiMethod propertyGetter = PropertyUtil.generateGetterPrototype(field); propertyGetter.setName(JavaCodeStyleManager.getInstance(project).variableNameToPropertyName(field.getName(), VariableKind.FIELD) + "Property"); return new PsiMethod[] {getter, propertyGetter}; }
@Override public PsiMethod[] generateSetters(PsiField field) { final PsiMethod setter = PropertyUtil.generateSetterPrototype(field); final Project project = field.getProject(); final PsiType wrappedType = JavaFxPsiUtil.getWrappedPropertyType(field, project, JavaFxCommonClassNames.ourWritableMap); final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(project); final PsiTypeElement newTypeElement = elementFactory.createTypeElement(wrappedType); final PsiParameter[] parameters = setter.getParameterList().getParameters(); LOG.assertTrue(parameters.length == 1); final PsiParameter parameter = parameters[0]; final PsiTypeElement typeElement = parameter.getTypeElement(); LOG.assertTrue(typeElement != null); typeElement.replace(newTypeElement); final PsiCodeBlock body = setter.getBody(); LOG.assertTrue(body != null); body.getStatements()[0].replace(elementFactory.createStatementFromText("this." + field.getName() + ".set(" + parameter.getName() + ");", field)); return new PsiMethod[] {setter}; }
@Override public void executeWriteAction(final Editor editor, final DataContext dataContext) { PsiHelper util = ApplicationManager.getApplication().getComponent(PsiHelper.class); JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(editor.getProject()); PsiElementFactory psiElementFactory = psiFacade.getElementFactory(); PsiClass clazz = util.getCurrentClass(editor); PsiClass psiCls = psiElementFactory.createEnum("Fields"); for (PsiField field : clazz.getFields()) { String fieldName = field.getName(); String methodNameSuffix = util.capitalize(fieldName); String fieldType = field.getType().getCanonicalText(); psiCls.add(psiElementFactory.createEnumConstantFromText(field.getName(), psiCls)); } clazz.add(psiCls); }
private PsiMethod generateCopyConstructor(PsiClass psiClass, ClassMember[] copyableFields) { String parameterName = "other"; StringBuilder code = new StringBuilder(); code.append(String.format("public %s(%s %s) {", psiClass.getName(), psiClass.getName(), parameterName)); boolean superclassHasCopyConstructor = ConstructorUtil.hasCopyConstructor(psiClass.getSuperClass()); if (superclassHasCopyConstructor) { code.append(String.format("super(%s);", parameterName)); } for (ClassMember fieldMember : copyableFields) { PsiField field = ((PsiFieldMember) fieldMember).getElement(); String name = field.getName(); code.append(String.format("this.%s = %s.%s;", name, parameterName, name)); } code.append("}"); PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(psiClass.getProject()); PsiMethod constructor = elementFactory.createMethodFromText(code.toString(), psiClass); return constructor; }
@SuppressWarnings("HardCodedStringLiteral") public static boolean isGetByStringOrByObjectMethod(@NotNull PsiMethod method) { String methodName = method.getName(); if(!"get".equals(methodName)) { return false; } PsiParameterList parameterList = method.getParameterList(); if(parameterList.getParametersCount() != 1) { return false; } PsiParameter parameter = parameterList.getParameters()[0]; final PsiElementFactory factory = JavaPsiFacade.getInstance(method.getProject()).getElementFactory(); PsiClassType javaLangString = factory.createTypeByFQClassName(JavaClassNames.JAVA_LANG_STRING, method.getResolveScope()); if(parameter.getType().isAssignableFrom(javaLangString)) { return true; } PsiClassType javaLangObject = factory.createTypeByFQClassName(JavaClassNames.JAVA_LANG_OBJECT, method.getResolveScope()); return parameter.getType().isAssignableFrom(javaLangObject); }
@Override @NotNull public PsiClassType[] getReferencedTypes() { PsiClassReferenceListStub stub = getGreenStub(); if(stub != null) { return stub.getReferencedTypes(); } PsiJavaCodeReferenceElement[] refs = getReferenceElements(); PsiElementFactory factory = JavaPsiFacade.getInstance(getProject()).getElementFactory(); PsiClassType[] types = new PsiClassType[refs.length]; for(int i = 0; i < types.length; i++) { types[i] = factory.createType(refs[i]); } return types; }
@NotNull private Map<PsiClass, PsiSubstitutor> calcAllMemberSupers(final LanguageLevel level) { final Map<PsiClass, PsiSubstitutor> map = ContainerUtil.newTroveMap(); final PsiElementFactory factory = JavaPsiFacade.getElementFactory(myPlaceClass.getProject()); new PairProcessor<PsiClass, PsiSubstitutor>() { @Override public boolean process(PsiClass eachClass, PsiSubstitutor eachSubstitutor) { if(!map.containsKey(eachClass)) { map.put(eachClass, eachSubstitutor); PsiClassImplUtil.processSuperTypes(eachClass, eachSubstitutor, factory, level, myResolveScope, this); } return true; } }.process(myPlaceClass, PsiSubstitutor.EMPTY); return map; }
public JavaCoreProjectEnvironment(Disposable parentDisposable, CoreApplicationEnvironment applicationEnvironment) { super(parentDisposable, applicationEnvironment); myProject.registerService(PsiElementFactory.class, new PsiElementFactoryImpl(myPsiManager)); myProject.registerService(JavaPsiImplementationHelper.class, createJavaPsiImplementationHelper()); myProject.registerService(PsiResolveHelper.class, new PsiResolveHelperImpl(myPsiManager)); myProject.registerService(JavaResolveCache.class, new JavaResolveCache(myMessageBus)); myProject.registerService(JavaCodeStyleSettingsFacade.class, new CoreJavaCodeStyleSettingsFacade()); myProject.registerService(JavaCodeStyleManager.class, new CoreJavaCodeStyleManager()); registerProjectExtensionPoint(PsiElementFinder.EP_NAME, PsiElementFinder.class); /* myPackageIndex = createCorePackageIndex(); myProject.registerService(PackageIndex.class, myPackageIndex); */ myFileManager = createCoreFileManager(); myProject.registerService(JavaFileManager.class, myFileManager); PsiPackageManager manager = new PsiPackageManagerImpl(getProject(), DirectoryIndex.getInstance(getProject())); myProject.registerService(PsiPackageManager.class, manager); JavaPsiFacadeImpl javaPsiFacade = new JavaPsiFacadeImpl(myProject, manager); registerProjectComponent(JavaPsiFacade.class, javaPsiFacade); myProject.registerService(JavaPsiFacade.class, javaPsiFacade); }
@Override public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) { final PsiElement psiElement = descriptor.getPsiElement(); if(psiElement == null) { return; } final PsiAssignmentExpression assignmentExpression = PsiTreeUtil.getParentOfType(psiElement, PsiAssignmentExpression.class); if(assignmentExpression == null) { return; } final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project); final String lExpressionText = assignmentExpression.getLExpression().getText(); final PsiExpression rExpression = assignmentExpression.getRExpression(); final String rExpressionText = rExpression != null ? rExpression.getText() : ""; assignmentExpression.replace(factory.createExpressionFromText(lExpressionText + " = " + rExpressionText, psiElement)); }
@Override public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException { if(!FileModificationService.getInstance().prepareFileForWrite(file)) { return; } myConjuncts.remove(myConjunct); myConjuncts.add(0, myConjunct); final String intersectionTypeText = StringUtil.join(myConjuncts, new Function<PsiTypeElement, String>() { @Override public String fun(PsiTypeElement element) { return element.getText(); } }, " & "); final PsiElementFactory elementFactory = JavaPsiFacade.getElementFactory(project); final PsiTypeCastExpression fixedCast = (PsiTypeCastExpression) elementFactory.createExpressionFromText("(" + intersectionTypeText + ") a", myCastTypeElement); final PsiTypeElement fixedCastCastType = fixedCast.getCastType(); LOG.assertTrue(fixedCastCastType != null); final PsiElement flippedTypeElement = myCastTypeElement.replace(fixedCastCastType); CodeStyleManager.getInstance(project).reformat(flippedTypeElement); }
/** * Add new statement after given anchor statement creating code block, if necessary * * @param anchor existing statement * @param newStatement a new statement which should be added after an existing one * @return added physical statement */ public static PsiStatement addAfter(PsiStatement anchor, PsiStatement newStatement) { PsiElement oldStatement = anchor; PsiElement parent = oldStatement.getParent(); while(parent instanceof PsiLabeledStatement) { oldStatement = parent; parent = oldStatement.getParent(); } final PsiElement result; if(parent instanceof PsiCodeBlock) { result = parent.addAfter(newStatement, oldStatement); } else { PsiElementFactory factory = JavaPsiFacade.getElementFactory(anchor.getProject()); final PsiBlockStatement newBlockStatement = (PsiBlockStatement) factory.createStatementFromText("{}", oldStatement); final PsiElement codeBlock = newBlockStatement.getCodeBlock(); codeBlock.add(oldStatement); codeBlock.add(newStatement); result = ((PsiBlockStatement) oldStatement.replace(newBlockStatement)).getCodeBlock().getStatements()[1]; } return (PsiStatement) result; }