Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/*
* Copyright MapStruct Authors.
*
* Licensed under the Apache License version 2.0, available at https://www.apache.org/licenses/LICENSE-2.0
*/
package org.mapstruct.intellij.codeinsight.references;

import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.mapstruct.intellij.MapStructBundle;

/**
* @author Filip Hrisafov
*/
abstract class BaseMappingReference extends MapstructBaseReference {

BaseMappingReference(@NotNull PsiElement element, @Nullable MapstructBaseReference previousReference,
TextRange rangeInElement, String value) {
super( element, previousReference, rangeInElement, value );
}

@NotNull
@Override
public String getUnresolvedMessagePattern() {
//noinspection UnresolvedPropertyKey
return MapStructBundle.message( "unknown.property" );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
*/
package org.mapstruct.intellij.codeinsight.references;

import com.intellij.codeInsight.daemon.EmptyResolveMessageProvider;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
Expand All @@ -21,7 +22,7 @@
*
* @author Filip Hrisafov
*/
public abstract class BaseReference extends PsiReferenceBase<PsiElement> {
public abstract class BaseReference extends PsiReferenceBase<PsiElement> implements EmptyResolveMessageProvider {

/**
* @param element the element for which a reference should be found
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.intellij.psi.PsiMethod;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.mapstruct.intellij.MapStructBundle;

/**
* Base Reference for {@link org.mapstruct.ValueMapping}(s).
Expand Down Expand Up @@ -108,6 +109,13 @@ public final Object[] getVariants() {
@NotNull
abstract Object[] getVariantsInternal(@NotNull PsiMethod mappingMethod, @NotNull PsiClass enumClass);

@NotNull
@Override
public String getUnresolvedMessagePattern() {
//noinspection UnresolvedPropertyKey
return MapStructBundle.message( "unknown.enum.constant" );
}

private static boolean isNotValueMapping(@Nullable PsiMethod mappingMethod) {
return mappingMethod == null || mappingMethod.getParameterList().getParametersCount() != 1;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.intellij.psi.PsiTypes;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.mapstruct.intellij.MapStructBundle;
import org.mapstruct.intellij.util.MapstructUtil;

import static com.intellij.codeInsight.AnnotationUtil.findAnnotation;
Expand Down Expand Up @@ -167,6 +168,13 @@ PsiType resolvedType() {
return null;
}

@NotNull
@Override
public String getUnresolvedMessagePattern() {
//noinspection UnresolvedPropertyKey
return MapStructBundle.message( "unknown.qualifiedByName.reference" );
}

/**
* @param psiElement the literal for which references need to be created
* @return the references for the given {@code psiLiteral}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
*
* @author Filip Hrisafov
*/
class MapstructSourceReference extends MapstructBaseReference {
class MapstructSourceReference extends BaseMappingReference {

/**
* Create a new {@link MapstructSourceReference} with the provided parameters.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
*
* @author Filip Hrisafov
*/
class MapstructTargetReference extends MapstructBaseReference {
class MapstructTargetReference extends BaseMappingReference {

private final MapStructVersion mapStructVersion;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public void visitElement(@NotNull PsiElement element) {
if ( psiReference instanceof BaseReference baseReference && psiReference.resolve() == null ) {
TextRange range = psiReference.getRangeInElement();
if (range.isEmpty() && range.getStartOffset() == 1 && "\"\"".equals( element.getText() ) ) {
String message = ProblemsHolder.unresolvedReferenceMessage( psiReference );
String message = ProblemsHolder.unresolvedReferenceMessage( baseReference );
holder.registerProblem( element, message, ProblemHighlightType.LIKE_UNKNOWN_SYMBOL,
TextRange.create( 0, 2 ) );
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,3 +44,6 @@ intention.replace.source.property=Replace source ''.'' with ''{0}''
plugin.settings.title=MapStruct
plugin.settings.quickFix.title=Quick fix properties
plugin.settings.quickFix.preferSourceBeforeTargetInMapping=Prefer source before target in @Mapping
unknown.property=Unknown property ''{0}''
unknown.enum.constant=Unknown enum constant ''{0}''
unknown.qualifiedByName.reference=Unknown @Named reference ''{0}''
4 changes: 2 additions & 2 deletions testData/inspection/UnknownIgnoreUnmappedSourceReference.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ public void setTestName(String testName) {
interface SingleMappingMapper {

@Mapping(target = "testName", ignore = true)
@BeanMapping(ignoreUnmappedSourceProperties = {"<error descr="Cannot resolve symbol 'testName'">testName</error>"})
@BeanMapping(ignoreUnmappedSourceProperties = {"<error descr="Unknown property 'testName'">testName</error>"})
Target map(Source source);
}

Expand All @@ -49,6 +49,6 @@ interface SingleMappingsMapper {
@Mappings({
@Mapping(target = "testName", ignore = true)
})
@BeanMapping(ignoreUnmappedSourceProperties = {"<error descr="Cannot resolve symbol 'testName'">testName</error>"})
@BeanMapping(ignoreUnmappedSourceProperties = {"<error descr="Unknown property 'testName'">testName</error>"})
Target map(Source source);
}
4 changes: 2 additions & 2 deletions testData/inspection/UnknownNestedSourceReference.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,15 @@ public void setTestName(String testName) {
@Mapper
interface SingleMappingMapper {

@Mapping(target = "testName", source="inner.<error descr="Cannot resolve symbol 'testName'">testName</error>")
@Mapping(target = "testName", source="inner.<error descr="Unknown property 'testName'">testName</error>")
Target map(Source source);
}

@Mapper
interface SingleMappingsMapper {

@Mappings({
@Mapping(target = "testName", source="inner.<error descr="Cannot resolve symbol 'testName'">testName</error>")
@Mapping(target = "testName", source="inner.<error descr="Unknown property 'testName'">testName</error>")
})
Target map(Source source);
}
4 changes: 2 additions & 2 deletions testData/inspection/UnknownNestedTargetReference.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,15 @@ public void setTestName(String testName) {
@Mapper
interface SingleMappingMapper {

@Mapping(target = "inner.<error descr="Cannot resolve symbol 'name'">name</error>", source="name")
@Mapping(target = "inner.<error descr="Unknown property 'name'">name</error>", source="name")
Target map(Source source);
}

@Mapper
interface SingleMappingsMapper {

@Mappings({
@Mapping(target = "inner.<error descr="Cannot resolve symbol 'name'">name</error>", source="name")
@Mapping(target = "inner.<error descr="Unknown property 'name'">name</error>", source="name")
})
Target map(Source source);
}
13 changes: 10 additions & 3 deletions testData/inspection/UnknownQualifiedByNameReferenceReference.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,22 @@ public void setTestName(String testName) {
@Mapper
interface SingleMappingMapper {

@Mapping(target = "testName", source = "name", qualifiedByName ="<error descr="Cannot resolve symbol 'StringMapper'">StringMapper</error>")
@Mapping(target = "testName", source = "name", qualifiedByName ="<error descr="Unknown @Named reference 'StringMapper'">StringMapper</error>")
Target map(Source source);
}

@Mapper
interface SingleMappingsMapper {

@Mappings({
@Mapping(target = "testName", source = "name", qualifiedByName ="<error descr="Cannot resolve symbol 'StringMapper'">StringMapper</error>")
@Mapping(target = "testName", source = "name", qualifiedByName ="<error descr="Unknown @Named reference 'StringMapper'">StringMapper</error>")
})
Target map(Source source);
}
}

@Mapper
interface EmptyMappingMapper {

@Mapping(target = "testName", source = "name", qualifiedByName =<error descr="Unknown @Named reference ''">""</error>)
Target map(Source source);
}
4 changes: 2 additions & 2 deletions testData/inspection/UnknownSourceReference.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,15 @@ public void setTestName(String testName) {
@Mapper
interface SingleMappingMapper {

@Mapping(target = "testName", source="<error descr="Cannot resolve symbol 'testName'">testName</error>")
@Mapping(target = "testName", source="<error descr="Unknown property 'testName'">testName</error>")
Target map(Source source);
}

@Mapper
interface SingleMappingsMapper {

@Mappings({
@Mapping(target = "testName", source="<error descr="Cannot resolve symbol 'testName'">testName</error>")
@Mapping(target = "testName", source="<error descr="Unknown property 'testName'">testName</error>")
})
Target map(Source source);
}
13 changes: 10 additions & 3 deletions testData/inspection/UnknownTargetReference.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,22 @@ public void setTestName(String testName) {
@Mapper
interface SingleMappingMapper {

@Mapping(target = "<error descr="Cannot resolve symbol 'name'">name</error>", source="name")
@Mapping(target = "<error descr="Unknown property 'name'">name</error>", source="name")
Target map(Source source);
}

@Mapper
interface SingleMappingsMapper {

@Mappings({
@Mapping(target = "<error descr="Cannot resolve symbol 'name'">name</error>", source="name")
@Mapping(target = "<error descr="Unknown property 'name'">name</error>", source="name")
})
Target map(Source source);
}
}

@Mapper
interface EmptyMappingMapper {

@Mapping(target = <error descr="Unknown property ''">""</error>, source="name")
Target map(Source source);
}
11 changes: 9 additions & 2 deletions testData/inspection/UnknownValueMappingSourceReference.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ enum Source {
@Mapper
interface SingleValueMappingMapper {

@ValueMapping(target = "FIST", source = "<error descr="Cannot resolve symbol 'OTHER'">OTHER</error>")
@ValueMapping(target = "FIST", source = "<error descr="Unknown enum constant 'OTHER'">OTHER</error>")
Target map(Source source);
}

@Mapper
interface SingleValueMappingsMapper {

@ValueMappings({
@ValueMapping(target = "FIST", source = "<error descr="Cannot resolve symbol 'OTHER'">OTHER</error>")
@ValueMapping(target = "FIST", source = "<error descr="Unknown enum constant 'OTHER'">OTHER</error>")
})
Target map(Source source);
}
Expand All @@ -43,3 +43,10 @@ interface StringToEnumMapper {
Target map(String source);
}

@Mapper
interface EmptyValueMappingMapper {

@ValueMapping(target = "FIST", source = <error descr="Unknown enum constant ''">""</error>)
Target map(Source source);
}

13 changes: 10 additions & 3 deletions testData/inspection/UnknownValueMappingTargetReference.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,15 @@ enum Source {
@Mapper
interface SingleValueMappingMapper {

@ValueMapping(target = "<error descr="Cannot resolve symbol 'OTHER'">OTHER</error>", source = "FIST")
@ValueMapping(target = "<error descr="Unknown enum constant 'OTHER'">OTHER</error>", source = "FIST")
Target map(Source source);
}

@Mapper
interface SingleValueMappingsMapper {

@ValueMappings({
@ValueMapping(target = "<error descr="Cannot resolve symbol 'OTHER'">OTHER</error>", source = "FIST")
@ValueMapping(target = "<error descr="Unknown enum constant 'OTHER'">OTHER</error>", source = "FIST")
})
Target map(Source source);
}
Expand All @@ -41,4 +41,11 @@ interface EnumToStringMapper {

@ValueMapping(target = "OTHER", source = "FIST")
String map(Source source);
}
}

@Mapper
interface EmptyValueMappingMapper {

@ValueMapping(target = <error descr="Unknown enum constant ''">""</error>, source = "FIST")
Target map(Source source);
}