This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 205377
Collapse All | Expand All

(-)a/maven/src/org/netbeans/modules/maven/nodes/DependencyNode.java (-10 / +17 lines)
Lines 117-122 Link Here
117
import org.openide.filesystems.URLMapper;
117
import org.openide.filesystems.URLMapper;
118
import org.openide.loaders.DataObject;
118
import org.openide.loaders.DataObject;
119
import org.openide.loaders.DataObjectNotFoundException;
119
import org.openide.loaders.DataObjectNotFoundException;
120
import org.openide.modules.StaticResource;
120
import org.openide.nodes.AbstractNode;
121
import org.openide.nodes.AbstractNode;
121
import org.openide.nodes.Children;
122
import org.openide.nodes.Children;
122
import org.openide.nodes.FilterNode;
123
import org.openide.nodes.FilterNode;
Lines 139-147 Link Here
139
 * @author  Milos Kleint 
140
 * @author  Milos Kleint 
140
 */
141
 */
141
public class DependencyNode extends AbstractNode implements PreferenceChangeListener {
142
public class DependencyNode extends AbstractNode implements PreferenceChangeListener {
142
    private static final String JAVADOC_BADGE_ICON = "org/netbeans/modules/maven/DependencyJavadocIncluded.png"; //NOI18N
143
    private static final @StaticResource String JAVADOC_BADGE_ICON = "org/netbeans/modules/maven/DependencyJavadocIncluded.png"; //NOI18N
143
    private static final String SOURCE_BADGE_ICON = "org/netbeans/modules/maven/DependencySrcIncluded.png"; //NOI18N
144
    private static final @StaticResource String SOURCE_BADGE_ICON = "org/netbeans/modules/maven/DependencySrcIncluded.png"; //NOI18N
144
    private static final String MANAGED_BADGE_ICON = "org/netbeans/modules/maven/DependencyManaged.png"; //NOI18N
145
    private static final @StaticResource String MANAGED_BADGE_ICON = "org/netbeans/modules/maven/DependencyManaged.png"; //NOI18N
146
    private static final @StaticResource String ARTIFACT_ICON = "org/netbeans/modules/maven/ArtifactIcon.png";
147
    private static final @StaticResource String DEPENDENCY_ICON = "org/netbeans/modules/maven/DependencyIcon.png";
148
    private static final @StaticResource String MAVEN_ICON = "org/netbeans/modules/maven/resources/Maven2Icon.gif";
149
    private static final @StaticResource String TRANSITIVE_ARTIFACT_ICON = "org/netbeans/modules/maven/TransitiveArtifactIcon.png";
150
    private static final @StaticResource String TRANSITIVE_DEPENDENCY_ICON = "org/netbeans/modules/maven/TransitiveDependencyIcon.png";
151
    private static final @StaticResource String TRANSITIVE_MAVEN_ICON = "org/netbeans/modules/maven/TransitiveMaven2Icon.gif";
145
152
146
    private Artifact art;
153
    private Artifact art;
147
    private NbMavenProjectImpl project;
154
    private NbMavenProjectImpl project;
Lines 235-254 Link Here
235
    private void setIconBase(boolean longLiving) {
242
    private void setIconBase(boolean longLiving) {
236
        if (longLiving && isDependencyProjectAvailable()) {
243
        if (longLiving && isDependencyProjectAvailable()) {
237
            if (isTransitive()) {
244
            if (isTransitive()) {
238
                setIconBaseWithExtension("org/netbeans/modules/maven/TransitiveMaven2Icon.gif"); //NOI18N
245
                setIconBaseWithExtension(TRANSITIVE_MAVEN_ICON);
239
            } else {
246
            } else {
240
                setIconBaseWithExtension("org/netbeans/modules/maven/resources/Maven2Icon.gif"); //NOI18N
247
                setIconBaseWithExtension(MAVEN_ICON);
241
            }
248
            }
242
        } else if (isTransitive()) {
249
        } else if (isTransitive()) {
243
            if (isAddedToCP()) {
250
            if (isAddedToCP()) {
244
                setIconBaseWithExtension("org/netbeans/modules/maven/TransitiveDependencyIcon.png"); //NOI18N
251
                setIconBaseWithExtension(TRANSITIVE_DEPENDENCY_ICON);
245
            } else {
252
            } else {
246
                setIconBaseWithExtension("org/netbeans/modules/maven/TransitiveArtifactIcon.png"); //NOI18N
253
                setIconBaseWithExtension(TRANSITIVE_ARTIFACT_ICON);
247
            }
254
            }
248
        } else if (isAddedToCP()) { //NOI18N
255
        } else if (isAddedToCP()) {
249
            setIconBaseWithExtension("org/netbeans/modules/maven/DependencyIcon.png"); //NOI18N
256
            setIconBaseWithExtension(DEPENDENCY_ICON);
250
        } else {
257
        } else {
251
            setIconBaseWithExtension("org/netbeans/modules/maven/ArtifactIcon.png"); //NOI18N
258
            setIconBaseWithExtension(ARTIFACT_ICON);
252
        }
259
        }
253
    }
260
    }
254
261
(-)a/openide.modules/apichanges.xml (+15 lines)
Lines 50-55 Link Here
50
  	<apidef name="modules">Modules API</apidef>
50
  	<apidef name="modules">Modules API</apidef>
51
  </apidefs>
51
  </apidefs>
52
<changes>
52
<changes>
53
    <change id="StaticResource">
54
        <api name="modules"/>
55
        <summary>Added <code>StaticResource</code></summary>
56
        <version major="7" minor="29"/>
57
        <date day="28" month="11" year="2011"/>
58
        <author login="jglick"/>
59
        <compatibility addition="yes"/>
60
        <description>
61
            <p>
62
                Introduced an annotation for validating the existence of static resources.
63
            </p>
64
        </description>
65
        <class package="org.openide.modules" name="StaticResource"/>
66
        <issue number="205377"/>
67
    </change>
53
    <change id="Places">
68
    <change id="Places">
54
        <api name="modules"/>
69
        <api name="modules"/>
55
        <summary>Added <code>Places</code></summary>
70
        <summary>Added <code>Places</code></summary>
(-)a/openide.modules/manifest.mf (-1 / +1 lines)
Lines 1-5 Link Here
1
Manifest-Version: 1.0
1
Manifest-Version: 1.0
2
OpenIDE-Module: org.openide.modules
2
OpenIDE-Module: org.openide.modules
3
OpenIDE-Module-Localizing-Bundle: org/openide/modules/Bundle.properties
3
OpenIDE-Module-Localizing-Bundle: org/openide/modules/Bundle.properties
4
OpenIDE-Module-Specification-Version: 7.28
4
OpenIDE-Module-Specification-Version: 7.29
5
5
(-)a/openide.modules/src/org/netbeans/modules/openide/modules/StaticResourceProcessor.java (+138 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2011 Oracle and/or its affiliates. All rights reserved.
5
 *
6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
7
 * Other names may be trademarks of their respective owners.
8
 *
9
 * The contents of this file are subject to the terms of either the GNU
10
 * General Public License Version 2 only ("GPL") or the Common
11
 * Development and Distribution License("CDDL") (collectively, the
12
 * "License"). You may not use this file except in compliance with the
13
 * License. You can obtain a copy of the License at
14
 * http://www.netbeans.org/cddl-gplv2.html
15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
16
 * specific language governing permissions and limitations under the
17
 * License.  When distributing the software, include this License Header
18
 * Notice in each file and include the License file at
19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
20
 * particular file as subject to the "Classpath" exception as provided
21
 * by Oracle in the GPL Version 2 section of the License file that
22
 * accompanied this code. If applicable, add the following below the
23
 * License Header, with the fields enclosed by brackets [] replaced by
24
 * your own identifying information:
25
 * "Portions Copyrighted [year] [name of copyright owner]"
26
 *
27
 * If you wish your version of this file to be governed by only the CDDL
28
 * or only the GPL Version 2, indicate your decision by adding
29
 * "[Contributor] elects to include this software in this distribution
30
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
31
 * single choice of license, a recipient has the option to distribute
32
 * your version of this file under either the CDDL, the GPL Version 2 or
33
 * to extend the choice of license to its licensees as provided above.
34
 * However, if you add GPL Version 2 code and therefore, elected the GPL
35
 * Version 2 license, then the option applies only if the new code is
36
 * made subject to such option by the copyright holder.
37
 *
38
 * Contributor(s):
39
 *
40
 * Portions Copyrighted 2011 Sun Microsystems, Inc.
41
 */
42
43
package org.netbeans.modules.openide.modules;
44
45
import java.io.FileNotFoundException;
46
import java.io.IOException;
47
import java.net.URI;
48
import java.net.URISyntaxException;
49
import java.util.Collections;
50
import java.util.Set;
51
import javax.annotation.processing.AbstractProcessor;
52
import javax.annotation.processing.Processor;
53
import javax.annotation.processing.RoundEnvironment;
54
import javax.annotation.processing.SupportedSourceVersion;
55
import javax.lang.model.SourceVersion;
56
import javax.lang.model.element.Element;
57
import javax.lang.model.element.PackageElement;
58
import javax.lang.model.element.TypeElement;
59
import javax.lang.model.element.VariableElement;
60
import javax.tools.Diagnostic;
61
import javax.tools.JavaFileManager;
62
import javax.tools.StandardLocation;
63
import org.openide.modules.StaticResource;
64
import org.openide.util.lookup.ServiceProvider;
65
66
@ServiceProvider(service=Processor.class)
67
@SupportedSourceVersion(SourceVersion.RELEASE_6)
68
public class StaticResourceProcessor extends AbstractProcessor {
69
70
    public @Override Set<String> getSupportedAnnotationTypes() {
71
        return Collections.singleton(StaticResource.class.getCanonicalName());
72
    }
73
74
    @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
75
        if (!roundEnv.processingOver()) {
76
            for (Element e : roundEnv.getElementsAnnotatedWith(StaticResource.class)) {
77
                StaticResource sr = e.getAnnotation(StaticResource.class);
78
                if (sr == null) {
79
                    continue;
80
                }
81
                Object v = ((VariableElement) e).getConstantValue();
82
                if (!(v instanceof String)) {
83
                    processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "@StaticResource may only be used on a String constant", e);
84
                    continue;
85
                }
86
                String resource = (String) v;
87
                // remainder adapted from LayerBuilder, but cannot reference that here
88
                if (sr.relative()) {
89
                    try {
90
                        resource = new URI(null, findPackage(e).replace('.', '/') + "/", null).resolve(new URI(null, resource, null)).getPath();
91
                    } catch (URISyntaxException x) {
92
                        processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, x.getMessage(), e);
93
                        continue;
94
                    }
95
                }
96
                if (resource.startsWith("/")) {
97
                    processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "do not use leading slashes on resource paths", e);
98
                    continue;
99
                }
100
                if (sr.searchClasspath()) {
101
                    boolean ok = false;
102
                    for (JavaFileManager.Location loc : new JavaFileManager.Location[] {StandardLocation.SOURCE_PATH, /* #181355 */ StandardLocation.CLASS_OUTPUT, StandardLocation.CLASS_PATH, StandardLocation.PLATFORM_CLASS_PATH}) {
103
                        try {
104
                            processingEnv.getFiler().getResource(loc, "", resource);
105
                            ok = true;
106
                        } catch (IOException ex) {
107
                            continue;
108
                        }
109
                    }
110
                    if (!ok) {
111
                        processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "cannot find resource " + resource, e);
112
                    }
113
                } else {
114
                    try {
115
                        try {
116
                            processingEnv.getFiler().getResource(StandardLocation.SOURCE_PATH, "", resource).openInputStream().close();
117
                        } catch (FileNotFoundException x) {
118
                            processingEnv.getFiler().getResource(StandardLocation.CLASS_OUTPUT, "", resource).openInputStream().close();
119
                        }
120
                    } catch (IOException x) {
121
                        processingEnv.getMessager().printMessage(Diagnostic.Kind.ERROR, "cannot find resource " + resource, e);
122
                    }
123
                }
124
            }
125
        }
126
        return true;
127
    }
128
129
    private static String findPackage(Element e) {
130
        switch (e.getKind()) {
131
        case PACKAGE:
132
            return ((PackageElement) e).getQualifiedName().toString();
133
        default:
134
            return findPackage(e.getEnclosingElement());
135
        }
136
    }
137
138
}
(-)a/openide.modules/src/org/openide/modules/StaticResource.java (+79 lines)
Line 0 Link Here
1
/*
2
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3
 *
4
 * Copyright 2011 Oracle and/or its affiliates. All rights reserved.
5
 *
6
 * Oracle and Java are registered trademarks of Oracle and/or its affiliates.
7
 * Other names may be trademarks of their respective owners.
8
 *
9
 * The contents of this file are subject to the terms of either the GNU
10
 * General Public License Version 2 only ("GPL") or the Common
11
 * Development and Distribution License("CDDL") (collectively, the
12
 * "License"). You may not use this file except in compliance with the
13
 * License. You can obtain a copy of the License at
14
 * http://www.netbeans.org/cddl-gplv2.html
15
 * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
16
 * specific language governing permissions and limitations under the
17
 * License.  When distributing the software, include this License Header
18
 * Notice in each file and include the License file at
19
 * nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
20
 * particular file as subject to the "Classpath" exception as provided
21
 * by Oracle in the GPL Version 2 section of the License file that
22
 * accompanied this code. If applicable, add the following below the
23
 * License Header, with the fields enclosed by brackets [] replaced by
24
 * your own identifying information:
25
 * "Portions Copyrighted [year] [name of copyright owner]"
26
 *
27
 * If you wish your version of this file to be governed by only the CDDL
28
 * or only the GPL Version 2, indicate your decision by adding
29
 * "[Contributor] elects to include this software in this distribution
30
 * under the [CDDL or GPL Version 2] license." If you do not indicate a
31
 * single choice of license, a recipient has the option to distribute
32
 * your version of this file under either the CDDL, the GPL Version 2 or
33
 * to extend the choice of license to its licensees as provided above.
34
 * However, if you add GPL Version 2 code and therefore, elected the GPL
35
 * Version 2 license, then the option applies only if the new code is
36
 * made subject to such option by the copyright holder.
37
 *
38
 * Contributor(s):
39
 *
40
 * Portions Copyrighted 2011 Sun Microsystems, Inc.
41
 */
42
43
package org.openide.modules;
44
45
import java.lang.annotation.Documented;
46
import java.lang.annotation.ElementType;
47
import java.lang.annotation.Retention;
48
import java.lang.annotation.RetentionPolicy;
49
import java.lang.annotation.Target;
50
import org.openide.util.ImageUtilities;
51
52
/**
53
 * Marker for a constant representing a static resource.
54
 * The annotated field must be a compile-time {@code String} constant whose value denotes a resource path.
55
 * For example, the resource might be an icon path intended for {@link ImageUtilities#loadImage(String)}.
56
 * The primary purpose of the annotation is for its processor, which will signal a compile-time error
57
 * if the resource does not in fact exist - ensuring that at least this usage will not be accidentally
58
 * broken by moving, renaming, or deleting the resource.
59
 * @since 7.29
60
 */
61
@Target(ElementType.FIELD)
62
@Retention(RetentionPolicy.SOURCE)
63
@Documented
64
public @interface StaticResource {
65
66
    /**
67
     * If true, permit the resource to be in the classpath.
68
     * By default, it may only be in the sourcepath.
69
     */
70
    boolean searchClasspath() default false;
71
72
    /**
73
     * If true, consider the resource path to be relative to the current package.
74
     * ({@code ../} sequences are permitted.)
75
     * By default, it must be an absolute path (not starting with {@code /}).
76
     */
77
    boolean relative() default false;
78
79
}

Return to bug 205377