class AsyncPackageDataModelOracleImpl implements AsyncPackageDataModelOracle {

    @Override
    public void getMethodParams(final String factType,
                                final String methodNameWithParams,
                                final Callback<List<String>> callback) {
        final String fqcnFactName = getFQCNByFactName(factType);
        final List<MethodInfo> methodInformation = projectMethodInformation.get(fqcnFactName);

        //Load incremental content
        if (methodInformation == null) {
            service.call(new RemoteCallback<PackageDataModelOracleIncrementalPayload>() {

                @Override
                public void callback(final PackageDataModelOracleIncrementalPayload dataModel) {
                    AsyncPackageDataModelOracleUtilities.populateDataModelOracle(AsyncPackageDataModelOracleImpl.this,
                                                                                 dataModel);
                    final List<MethodInfo> methodInformation = projectMethodInformation.get(fqcnFactName);
                    callback.callback(getMethodParams(methodInformation,
                                                      methodNameWithParams));
                }
            }).getUpdates(resourcePath,
                          imports,
                          fqcnFactName);
        } else {
            callback.callback(getMethodParams(methodInformation,
                                              methodNameWithParams));
        }
    }

    @Inject public  AsyncPackageDataModelOracleImpl(final Caller<IncrementalDataModelService> service,
                                           final Instance<DynamicValidator> validatorInstance);

}