Skip to content

Commit

Permalink
BZ-1073379 - Cannot access subfields in guided editor
Browse files Browse the repository at this point in the history
(cherry picked from commit c1ab709)
  • Loading branch information
Rikkola committed Mar 7, 2014
1 parent 9c13efc commit ede7cbc
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
Expand Up @@ -476,7 +476,8 @@ public void getFieldCompletions( final String factType,

if (fields == null || fields.length == 0) {
fields = projectModelFields.get(factTypeName);
if (isLazyProxy(fields)) {

if (fields == null || isLazyProxy(fields)) {
fields = null;
} else {
AsyncPackageDataModelOracleUtilities.correctModelFields(packageName, fields, imports);
Expand All @@ -493,14 +494,19 @@ public void callback(final PackageDataModelOracleIncrementalPayload dataModel) {
AsyncPackageDataModelOracleImpl.this,
dataModel);

getFieldCompletions(factType, callback);
// This will stop an infinite loop if there are no fields to be found
if (dataModel.getModelFields().get(factTypeName) == null || dataModel.getModelFields().get(factTypeName).length == 0) {
callback.callback(new ModelField[0]);
} else {
getFieldCompletions(factType, callback);
}
}
}).getUpdates( resourcePath,
imports,
factTypeName);

} else {
callback.callback( fields );
callback.callback(fields);
}
}

Expand Down
Expand Up @@ -43,6 +43,7 @@ public class AsyncPackageDataModelOracleImplTest {
private PackageDataModelOracleIncrementalPayload personPayload;
private PackageDataModelOracleIncrementalPayload addressPayload;
private PackageDataModelOracleIncrementalPayload giantPayload;
private PackageDataModelOracleIncrementalPayload defaultPayload;

@Before
public void setUp() throws Exception {
Expand All @@ -52,6 +53,7 @@ public void setUp() throws Exception {
personPayload = createPersonPayload();
addressPayload = createAddressPayload();
giantPayload = createGiantPayload();
defaultPayload = createDefaultPayload();

oracle.addGlobals(createGlobals());

Expand All @@ -77,6 +79,10 @@ private Imports createImports() {
return imports;
}

private PackageDataModelOracleIncrementalPayload createDefaultPayload() {
return new PackageDataModelOracleIncrementalPayload();
}

private PackageDataModelOracleIncrementalPayload createGiantPayload() {
PackageDataModelOracleIncrementalPayload payload = new PackageDataModelOracleIncrementalPayload();
HashMap<String, ModelField[]> addressModelFields = new HashMap<String, ModelField[]>();
Expand Down Expand Up @@ -165,6 +171,21 @@ public void callback(ModelField[] result) {

}

@Test
public void testGetFieldCompletitionsForSomethingThatDoesNotReturnFields() throws Exception {
Callback<ModelField[]> callback = spy(new Callback<ModelField[]>() {
@Override
public void callback(ModelField[] result) {
assertEquals(0, result.length);
}
});

oracle.getFieldCompletions("I.do.not.Exist", callback);

verify(callback).callback(any(ModelField[].class));

}

@Test
public void testGetFieldCompletitionsMutators() throws Exception {
Callback<ModelField[]> callback = spy(new Callback<ModelField[]>() {
Expand Down Expand Up @@ -254,8 +275,11 @@ public PackageDataModelOracleIncrementalPayload getUpdates(Path resourcePath, Im
callback.callback(addressPayload);
} else if (factType.equals("org.globals.GiantContainerOfInformation")) {
callback.callback(giantPayload);
} else {
callback.callback(defaultPayload);
}


return null;
}
};
Expand Down

0 comments on commit ede7cbc

Please sign in to comment.