google / google/google-java-format

Eclipse-Formatter-Plugin fails due to wrong assumptions

Ouverte
#1,172 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Eclipse
Langage dominant
Java
Étoiles
6.2k
Forks
937
Merge moyen
6 min
PR mergées (30 j)
3

Description

The Eclipse-Plugin has sometimes a problem when I call the formatter programatically inside Eclipse. I am using the Snippet from https://help.eclipse.org/latest/topic/org.eclipse.jdt.doc.isv/guide/jdt_api_codeformatter.htm to format a complete Java-File. I have created a minimal Test-Class:

```
package test;

/**
* Test Class
*
* Generated
*
*/
public class Test
{
}
```
The standalone-Formatter-Jar adds a HTML-Tag

before the "Generated". Unfortunately, when I call the plugin via the Eclipse-APIs:
```java
final TextEdit edit =
codeFormatter.format(
CodeFormatter.K_COMPILATION_UNIT, // format a compilation unit
content, // source to format
0, // starting position
content.length(), // length
0, // initial indentation
"\r\n" // line separator
);
```
the method returns a null because it can not format the content. I have tracked the problem back to the class SnippetFormatter.java, Method toReplacements(). This method has the condition which checks the unformatted and the formatted source:
```java
if (!NOT_WHITESPACE.retainFrom(source).equals(NOT_WHITESPACE.retainFrom(replacement))) {
throw new IllegalArgumentException(
"source = \"" + source + "\", replacement = \"" + replacement + "\"");
}
```
This condition checks that there are only whitespace-changes in the new formatted source. The Javadoc says:
```quote
under the assumption that they differ in whitespace alone.
```
Unfortunately, this assumption is not correct. The source has (as mentioned above) an additional non-whitespace change and the IllegalArgumentException is thrown. This Exception causes the Eclipse-Formatter-Class to fail and to return only null, thereby denying to format the source.

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.