IDEA-107511 maven: tag sourceDirectory can't recognize a value as path in multi-module project

This commit is contained in:
Sergey Evdokimov
2013-05-21 18:42:56 +04:00
parent 452de9c6a5
commit 44cbf76134
3 changed files with 120 additions and 3 deletions
@@ -25,6 +25,7 @@ import com.intellij.util.xml.GenericDomValue;
import com.intellij.util.xml.Required;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.dom.references.MavenDirectoryPathReferenceConverter;
import org.jetbrains.idea.maven.dom.references.MavenSourceDirectoryConverter;
/**
* http://maven.apache.org/POM/4.0.0:Build interface.
@@ -46,7 +47,7 @@ public interface MavenDomBuild extends MavenDomBuildBase {
*/
@NotNull
@Required(value = false, nonEmpty = true)
@Convert(value = MavenDirectoryPathReferenceConverter.class, soft = false)
@Convert(value = MavenSourceDirectoryConverter.class, soft = false)
GenericDomValue<PathReference> getSourceDirectory();
/**
@@ -60,7 +61,7 @@ public interface MavenDomBuild extends MavenDomBuildBase {
*/
@NotNull
@Required(value = false, nonEmpty = true)
@Convert(value = MavenDirectoryPathReferenceConverter.class, soft = false)
@Convert(value = MavenSourceDirectoryConverter.class, soft = false)
GenericDomValue<PathReference> getScriptSourceDirectory();
/**
@@ -74,7 +75,7 @@ public interface MavenDomBuild extends MavenDomBuildBase {
*/
@NotNull
@Required(value = false, nonEmpty = true)
@Convert(value = MavenDirectoryPathReferenceConverter.class, soft = false)
@Convert(value = MavenSourceDirectoryConverter.class, soft = false)
GenericDomValue<PathReference> getTestSourceDirectory();
/**
@@ -0,0 +1,42 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.idea.maven.dom.references;
import com.intellij.util.xml.DomElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.idea.maven.dom.converters.MavenDomSoftAwareConverter;
import org.jetbrains.idea.maven.dom.model.MavenDomBuild;
import org.jetbrains.idea.maven.dom.model.MavenDomProjectModel;
/**
* @author Sergey Evdokimov
*/
public class MavenSourceDirectoryConverter extends MavenDirectoryPathReferenceConverter implements MavenDomSoftAwareConverter {
@Override
public boolean isSoft(@NotNull DomElement element) {
DomElement buildElement = element.getParent();
if (!(buildElement instanceof MavenDomBuild)) {
return false;
}
DomElement mavenProject = buildElement.getParent();
if (!(mavenProject instanceof MavenDomProjectModel)) {
return false;
}
return "pom".equals(((MavenDomProjectModel)mavenProject).getPackaging().getStringValue());
}
}
@@ -0,0 +1,74 @@
/*
* Copyright 2000-2013 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.idea.maven.dom;
/**
* @author Sergey Evdokimov
*/
public class MavenDomSoftReferencesInParentTest extends MavenDomTestCase {
public void testDoNotHighlightSourceDirectoryInParentPom() throws Throwable {
importProject("<groupId>test</groupId>\n" +
"<artifactId>project</artifactId>\n" +
"<version>1</version>\n" +
"<packaging>pom</packaging>\n" +
"<build>\n" +
"<sourceDirectory>dsfsfd/sdfsdf</sourceDirectory>\n" +
"<testSourceDirectory>qwqwq/weqweqw</testSourceDirectory>\n" +
"<scriptSourceDirectory>dfsdf/fsdf</scriptSourceDirectory>\n" +
"</build>\n" +
"");
checkHighlighting();
}
public void testHighlightSourceDirectory() throws Throwable {
importProject("<groupId>test</groupId>\n" +
"<artifactId>project</artifactId>\n" +
"<version>1</version>\n" +
"<packaging>jar</packaging>\n" +
"<build>\n" +
"<sourceDirectory>foo1</sourceDirectory>\n" +
"<testSourceDirectory>foo2</testSourceDirectory>\n" +
"<scriptSourceDirectory>foo3</scriptSourceDirectory>\n" +
"</build>\n" +
"");
createProjectPom("<groupId>test</groupId>\n" +
"<artifactId>project</artifactId>\n" +
"<version>1</version>\n" +
"<packaging>jar</packaging>\n" +
"<build>\n" +
//"<sourceDirectory><error descr=\"Cannot resolve file 'foo1'\">foo1</error></sourceDirectory>\n" +
//"<testSourceDirectory><error descr=\"Cannot resolve file 'foo2'\">foo2</error></testSourceDirectory>\n" +
//"<scriptSourceDirectory><error descr=\"Cannot resolve file 'foo3'\">foo3</error></scriptSourceDirectory>\n" +
"<sourceDirectory><error>foo1</error></sourceDirectory>\n" +
"<testSourceDirectory><error>foo2</error></testSourceDirectory>\n" +
"<scriptSourceDirectory><error>foo3</error></scriptSourceDirectory>\n" +
"</build>\n" +
"");
checkHighlighting();
}
}