Fix yang-maven-plugin generating superfluous files 82/33082/2
authorRobert Varga <rovarga@cisco.com>
Wed, 20 Jan 2016 12:32:42 +0000 (13:32 +0100)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 20 Jan 2016 15:19:54 +0000 (15:19 +0000)
Logic detecting whether a file belongs to the current project has been
broken in change I75c8b67af01212a8ac5b832625f9405bb0108455. It works
most of the time with 'mvn clean install', but fails if there is a
generate-sources phase before dependency projects are
packaged/installed. This typically happens when invoked from IDE such as
Eclipse.

Perform correct checks to see if a particular file was injected from
current project.

The correct fix is to use SchemaContextResolver, where we inject local
files, capture their SchemaSourceIdentifiers, then inject any
dependencies. That way we can perform the lookup based on
ModuleIdentifiers and not rely on the particulars what form was used to
get the source.

Change-Id: I2392dc05bfbc94d613ec896d38fac21734a5bc81
Signed-off-by: Robert Varga <rovarga@cisco.com>
yang/yang-maven-plugin/src/main/java/org/opendaylight/yangtools/yang2sources/plugin/YangToSourcesProcessor.java

index 195c7f39ba2c43da6220827b81e3d975a3c24915..3de8eef5ebce7c5c2823f1a7213a5b65a966669f 100644 (file)
@@ -139,13 +139,14 @@ class YangToSourcesProcessor {
                 return null;
             }
 
-            final List<InputStream> yangsInProject = new ArrayList<>();
+            final List<NamedFileInputStream> yangsInProject = new ArrayList<>();
             for (final File f : yangFilesInProject) {
                 // FIXME: This is hack - normal path should be reported.
                 yangsInProject.add(new NamedFileInputStream(f, META_INF_YANG_STRING + File.separator + f.getName()));
             }
 
-            List<InputStream> all = new ArrayList<>(yangsInProject);
+            List<InputStream> all = new ArrayList<>();
+            all.addAll(yangsInProject);
             closeables.addAll(yangsInProject);
 
             /**
@@ -170,8 +171,17 @@ class YangToSourcesProcessor {
                 Set<Module> parsedAllYangModules = resolveSchemaContext.getModules();
                 projectYangModules = new HashSet<>();
                 for (Module module : parsedAllYangModules) {
-                    if(module.getModuleSourcePath()!=null) {
-                        projectYangModules.add(module);
+                    final String path = module.getModuleSourcePath();
+                    if (path != null) {
+                        LOG.debug("Looking for source {}", path);
+                        for (NamedFileInputStream is : yangsInProject) {
+                            LOG.debug("In project destination {}", is.getFileDestination());
+                            if (path.equals(is.getFileDestination())) {
+                                LOG.debug("Module {} belongs to current project", module);
+                                projectYangModules.add(module);
+                                break;
+                            }
+                        }
                     }
                 }
             } finally {