Skip to content

Commit

Permalink
Modified caching settings and skipped processing of annotation and in…
Browse files Browse the repository at this point in the history
…terfaces

Low performance of @builder analysis #180
  • Loading branch information
Michail Plushnikov committed Feb 1, 2016
1 parent feecd4f commit a243f5e
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 17 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Expand Up @@ -125,7 +125,7 @@ tasks.withType(JavaCompile) {
options.bootClasspath = "$JDK6_HOME/jre/lib/rt.jar"
}
}
compileJava.dependsOn(generatePsiAndParser)
//compileJava.dependsOn(generatePsiAndParser)

plugins.withType(JavaPlugin) {
test {
Expand Down
Expand Up @@ -30,11 +30,7 @@ public void visitNewExpression(PsiNewExpression expression) {

private boolean possibleValDeclaration(PsiNewExpression expression) {
final PsiElement expressionParent = expression.getParent();
if (expressionParent instanceof PsiLocalVariable) {
PsiLocalVariable localVar = (PsiLocalVariable) expressionParent;
return ValProcessor.isVal(localVar.getTypeElement());
}
return false;
return expressionParent instanceof PsiLocalVariable && ValProcessor.isVal((PsiLocalVariable) expressionParent);
}
};
}
Expand Down
Expand Up @@ -86,15 +86,19 @@ public void verifyTypeElement(@NotNull final PsiTypeElement psiTypeElement, @Not
}
}

public static boolean isVal(@NotNull PsiTypeElement psiTypeElement) {
final PsiJavaCodeReferenceElement referenceElement = psiTypeElement.getInnermostComponentReferenceElement();
if (null != referenceElement) {
final PsiElement psiElement = referenceElement.resolve();
if (psiElement instanceof PsiClass) {
final PsiClass psiClass = (PsiClass) psiElement;

return isSameName(psiClass.getName()) && isSameName(psiClass.getQualifiedName());
}
public static boolean isVal(@NotNull PsiLocalVariable psiLocalVariable) {
return psiLocalVariable.getInitializer() != null && isSameName(psiLocalVariable.getTypeElement().getText());
}

private boolean isVal(@NotNull PsiParameter psiParameter) {
return psiParameter.getParent() instanceof PsiForeachStatement && isSameName(psiParameter.getTypeElement().getText());
}

private boolean isVal(@NotNull PsiTypeElement psiTypeElement) {
final PsiElement parent = psiTypeElement.getParent();
if (parent instanceof PsiLocalVariable && ((PsiLocalVariable) parent).getInitializer() != null ||
parent instanceof PsiParameter && parent.getParent() instanceof PsiForeachStatement) {
return isSameName(psiTypeElement.getText());
}
return false;
}
Expand All @@ -108,7 +112,8 @@ public PsiType inferType(PsiTypeElement typeElement) {
PsiType psiType = null;

final PsiElement parent = typeElement.getParent();
if ((parent instanceof PsiLocalVariable || parent instanceof PsiParameter) && isVal(typeElement)) {
if ((parent instanceof PsiLocalVariable && isVal((PsiLocalVariable) parent)) ||
(parent instanceof PsiParameter && isVal((PsiParameter) parent))) {

if (parent instanceof PsiLocalVariable) {
psiType = processLocalVariableInitializer(((PsiLocalVariable) parent).getInitializer());
Expand Down
Expand Up @@ -13,6 +13,7 @@
import com.intellij.psi.impl.source.PsiExtensibleClass;
import com.intellij.psi.util.CachedValueProvider;
import com.intellij.psi.util.CachedValuesManager;
import com.intellij.psi.util.PsiModificationTracker;
import de.plushnikov.intellij.plugin.processor.Processor;
import de.plushnikov.intellij.plugin.processor.ValProcessor;
import de.plushnikov.intellij.plugin.settings.ProjectSettings;
Expand Down Expand Up @@ -61,6 +62,10 @@ public <Psi extends PsiElement> List<Psi> getAugments(@NotNull PsiElement elemen
if (!(element instanceof PsiExtensibleClass) || !element.isValid()) {
return emptyResult;
}
// Skip processing of Annotations and Interfaces
if (((PsiClass) element).isAnnotationType() || ((PsiClass) element).isInterface()) {
return emptyResult;
}

// skip processing if plugin is disabled
if (!ProjectSettings.loadAndGetEnabledInProject(project)) {
Expand Down Expand Up @@ -119,7 +124,7 @@ public Result<List<Psi>> compute() {
for (Processor processor : lombokProcessors) {
result.addAll((Collection<Psi>) processor.process(psiClass));
}
return new Result<List<Psi>>(result, psiClass);
return new Result<List<Psi>>(result, PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT);
}
}
}
@@ -0,0 +1,33 @@
package de.plushnikov.bug.issue180;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@NoArgsConstructor
@Getter
@Setter
public abstract class AddressBase {

private String addressLine1;

private String addressLine2;

private String addressLine3;

private String city;

private String postalCode;

public AddressBase(String addressLine1, String addressLine2, String addressLine3, String city, String postalCode) {
this.addressLine1 = addressLine1;
this.addressLine2 = addressLine2;
this.addressLine3 = addressLine3;
this.city = city;
this.postalCode = postalCode;
}

public abstract String getCountryCode();

public abstract void setCountryCode(String countryCode);
}
@@ -0,0 +1,23 @@
package de.plushnikov.bug.issue180;

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.experimental.Builder;

@NoArgsConstructor
@Getter
@Setter
public class AddressImpl extends AddressBase {

private String countryCode;

@Builder
public AddressImpl(String addressLine1, String addressLine2, String addressLine3, String city,
String postalCode, String countryCode) {
super(addressLine1, addressLine2, addressLine3, city, postalCode);

this.countryCode = countryCode;
}

}
@@ -0,0 +1,13 @@
package de.plushnikov.bug.issue180;

public class AddressMain {
public static void main(String[] args) {
final AddressImpl address = AddressImpl.builder()
.addressLine1("")
.addressLine2("")
.addressLine3("")
.countryCode("")
.build();
System.out.println(address);
}
}

0 comments on commit a243f5e

Please sign in to comment.