Skip to content

Commit

Permalink
Merge branch '2.1.x' into 2.2.x
Browse files Browse the repository at this point in the history
Conflicts:
	grails-core/src/main/groovy/org/codehaus/groovy/grails/compiler/injection/GrailsASTUtils.java
  • Loading branch information
graemerocher committed Feb 15, 2013
2 parents 18ef04e + 7399121 commit e947ef1
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 23 deletions.
Expand Up @@ -37,14 +37,7 @@
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.Predicate;
import org.apache.commons.lang.StringUtils;
import org.codehaus.groovy.ast.ASTNode;
import org.codehaus.groovy.ast.AnnotationNode;
import org.codehaus.groovy.ast.ClassHelper;
import org.codehaus.groovy.ast.ClassNode;
import org.codehaus.groovy.ast.ConstructorNode;
import org.codehaus.groovy.ast.MethodNode;
import org.codehaus.groovy.ast.Parameter;
import org.codehaus.groovy.ast.PropertyNode;
import org.codehaus.groovy.ast.*;
import org.codehaus.groovy.ast.expr.ArgumentListExpression;
import org.codehaus.groovy.ast.expr.BinaryExpression;
import org.codehaus.groovy.ast.expr.BooleanExpression;
Expand Down Expand Up @@ -639,11 +632,12 @@ else if (isCandidateInstanceMethod(supportedSuperType, declaredMethod)) {
}
}

public static void addFieldIfNonExistent(ClassNode classNode, ClassNode fieldType, String fieldName) {
public static FieldNode addFieldIfNonExistent(ClassNode classNode, ClassNode fieldType, String fieldName) {
if (classNode != null && classNode.getField(fieldName) == null) {
classNode.addField(fieldName, Modifier.PRIVATE, fieldType,
return classNode.addField(fieldName, Modifier.PRIVATE, fieldType,
new ConstructorCallExpression(fieldType, new ArgumentListExpression()));
}
return null;
}

public static void addAnnotationIfNecessary(ClassNode classNode, @SuppressWarnings("unused") Class<Entity> entityClass) {
Expand Down
Expand Up @@ -23,29 +23,26 @@ import org.codehaus.groovy.grails.commons.GrailsClassUtils
import org.codehaus.groovy.grails.commons.GrailsDomainClass
import org.codehaus.groovy.grails.plugins.DomainClassGrailsPlugin
import org.codehaus.groovy.grails.plugins.web.ControllersGrailsPlugin
import org.codehaus.groovy.grails.validation.ConstrainedProperty
import org.codehaus.groovy.grails.validation.ConstraintEvalUtils
import org.codehaus.groovy.grails.validation.ConstraintsEvaluator
import org.codehaus.groovy.grails.validation.ConstraintsEvaluatorFactoryBean
import org.codehaus.groovy.grails.validation.GrailsDomainClassValidator
import org.grails.datastore.gorm.GormEnhancer
import org.grails.datastore.gorm.events.AutoTimestampEventListener
import org.grails.datastore.gorm.events.DomainEventListener
import org.junit.After
import org.junit.Before
import org.junit.BeforeClass
import org.grails.datastore.mapping.core.Datastore
import org.grails.datastore.gorm.validation.constraints.UniqueConstraintFactory
import org.grails.datastore.mapping.core.DatastoreUtils
import org.grails.datastore.mapping.core.Session
import org.grails.datastore.mapping.model.PersistentEntity
import org.grails.datastore.mapping.reflect.ClassPropertyFetcher
import org.grails.datastore.mapping.simple.SimpleMapDatastore
import org.grails.datastore.mapping.transactions.DatastoreTransactionManager
import org.junit.After
import org.junit.AfterClass
import org.junit.Before
import org.junit.BeforeClass
import org.springframework.transaction.PlatformTransactionManager
import org.springframework.validation.Validator
import org.codehaus.groovy.grails.validation.ConstraintEvalUtils
import org.codehaus.groovy.grails.validation.ConstrainedProperty
import org.grails.datastore.gorm.validation.constraints.UniqueConstraint
import org.grails.datastore.gorm.validation.constraints.UniqueConstraintFactory
import org.junit.AfterClass
import org.grails.datastore.mapping.reflect.ClassPropertyFetcher

/**
* <p>A mixin that can be applied to JUnit or Spock tests to add testing support
Expand Down
Expand Up @@ -116,7 +116,8 @@ public void weaveMixinsIntoClass(ClassNode classNode, ListExpression values) {

final String fieldName = '$' + GrailsNameUtils.getPropertyName(mixinClassNode.getName());

GrailsASTUtils.addFieldIfNonExistent(classNode, mixinClassNode, fieldName);
FieldNode fieldNode = GrailsASTUtils.addFieldIfNonExistent(classNode, mixinClassNode, fieldName);
if(fieldNode == null) return; // already woven
VariableExpression fieldReference = new VariableExpression(fieldName);

while (!mixinClassNode.getName().equals(OBJECT_CLASS)) {
Expand Down
Expand Up @@ -8,7 +8,7 @@ import grails.test.mixin.Mock
/**
*/
@TestFor(CascadingPerson)
@Mock(Name)
@Mock([CascadingPerson, Name])
class CascadingErrorCountSpec extends Specification {

void "Test that the error count is correct when validating sorted set"() {
Expand Down

0 comments on commit e947ef1

Please sign in to comment.